summaryrefslogtreecommitdiff
path: root/rt
diff options
context:
space:
mode:
Diffstat (limited to 'rt')
-rw-r--r--rt/.gitignore42
-rw-r--r--rt/FREESIDE_MODIFIED134
-rw-r--r--rt/HOWTO/README14
-rw-r--r--rt/HOWTO/change.txt67
-rw-r--r--rt/HOWTO/release.txt124
-rw-r--r--rt/HOWTO/version-control.txt41
-rw-r--r--rt/Makefile33
-rw-r--r--rt/Makefile.in5
-rwxr-xr-xrt/README517
-rwxr-xr-xrt/bin/fastcgi_server12
-rwxr-xr-xrt/bin/mason_handler.fcgi11
-rwxr-xr-xrt/bin/mason_handler.scgi12
-rw-r--r--rt/bin/mason_handler.svc11
-rwxr-xr-xrt/bin/rt2587
-rw-r--r--rt/bin/rt-commit-handler2
-rw-r--r--rt/bin/rt-commit-handler.in846
-rwxr-xr-xrt/bin/rt-mailgate4
-rw-r--r--rt/bin/rt-mailgate.in4
-rwxr-xr-xrt/bin/standalone_httpd2
-rwxr-xr-xrt/bin/webmux.pl205
-rw-r--r--rt/config256
-rw-r--r--rt/config.layout.in (renamed from rt/config.layout)89
-rw-r--r--rt/config.log437
-rw-r--r--rt/config.pld21
-rwxr-xr-xrt/config.status132
-rw-r--r--rt/configure.ac5
-rw-r--r--rt/etc/RT_Config.pm29
-rw-r--r--rt/etc/RT_Config.pm.in31
-rw-r--r--rt/etc/RT_SiteConfig.pm40
-rw-r--r--rt/etc/acl.Oracle12
-rwxr-xr-xrt/etc/acl.Pg109
-rwxr-xr-xrt/etc/acl.mysql27
-rw-r--r--rt/etc/rt.spec137
-rw-r--r--rt/etc/schema.Oracle399
-rwxr-xr-xrt/etc/schema.Pg1
-rwxr-xr-xrt/etc/schema.mysql463
-rwxr-xr-xrt/etc/schema.mysql-4.11
-rw-r--r--rt/etc/upgrade/2.1.71211
-rw-r--r--rt/html/Admin/CustomFields/GroupRights.html119
-rw-r--r--rt/html/Admin/CustomFields/Modify.html258
-rw-r--r--rt/html/Admin/CustomFields/Objects.html147
-rw-r--r--rt/html/Admin/CustomFields/UserRights.html170
-rw-r--r--rt/html/Admin/CustomFields/index.html93
-rw-r--r--rt/html/Admin/Elements/AddCustomFieldValue74
-rw-r--r--rt/html/Admin/Elements/ConfigureMyRT80
-rw-r--r--rt/html/Admin/Elements/CreateUserCalled50
-rw-r--r--rt/html/Admin/Elements/CustomFieldTabs118
-rw-r--r--rt/html/Admin/Elements/EditCustomField159
-rw-r--r--rt/html/Admin/Elements/EditCustomFieldValues96
-rw-r--r--rt/html/Admin/Elements/EditCustomFields205
-rw-r--r--rt/html/Admin/Elements/EditQueueWatchers78
-rw-r--r--rt/html/Admin/Elements/EditScrip183
-rw-r--r--rt/html/Admin/Elements/EditScrips125
-rw-r--r--rt/html/Admin/Elements/EditTemplates128
-rw-r--r--rt/html/Admin/Elements/EditUserComments56
-rwxr-xr-xrt/html/Admin/Elements/GlobalCustomFieldTabs95
-rw-r--r--rt/html/Admin/Elements/GroupTabs102
-rw-r--r--rt/html/Admin/Elements/Header52
-rw-r--r--rt/html/Admin/Elements/ListGlobalCustomFields61
-rw-r--r--rt/html/Admin/Elements/ListGlobalScrips76
-rw-r--r--rt/html/Admin/Elements/ModifyQueue78
-rw-r--r--rt/html/Admin/Elements/ModifyTemplate84
-rw-r--r--rt/html/Admin/Elements/ModifyUser99
-rw-r--r--rt/html/Admin/Elements/ObjectCustomFields111
-rw-r--r--rt/html/Admin/Elements/PickCustomFields98
-rw-r--r--rt/html/Admin/Elements/PickObjects81
-rw-r--r--rt/html/Admin/Elements/QueueRightsForUser64
-rw-r--r--rt/html/Admin/Elements/QueueTabs120
-rw-r--r--rt/html/Admin/Elements/SelectCustomFieldLookupType60
-rw-r--r--rt/html/Admin/Elements/SelectCustomFieldType60
-rw-r--r--rt/html/Admin/Elements/SelectGroups62
-rw-r--r--rt/html/Admin/Elements/SelectModifyGroup57
-rw-r--r--rt/html/Admin/Elements/SelectModifyQueue57
-rw-r--r--rt/html/Admin/Elements/SelectModifyUser73
-rw-r--r--rt/html/Admin/Elements/SelectNewGroupMembers99
-rw-r--r--rt/html/Admin/Elements/SelectRights118
-rw-r--r--rt/html/Admin/Elements/SelectScrip72
-rw-r--r--rt/html/Admin/Elements/SelectScripAction73
-rw-r--r--rt/html/Admin/Elements/SelectScripCondition72
-rw-r--r--rt/html/Admin/Elements/SelectSingleOrMultiple67
-rw-r--r--rt/html/Admin/Elements/SelectStage66
-rw-r--r--rt/html/Admin/Elements/SelectTemplate87
-rw-r--r--rt/html/Admin/Elements/SelectUsers64
-rw-r--r--rt/html/Admin/Elements/SystemTabs97
-rw-r--r--rt/html/Admin/Elements/Tabs93
-rwxr-xr-xrt/html/Admin/Elements/ToolTabs80
-rw-r--r--rt/html/Admin/Elements/UserTabs113
-rw-r--r--rt/html/Admin/Global/CustomField.html86
-rw-r--r--rt/html/Admin/Global/CustomFields.html69
-rw-r--r--rt/html/Admin/Global/CustomFields/Groups.html58
-rwxr-xr-xrt/html/Admin/Global/CustomFields/Queue-Tickets.html58
-rwxr-xr-xrt/html/Admin/Global/CustomFields/Queue-Transactions.html58
-rw-r--r--rt/html/Admin/Global/CustomFields/Users.html58
-rw-r--r--rt/html/Admin/Global/CustomFields/index.html93
-rw-r--r--rt/html/Admin/Global/GroupRights.html123
-rw-r--r--rt/html/Admin/Global/MyRT.html111
-rw-r--r--rt/html/Admin/Global/Scrip.html87
-rw-r--r--rt/html/Admin/Global/Scrips.html77
-rw-r--r--rt/html/Admin/Global/Template.html122
-rw-r--r--rt/html/Admin/Global/Templates.html77
-rw-r--r--rt/html/Admin/Global/UserRights.html103
-rw-r--r--rt/html/Admin/Global/index.html94
-rw-r--r--rt/html/Admin/Groups/CustomFields.html48
-rw-r--r--rt/html/Admin/Groups/GroupRights.html119
-rw-r--r--rt/html/Admin/Groups/History.html68
-rw-r--r--rt/html/Admin/Groups/Members.html168
-rw-r--r--rt/html/Admin/Groups/Modify.html174
-rw-r--r--rt/html/Admin/Groups/UserRights.html116
-rw-r--r--rt/html/Admin/Groups/index.html113
-rw-r--r--rt/html/Admin/Queues/CustomField.html87
-rw-r--r--rt/html/Admin/Queues/CustomFields.html72
-rw-r--r--rt/html/Admin/Queues/GroupRights.html134
-rw-r--r--rt/html/Admin/Queues/Modify.html193
-rw-r--r--rt/html/Admin/Queues/People.html210
-rw-r--r--rt/html/Admin/Queues/Scrip.html100
-rw-r--r--rt/html/Admin/Queues/Scrips.html87
-rw-r--r--rt/html/Admin/Queues/Template.html130
-rw-r--r--rt/html/Admin/Queues/Templates.html81
-rw-r--r--rt/html/Admin/Queues/UserRights.html114
-rw-r--r--rt/html/Admin/Queues/index.html86
-rw-r--r--rt/html/Admin/Tools/Configuration.html100
-rw-r--r--rt/html/Admin/Tools/index.html55
-rw-r--r--rt/html/Admin/Users/CustomFields.html71
-rw-r--r--rt/html/Admin/Users/History.html68
-rw-r--r--rt/html/Admin/Users/Memberships.html67
-rw-r--r--rt/html/Admin/Users/Modify.html433
-rw-r--r--rt/html/Admin/Users/MyRT.html132
-rw-r--r--rt/html/Admin/Users/Prefs.html122
-rw-r--r--rt/html/Admin/Users/index.html115
-rw-r--r--rt/html/Admin/autohandler53
-rw-r--r--rt/html/Admin/index.html101
-rw-r--r--rt/html/Approvals/Display.html72
-rw-r--r--rt/html/Approvals/Elements/Approve94
-rw-r--r--rt/html/Approvals/Elements/PendingMyApproval111
-rw-r--r--rt/html/Approvals/Elements/ShowDependency109
-rw-r--r--rt/html/Approvals/index.html90
-rw-r--r--rt/html/Callbacks/ActivityReports/Elements/Tabs/Default7
-rw-r--r--rt/html/Callbacks/ActivityReports/NoAuth/webrt.css/Default71
-rw-r--r--rt/html/Callbacks/ActivityReports/Search/Results.html/SearchActions7
-rw-r--r--rt/html/Callbacks/RT-WebCronTool/Elements/Tabs/Default13
-rw-r--r--rt/html/Developer/CronTool/autohandler9
-rw-r--r--rt/html/Developer/CronTool/index.html116
-rw-r--r--rt/html/Download/CustomFieldValue/dhandler77
-rw-r--r--rt/html/Download/Tabular/dhandler76
-rw-r--r--rt/html/Elements/BevelBoxRaisedEnd50
-rw-r--r--rt/html/Elements/BevelBoxRaisedStart50
-rw-r--r--rt/html/Elements/Callback92
-rw-r--r--rt/html/Elements/CreateTicket50
-rw-r--r--rt/html/Elements/EditCustomField99
-rw-r--r--rt/html/Elements/EditCustomFieldBinary62
-rw-r--r--rt/html/Elements/EditCustomFieldCombobox68
-rw-r--r--rt/html/Elements/EditCustomFieldFreeform74
-rw-r--r--rt/html/Elements/EditCustomFieldImage62
-rw-r--r--rt/html/Elements/EditCustomFieldSelect128
-rw-r--r--rt/html/Elements/EditCustomFieldText67
-rw-r--r--rt/html/Elements/EditCustomFieldWikitext67
-rwxr-xr-xrt/html/Elements/EditLinks177
-rw-r--r--rt/html/Elements/EmailInput47
-rw-r--r--rt/html/Elements/Error86
-rw-r--r--rt/html/Elements/Footer84
-rw-r--r--rt/html/Elements/GotoTicket48
-rw-r--r--rt/html/Elements/Header133
-rw-r--r--rt/html/Elements/ListActions65
-rw-r--r--rt/html/Elements/Login138
-rw-r--r--rt/html/Elements/Logo56
-rw-r--r--rt/html/Elements/Menu134
-rw-r--r--rt/html/Elements/MessageBox74
-rw-r--r--rt/html/Elements/MyAdminQueues54
-rw-r--r--rt/html/Elements/MyRT100
-rwxr-xr-xrt/html/Elements/MyReminders73
-rw-r--r--rt/html/Elements/MyRequests49
-rw-r--r--rt/html/Elements/MySupportQueues54
-rw-r--r--rt/html/Elements/MyTickets49
-rw-r--r--rt/html/Elements/PageLayout237
-rw-r--r--rt/html/Elements/QueryString63
-rw-r--r--rt/html/Elements/QueueSummary92
-rw-r--r--rt/html/Elements/QuickCreate71
-rw-r--r--rt/html/Elements/Quicksearch61
-rw-r--r--rt/html/Elements/RT__Ticket/ColumnMap319
-rw-r--r--rt/html/Elements/Refresh69
-rw-r--r--rt/html/Elements/RefreshHomepage51
-rw-r--r--rt/html/Elements/ScrubHTML73
-rw-r--r--rt/html/Elements/Section51
-rw-r--r--rt/html/Elements/SelectAttachmentField56
-rw-r--r--rt/html/Elements/SelectBoolean71
-rw-r--r--rt/html/Elements/SelectCustomFieldOperator64
-rw-r--r--rt/html/Elements/SelectCustomFieldValue65
-rw-r--r--rt/html/Elements/SelectDate75
-rw-r--r--rt/html/Elements/SelectDateRelation60
-rw-r--r--rt/html/Elements/SelectDateType60
-rw-r--r--rt/html/Elements/SelectEqualityOperator64
-rw-r--r--rt/html/Elements/SelectGroups62
-rw-r--r--rt/html/Elements/SelectLang80
-rw-r--r--rt/html/Elements/SelectLinkType61
-rw-r--r--rt/html/Elements/SelectMatch82
-rw-r--r--rt/html/Elements/SelectNewTicketQueue50
-rw-r--r--rt/html/Elements/SelectOwner110
-rw-r--r--rt/html/Elements/SelectQueue97
-rw-r--r--rt/html/Elements/SelectSortOrder65
-rw-r--r--rt/html/Elements/SelectStatus67
-rw-r--r--rt/html/Elements/SelectTicketSortBy62
-rw-r--r--rt/html/Elements/SelectTicketTypes58
-rwxr-xr-xrt/html/Elements/SelectTimeUnits57
-rw-r--r--rt/html/Elements/SelectUsers62
-rw-r--r--rt/html/Elements/SelectWatcherType71
-rw-r--r--rt/html/Elements/SetupSessionCookie133
-rw-r--r--rt/html/Elements/ShadedBox33
-rw-r--r--rt/html/Elements/ShadedInputRow35
-rw-r--r--rt/html/Elements/ShadedRow31
-rw-r--r--rt/html/Elements/ShowCustomFieldBinary51
-rw-r--r--rt/html/Elements/ShowCustomFieldImage53
-rw-r--r--rt/html/Elements/ShowCustomFieldWikitext58
-rw-r--r--rt/html/Elements/ShowCustomFields115
-rw-r--r--rt/html/Elements/ShowLink64
-rwxr-xr-xrt/html/Elements/ShowLinks112
-rw-r--r--rt/html/Elements/ShowMemberships88
-rw-r--r--rt/html/Elements/ShowSearch125
-rw-r--r--rt/html/Elements/SimpleSearch51
-rw-r--r--rt/html/Elements/Submit86
-rw-r--r--rt/html/Elements/Tabs122
-rw-r--r--rt/html/Elements/TicketList178
-rw-r--r--rt/html/Elements/TitleBox51
-rw-r--r--rt/html/Elements/TitleBoxEnd51
-rw-r--r--rt/html/Elements/TitleBoxStart51
-rw-r--r--rt/html/Elements/ValidateCustomFields81
-rw-r--r--rt/html/Elements/ViewUser51
-rw-r--r--rt/html/Helpers/CalPopup.html129
-rw-r--r--rt/html/Helpers/EmailAutocomplete47
-rw-r--r--rt/html/NoAuth/Logout.html74
-rw-r--r--rt/html/NoAuth/Reminder.html50
-rw-r--r--rt/html/NoAuth/css/3.4-compat/body.css75
-rw-r--r--rt/html/NoAuth/css/3.4-compat/forms.css104
-rw-r--r--rt/html/NoAuth/css/3.4-compat/header.css88
-rw-r--r--rt/html/NoAuth/css/3.4-compat/main.css69
-rw-r--r--rt/html/NoAuth/css/3.4-compat/misc.css49
-rw-r--r--rt/html/NoAuth/css/3.4-compat/nav.css106
-rw-r--r--rt/html/NoAuth/css/3.4-compat/titlebox.css103
-rw-r--r--rt/html/NoAuth/css/3.4-compat/transactions.css83
-rw-r--r--rt/html/NoAuth/css/3.5-default/approvals.css97
-rwxr-xr-xrt/html/NoAuth/css/3.5-default/body.css81
-rw-r--r--rt/html/NoAuth/css/3.5-default/footer.css91
-rw-r--r--rt/html/NoAuth/css/3.5-default/header.css152
-rw-r--r--rt/html/NoAuth/css/3.5-default/login.css85
-rwxr-xr-xrt/html/NoAuth/css/3.5-default/misc.css91
-rw-r--r--rt/html/NoAuth/css/3.5-default/nav.css163
-rw-r--r--rt/html/NoAuth/css/3.5-default/quickbar.css98
-rw-r--r--rt/html/NoAuth/css/3.5-default/titlebox.css179
-rwxr-xr-xrt/html/NoAuth/css/3.5-default/transactions.css146
-rw-r--r--rt/html/NoAuth/css/autohandler53
-rw-r--r--rt/html/NoAuth/css/dhandler77
-rw-r--r--rt/html/NoAuth/images/autohandler28
-rw-r--r--rt/html/NoAuth/images/back_home.gifbin330 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/bplogo.gifbin755 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cb-light.gifbin186 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cb.gifbin163 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cbr-b2g.gifbin135 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cbr-b2lb.gifbin137 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cbr-gray.gifbin137 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cbr-trans.gifbin183 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/cbr.gifbin188 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ct-light.gifbin162 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ct.gifbin162 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ctr-b2g.gifbin136 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ctr-b2lb.gifbin114 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ctr-gray.gifbin138 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ctr-trans.gifbin182 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/ctr.gifbin188 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/dark-arrow-up.pngbin346 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/dark-arrow.pngbin337 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/fieldbg-autocomplete.gifbin1164 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/light-arrow-up.pngbin348 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/light-arrow.pngbin340 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/rolldown-arrow.gifbin83 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/rolldown-arrow.pngbin259 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/css/rollup-arrow.gifbin82 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/favicon.pngbin335 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/head_requestracker.gifbin1233 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/rt.jpgbin917 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/space.gifbin43 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/spacer.gifbin43 -> 0 bytes
-rw-r--r--rt/html/NoAuth/images/squares_blue.gifbin219 -> 0 bytes
-rw-r--r--rt/html/NoAuth/js/ahah.js80
-rw-r--r--rt/html/NoAuth/js/autohandler53
-rw-r--r--rt/html/NoAuth/js/cascaded.js66
-rw-r--r--rt/html/NoAuth/js/class.js62
-rw-r--r--rt/html/NoAuth/js/combobox.js265
-rw-r--r--rt/html/NoAuth/js/list.js159
-rw-r--r--rt/html/NoAuth/js/scriptaculous/controls.js0
-rw-r--r--rt/html/NoAuth/js/scriptaculous/effects.js0
-rw-r--r--rt/html/NoAuth/js/scriptaculous/prototype.js0
-rw-r--r--rt/html/NoAuth/js/scriptaculous/scriptaculous.js0
-rw-r--r--rt/html/NoAuth/js/titlebox-state.js83
-rw-r--r--rt/html/NoAuth/js/util.js250
-rw-r--r--rt/html/NoAuth/printrt.css77
-rw-r--r--rt/html/NoAuth/webrt.css628
-rw-r--r--rt/html/Prefs/Elements/Tabs72
-rw-r--r--rt/html/Prefs/MyRT.html151
-rw-r--r--rt/html/Prefs/Quicksearch.html96
-rw-r--r--rt/html/Prefs/Search.html108
-rw-r--r--rt/html/Prefs/SearchOptions.html114
-rw-r--r--rt/html/REST/1.0/Forms/queue/default170
-rw-r--r--rt/html/REST/1.0/Forms/queue/ns62
-rw-r--r--rt/html/REST/1.0/Forms/ticket/attachments135
-rwxr-xr-xrt/html/REST/1.0/Forms/ticket/comment152
-rw-r--r--rt/html/REST/1.0/Forms/ticket/default345
-rw-r--r--rt/html/REST/1.0/Forms/ticket/history200
-rw-r--r--rt/html/REST/1.0/Forms/ticket/links172
-rwxr-xr-xrt/html/REST/1.0/Forms/ticket/merge96
-rwxr-xr-xrt/html/REST/1.0/Forms/ticket/take135
-rw-r--r--rt/html/REST/1.0/Forms/transaction/default143
-rw-r--r--rt/html/REST/1.0/Forms/user/default188
-rw-r--r--rt/html/REST/1.0/Forms/user/ns65
-rw-r--r--rt/html/REST/1.0/NoAuth/mail-gateway84
-rw-r--r--rt/html/REST/1.0/autohandler56
-rw-r--r--rt/html/REST/1.0/dhandler316
-rw-r--r--rt/html/REST/1.0/logout51
-rw-r--r--rt/html/REST/1.0/search/dhandler56
-rw-r--r--rt/html/REST/1.0/search/ticket158
-rw-r--r--rt/html/REST/1.0/ticket/comment177
-rw-r--r--rt/html/REST/1.0/ticket/link123
-rw-r--r--rt/html/REST/1.0/ticket/merge102
-rw-r--r--rt/html/Reports/Activity/ActivityDetail.html83
-rw-r--r--rt/html/Reports/Activity/ActivitySummary.html61
-rw-r--r--rt/html/Reports/Activity/Elements/LimitReport23
-rw-r--r--rt/html/Reports/Activity/Elements/MiniPlot57
-rw-r--r--rt/html/Reports/Activity/Elements/PrintFooter7
-rw-r--r--rt/html/Reports/Activity/Elements/PrintHeader32
-rw-r--r--rt/html/Reports/Activity/Elements/ScreenFooter13
-rw-r--r--rt/html/Reports/Activity/Elements/ScreenHeader8
-rw-r--r--rt/html/Reports/Activity/Elements/Tabs52
-rw-r--r--rt/html/Reports/Activity/Elements/Wrapper16
-rw-r--r--rt/html/Reports/Activity/ResolutionComments.html62
-rw-r--r--rt/html/Reports/Activity/ResolutionStatistics.html95
-rw-r--r--rt/html/Reports/Activity/index.html29
-rw-r--r--rt/html/Search/Build.html832
-rw-r--r--rt/html/Search/Bulk.html397
-rw-r--r--rt/html/Search/Chart188
-rw-r--r--rt/html/Search/Chart.html73
-rwxr-xr-xrt/html/Search/Edit.html88
-rw-r--r--rt/html/Search/Elements/BuildFormatString244
-rw-r--r--rt/html/Search/Elements/Chart139
-rw-r--r--rt/html/Search/Elements/DisplayOptions144
-rw-r--r--rt/html/Search/Elements/EditFormat116
-rw-r--r--rt/html/Search/Elements/EditQuery67
-rw-r--r--rt/html/Search/Elements/EditSearches103
-rw-r--r--rt/html/Search/Elements/NewListActions68
-rw-r--r--rt/html/Search/Elements/PickBasics176
-rw-r--r--rt/html/Search/Elements/PickCFs80
-rw-r--r--rt/html/Search/Elements/PickCriteria82
-rw-r--r--rt/html/Search/Elements/PickRestriction142
-rw-r--r--rt/html/Search/Elements/SearchPrivacy55
-rw-r--r--rt/html/Search/Elements/SearchesForObject65
-rw-r--r--rt/html/Search/Elements/SelectAndOr53
-rw-r--r--rt/html/Search/Elements/SelectChartType56
-rw-r--r--rt/html/Search/Elements/SelectGroup67
-rw-r--r--rt/html/Search/Elements/SelectGroupBy63
-rw-r--r--rt/html/Search/Elements/SelectLinks66
-rw-r--r--rt/html/Search/Elements/SelectPersonType84
-rw-r--r--rt/html/Search/Elements/SelectSearchObject60
-rw-r--r--rt/html/Search/Elements/SelectSearchesForObjects69
-rw-r--r--rt/html/Search/Elements/TicketHeader40
-rw-r--r--rt/html/Search/Elements/TicketHeaderCell55
-rw-r--r--rt/html/Search/Elements/TicketRow55
-rw-r--r--rt/html/Search/Listing.html113
-rwxr-xr-xrt/html/Search/Results.html177
-rw-r--r--rt/html/Search/Results.rdf87
-rw-r--r--rt/html/SelfService/Attachment/dhandler51
-rw-r--r--rt/html/SelfService/Closed.html56
-rw-r--r--rt/html/SelfService/Create.html177
-rwxr-xr-xrt/html/SelfService/CreateTicketInQueue.html63
-rw-r--r--rt/html/SelfService/Display.html235
-rw-r--r--rt/html/SelfService/Elements/GotoTicket48
-rw-r--r--rt/html/SelfService/Elements/Header49
-rw-r--r--rt/html/SelfService/Elements/MyRequests84
-rw-r--r--rt/html/SelfService/Elements/Tabs113
-rw-r--r--rt/html/SelfService/Error.html70
-rw-r--r--rt/html/SelfService/Prefs.html92
-rw-r--r--rt/html/SelfService/Update.html129
-rw-r--r--rt/html/SelfService/index.html54
-rw-r--r--rt/html/Ticket/Attachment/dhandler94
-rw-r--r--rt/html/Ticket/Create.html406
-rw-r--r--rt/html/Ticket/Display.html184
-rw-r--r--rt/html/Ticket/Elements/AddWatchers123
-rw-r--r--rt/html/Ticket/Elements/BulkLinks77
-rw-r--r--rt/html/Ticket/Elements/EditBasics117
-rw-r--r--rt/html/Ticket/Elements/EditCustomField57
-rw-r--r--rt/html/Ticket/Elements/EditCustomFields110
-rw-r--r--rt/html/Ticket/Elements/EditDates77
-rw-r--r--rt/html/Ticket/Elements/EditLinks133
-rw-r--r--rt/html/Ticket/Elements/EditPeople93
-rw-r--r--rt/html/Ticket/Elements/EditWatchers81
-rwxr-xr-xrt/html/Ticket/Elements/FindAttachments95
-rwxr-xr-xrt/html/Ticket/Elements/LoadTextAttachments94
-rwxr-xr-xrt/html/Ticket/Elements/PreviewScrips133
-rw-r--r--rt/html/Ticket/Elements/Reminders168
-rw-r--r--rt/html/Ticket/Elements/ShowAttachments104
-rw-r--r--rt/html/Ticket/Elements/ShowBasics85
-rw-r--r--rt/html/Ticket/Elements/ShowCustomFields51
-rw-r--r--rt/html/Ticket/Elements/ShowDates86
-rw-r--r--rt/html/Ticket/Elements/ShowDependencies65
-rw-r--r--rt/html/Ticket/Elements/ShowGroupMembers63
-rw-r--r--rt/html/Ticket/Elements/ShowHistory166
-rw-r--r--rt/html/Ticket/Elements/ShowLink40
-rw-r--r--rt/html/Ticket/Elements/ShowLinks87
-rw-r--r--rt/html/Ticket/Elements/ShowMembers68
-rw-r--r--rt/html/Ticket/Elements/ShowMessageHeaders92
-rw-r--r--rt/html/Ticket/Elements/ShowMessageStanza84
-rw-r--r--rt/html/Ticket/Elements/ShowPeople68
-rw-r--r--rt/html/Ticket/Elements/ShowRequestor89
-rw-r--r--rt/html/Ticket/Elements/ShowSummary114
-rw-r--r--rt/html/Ticket/Elements/ShowTime55
-rw-r--r--rt/html/Ticket/Elements/ShowTransaction197
-rw-r--r--rt/html/Ticket/Elements/ShowTransactionAttachments209
-rw-r--r--rt/html/Ticket/Elements/ShowUserEntry61
-rw-r--r--rt/html/Ticket/Elements/Tabs248
-rw-r--r--rt/html/Ticket/History.html89
-rw-r--r--rt/html/Ticket/Modify.html91
-rw-r--r--rt/html/Ticket/ModifyAll.html225
-rw-r--r--rt/html/Ticket/ModifyDates.html77
-rw-r--r--rt/html/Ticket/ModifyLinks.html82
-rw-r--r--rt/html/Ticket/ModifyPeople.html94
-rwxr-xr-xrt/html/Ticket/Reminders.html71
-rw-r--r--rt/html/Ticket/ShowEmailRecord.html73
-rw-r--r--rt/html/Ticket/Update.html228
-rw-r--r--rt/html/Tools/MyDay.html117
-rw-r--r--rt/html/Tools/Offline.html166
-rw-r--r--rt/html/Tools/Reports/CreatedByDates.html94
-rw-r--r--rt/html/Tools/Reports/Elements/Tabs89
-rw-r--r--rt/html/Tools/Reports/ResolvedByDates.html95
-rw-r--r--rt/html/Tools/Reports/ResolvedByOwner.html70
-rw-r--r--rt/html/Tools/Reports/index.html50
-rw-r--r--rt/html/Tools/index.html52
-rw-r--r--rt/html/User/Delegation.html107
-rw-r--r--rt/html/User/Elements/DelegateRights109
-rw-r--r--rt/html/User/Elements/GroupTabs84
-rw-r--r--rt/html/User/Elements/Tabs89
-rw-r--r--rt/html/User/Groups/Members.html160
-rw-r--r--rt/html/User/Groups/Modify.html157
-rw-r--r--rt/html/User/Groups/index.html67
-rw-r--r--rt/html/User/Prefs.html289
-rw-r--r--rt/html/Widgets/ComboBox70
-rw-r--r--rt/html/Widgets/SavedSearch158
-rw-r--r--rt/html/Widgets/SelectionBox243
-rw-r--r--rt/html/Widgets/TitleBox54
-rwxr-xr-xrt/html/Widgets/TitleBoxEnd59
-rwxr-xr-xrt/html/Widgets/TitleBoxStart86
-rw-r--r--rt/html/autohandler331
-rw-r--r--rt/html/index.html117
-rw-r--r--rt/html/l52
-rw-r--r--rt/lib/RT.pm88
-rw-r--r--rt/lib/RT.pm.in60
-rwxr-xr-xrt/lib/RT/ACE.pm132
-rwxr-xr-xrt/lib/RT/ACL.pm83
-rwxr-xr-xrt/lib/RT/Action.pm16
-rw-r--r--rt/lib/RT/Action/Accumulate.pm44
-rwxr-xr-xrt/lib/RT/Action/Autoreply.pm126
-rw-r--r--rt/lib/RT/Action/CreateTickets.pm24
-rw-r--r--rt/lib/RT/Action/EscalatePriority.pm12
-rwxr-xr-xrt/lib/RT/Action/EscalateQueue.pm141
-rwxr-xr-xrt/lib/RT/Action/Generic.pm218
-rwxr-xr-xrt/lib/RT/Action/Notify.pm149
-rwxr-xr-xrt/lib/RT/Action/NotifyAsComment.pm82
-rw-r--r--rt/lib/RT/Action/ResolveMembers.pm64
-rwxr-xr-xrt/lib/RT/Action/SendEmail.pm1252
-rw-r--r--rt/lib/RT/Action/SetPriority_Local.pm47
-rwxr-xr-xrt/lib/RT/Attachment.pm146
-rwxr-xr-xrt/lib/RT/Attachments.pm78
-rw-r--r--rt/lib/RT/Attribute_Overlay.pm9
-rwxr-xr-xrt/lib/RT/Condition.pm18
-rw-r--r--rt/lib/RT/Condition/AnyTransaction.pm64
-rw-r--r--rt/lib/RT/Condition/CustomFieldChange.pm56
-rwxr-xr-xrt/lib/RT/Condition/Generic.pm233
-rw-r--r--rt/lib/RT/Condition/StatusChange.pm66
-rw-r--r--rt/lib/RT/Config.pm25
-rwxr-xr-xrt/lib/RT/CurrentUser.pm444
-rw-r--r--rt/lib/RT/CustomField.pm22
-rw-r--r--rt/lib/RT/CustomFieldValues/Queues.pm30
-rw-r--r--rt/lib/RT/CustomField_Overlay.pm42
-rw-r--r--rt/lib/RT/Date.pm64
-rw-r--r--rt/lib/RT/Extension/ActivityReports.pm3
-rw-r--r--rt/lib/RT/Extension/SearchResults/XLS.pm82
-rwxr-xr-xrt/lib/RT/Group.pm120
-rwxr-xr-xrt/lib/RT/GroupMember.pm96
-rwxr-xr-xrt/lib/RT/GroupMembers.pm78
-rwxr-xr-xrt/lib/RT/Groups.pm78
-rw-r--r--rt/lib/RT/Groups_Overlay.pm1
-rw-r--r--rt/lib/RT/Handle.pm1092
-rw-r--r--rt/lib/RT/I18N/en_malkovich.po3973
-rw-r--r--rt/lib/RT/I18N/no.po6563
-rw-r--r--rt/lib/RT/I18N/pt_br.po6528
-rw-r--r--rt/lib/RT/I18N/pt_pt.po5194
-rw-r--r--rt/lib/RT/I18N/zh_cn.po8423
-rw-r--r--rt/lib/RT/I18N/zh_tw.po8360
-rw-r--r--rt/lib/RT/Interface/CLI.pm91
-rwxr-xr-xrt/lib/RT/Interface/Email.pm1968
-rw-r--r--rt/lib/RT/Interface/Web.pm88
-rw-r--r--rt/lib/RT/Interface/Web_Vendor.pm201
-rw-r--r--rt/lib/RT/Link.pm130
-rw-r--r--rt/lib/RT/Links.pm78
-rw-r--r--rt/lib/RT/Principal_Overlay.pm16
-rwxr-xr-xrt/lib/RT/Queue.pm148
-rw-r--r--rt/lib/RT/Queue_Local.pm72
-rw-r--r--rt/lib/RT/Queue_Overlay.pm4
-rwxr-xr-xrt/lib/RT/Queues.pm78
-rwxr-xr-xrt/lib/RT/Record.pm69
-rw-r--r--rt/lib/RT/SavedSearches_Local.pm19
-rwxr-xr-xrt/lib/RT/Scrip.pm174
-rwxr-xr-xrt/lib/RT/ScripAction.pm124
-rwxr-xr-xrt/lib/RT/ScripActions.pm78
-rwxr-xr-xrt/lib/RT/ScripCondition.pm130
-rwxr-xr-xrt/lib/RT/ScripConditions.pm78
-rw-r--r--rt/lib/RT/Scrip_Overlay.pm4
-rwxr-xr-xrt/lib/RT/Scrips.pm78
-rw-r--r--rt/lib/RT/Search/Googleish.pm17
-rw-r--r--rt/lib/RT/SearchBuilder.pm57
-rw-r--r--rt/lib/RT/System.pm27
-rwxr-xr-xrt/lib/RT/Template.pm144
-rwxr-xr-xrt/lib/RT/Templates.pm78
-rw-r--r--rt/lib/RT/Test.pm31
-rwxr-xr-xrt/lib/RT/Ticket.pm234
-rw-r--r--rt/lib/RT/TicketCustomFieldValue.pm308
-rw-r--r--rt/lib/RT/TicketCustomFieldValue_Overlay.pm74
-rw-r--r--rt/lib/RT/TicketCustomFieldValues.pm137
-rw-r--r--rt/lib/RT/TicketCustomFieldValues_Overlay.pm108
-rw-r--r--rt/lib/RT/Ticket_Overlay.pm118
-rwxr-xr-xrt/lib/RT/Tickets.pm78
-rw-r--r--rt/lib/RT/Tickets_Overlay.pm224
-rwxr-xr-xrt/lib/RT/Transaction.pm262
-rw-r--r--rt/lib/RT/Transaction_Overlay.pm43
-rwxr-xr-xrt/lib/RT/Transactions.pm78
-rw-r--r--rt/lib/RT/URI/freeside.pm331
-rw-r--r--rt/lib/RT/URI/freeside/Internal.pm170
-rw-r--r--rt/lib/RT/URI/freeside/XMLRPC.pm122
-rwxr-xr-xrt/lib/RT/User.pm274
-rw-r--r--rt/lib/RT/User_Overlay.pm271
-rwxr-xr-xrt/lib/RT/Users.pm78
-rw-r--r--rt/lib/RT/Users_Overlay.pm7
-rw-r--r--rt/lib/RTx/Calendar.pm233
-rwxr-xr-xrt/lib/RTx/Statistics.pm240
-rw-r--r--rt/lib/RTx/WebCronTool.pm41
-rw-r--r--rt/lib/t/00smoke.t13
-rw-r--r--rt/lib/t/00smoke.t.in14
-rw-r--r--rt/lib/t/01harness.t.in12
-rw-r--r--rt/lib/t/02regression.t7
-rw-r--r--rt/lib/t/02regression.t.in47
-rw-r--r--rt/lib/t/03web.pl78
-rw-r--r--rt/lib/t/03web.pl.in170
-rw-r--r--rt/lib/t/04_send_email.pl25
-rw-r--r--rt/lib/t/04_send_email.pl.in506
-rw-r--r--rt/lib/t/05cronsupport.pl.in84
-rw-r--r--rt/lib/t/create_data.pl136
-rw-r--r--rt/lib/t/data/8859-15-message-series/dir356
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg136
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg236
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg335
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg435
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg535
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg635
-rw-r--r--rt/lib/t/data/8859-15-message-series/msg736
-rw-r--r--rt/lib/t/data/crashes-file-based-parser193
-rw-r--r--rt/lib/t/data/lorem-ipsum5
-rw-r--r--rt/lib/t/data/multipart-alternative-with-umlaut62
-rw-r--r--rt/lib/t/data/multipart-report66
-rw-r--r--rt/lib/t/data/nested-mime-sample396
-rw-r--r--rt/lib/t/data/nested-rfc-822253
-rw-r--r--rt/lib/t/data/new-ticket-from-iso-8859-131
-rw-r--r--rt/lib/t/data/new-ticket-from-iso-8859-1-full38
-rw-r--r--rt/lib/t/data/notes-uuencoded2368
-rw-r--r--rt/lib/t/data/rt-send-cc5
-rw-r--r--rt/lib/t/data/russian-subject-no-content-type42
-rw-r--r--rt/lib/t/data/subject-with-folding-ws10
-rw-r--r--rt/lib/t/data/text-html-in-russian87
-rw-r--r--rt/lib/t/data/text-html-with-umlaut35
-rw-r--r--rt/lib/t/data/very-long-subject12
-rw-r--r--rt/lib/t/regression/00-mason-syntax.t43
-rw-r--r--rt/lib/t/regression/00placeholder1
-rw-r--r--rt/lib/t/regression/01ticket_link_searching.t159
-rw-r--r--rt/lib/t/regression/02basic_web.t159
-rw-r--r--rt/lib/t/regression/03web_compiliation_errors.t64
-rw-r--r--rt/lib/t/regression/04send_email.t549
-rw-r--r--rt/lib/t/regression/05cronsupport.t91
-rw-r--r--rt/lib/t/regression/06-mime_decoding.t64
-rw-r--r--rt/lib/t/regression/06mailgateway.t663
-rw-r--r--rt/lib/t/regression/07acl.t138
-rw-r--r--rt/lib/t/regression/07rights.t140
-rw-r--r--rt/lib/t/regression/08web_cf_access.t119
-rw-r--r--rt/lib/t/regression/09record_cf_api.t204
-rw-r--r--rt/lib/t/regression/10merge.t72
-rw-r--r--rt/lib/t/regression/11-template-insert.t27
-rw-r--r--rt/lib/t/regression/12-search.t281
-rw-r--r--rt/lib/t/regression/13-attribute-tests.t87
-rw-r--r--rt/lib/t/regression/14linking.t243
-rw-r--r--rt/lib/t/regression/14merge.t31
-rw-r--r--rt/lib/t/regression/15cf_combo_cascade.t49
-rw-r--r--rt/lib/t/regression/15cf_pattern.t54
-rw-r--r--rt/lib/t/regression/15cf_single_values_are_single.t39
-rw-r--r--rt/lib/t/regression/16-transaction_cf_tests.t61
-rw-r--r--rt/lib/t/regression/17custom_search.t88
-rw-r--r--rt/lib/t/regression/17multiple_deleg_revocation.t135
-rw-r--r--rt/lib/t/regression/18custom_frontpage.t75
-rw-r--r--rt/lib/t/regression/18stale_delegations_cleanup.t458
-rw-r--r--rt/lib/t/regression/19-rtname.t38
-rw-r--r--rt/lib/t/regression/19quicksearch.t39
-rw-r--r--rt/lib/t/regression/20-sort-by-queue.t103
-rw-r--r--rt/lib/t/regression/20-sort-by-requestor.t143
-rw-r--r--rt/lib/t/regression/20-sort-by-user.t155
-rw-r--r--rt/lib/t/regression/20savedsearch.t180
-rw-r--r--rt/lib/t/regression/21query-builder.t247
-rw-r--r--rt/lib/t/regression/22search_tix_by_txn.t38
-rw-r--r--rt/lib/t/regression/22search_tix_by_watcher.t279
-rw-r--r--rt/lib/t/regression/23-batch-upload-csv.t47
-rw-r--r--rt/lib/t/regression/23-web_attachments.t60
-rw-r--r--rt/lib/t/regression/23cfsort-freeform-multiple.t137
-rw-r--r--rt/lib/t/regression/23cfsort-freeform-single.t191
-rw-r--r--rt/lib/t/regression/23cfsort.t177
-rw-r--r--rt/lib/t/regression/24-watchers.t157
-rw-r--r--rt/lib/t/regression/24pawsort.t104
-rw-r--r--rt/lib/t/regression/25scrip_order.t57
-rw-r--r--rt/lib/t/regression/26command_line.t450
-rw-r--r--rt/lib/t/regression/27verp.t9
-rw-r--r--rt/lib/t/regression/mime_tests19
-rw-r--r--rt/lib/t/setup_regression.t34
-rw-r--r--rt/sbin/rt-session-viewer (renamed from rt/sbin/regression_harness)81
-rw-r--r--rt/sbin/rt-session-viewer.in (renamed from rt/sbin/extract_pod_tests)148
-rw-r--r--rt/sbin/rt-setup-database474
-rw-r--r--rt/sbin/rt-setup-database.in6
-rw-r--r--rt/sbin/rt-test-dependencies601
-rw-r--r--rt/share/html/Admin/CustomFields/Modify.html34
-rw-r--r--rt/share/html/Admin/Elements/EditCustomFieldUILocation (renamed from rt/html/Elements/SelectResultsPerPage)30
-rwxr-xr-xrt/share/html/Admin/Elements/EditCustomFields12
-rwxr-xr-xrt/share/html/Admin/Elements/EditScrip35
-rw-r--r--rt/share/html/Admin/Elements/EditScripOptions44
-rwxr-xr-xrt/share/html/Admin/Elements/SelectScripAction5
-rwxr-xr-xrt/share/html/Admin/Elements/SelectScripCondition5
-rwxr-xr-xrt/share/html/Admin/Users/Modify.html12
-rw-r--r--rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default12
-rw-r--r--rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList15
-rw-r--r--rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay24
-rw-r--r--rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head2
-rw-r--r--rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default19
-rw-r--r--rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default9
-rw-r--r--rt/share/html/Callbacks/RTx-Statistics/Elements/Tabs/Default11
-rw-r--r--rt/share/html/Callbacks/Results-XLS/Search/Elements/ResultViews/AfterTools4
-rw-r--r--rt/share/html/Callbacks/SearchCustomerFields/Search/Elements/PickBasics/Default46
-rw-r--r--rt/share/html/Callbacks/TimeToResolve/Elements/RT__Ticket/ColumnMap/Once13
-rw-r--r--rt/share/html/Callbacks/TimeToResolve/Search/Elements/BuildFormatString/SetFieldsOnce8
-rw-r--r--rt/share/html/Elements/AddCustomers62
-rw-r--r--rt/share/html/Elements/CalendarEvent129
-rw-r--r--rt/share/html/Elements/CollectionList4
-rw-r--r--rt/share/html/Elements/EditCustomFieldDate (renamed from rt/html/Elements/Checkbox)27
-rw-r--r--rt/share/html/Elements/EditCustomFieldTimeValue16
-rw-r--r--rt/share/html/Elements/EditCustomers63
-rwxr-xr-xrt/share/html/Elements/Footer19
-rwxr-xr-xrt/share/html/Elements/Header93
-rw-r--r--rt/share/html/Elements/MyCalendar78
-rwxr-xr-xrt/share/html/Elements/PageLayout12
-rw-r--r--rt/share/html/Elements/RT__SavedSearch/ColumnMap (renamed from rt/html/Tools/Elements/Tabs)91
-rw-r--r--rt/share/html/Elements/RT__Ticket/ColumnMap79
-rw-r--r--rt/share/html/Elements/SavedSearches70
-rw-r--r--rt/share/html/Elements/SelectCustomerAgent17
-rw-r--r--rt/share/html/Elements/SelectCustomerClass17
-rw-r--r--rt/share/html/Elements/SelectCustomerTag17
-rwxr-xr-xrt/share/html/Elements/SelectDate17
-rwxr-xr-xrt/share/html/Elements/SelectQueue17
-rw-r--r--rt/share/html/Elements/ShowCustomFieldDate (renamed from rt/html/Ticket/Elements/ShowQueue)17
-rw-r--r--rt/share/html/Elements/ShowCustomFieldTimeValue4
-rw-r--r--rt/share/html/Elements/ShowLink_Checklist36
-rw-r--r--rt/share/html/Elements/ShowUserVerbose6
-rw-r--r--rt/share/html/NoAuth/Calendar/dhandler159
-rw-r--r--rt/share/html/NoAuth/css/calendar.css75
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/InHeader (renamed from rt/html/Approvals/Elements/Tabs)20
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/admin.css (renamed from rt/html/NoAuth/css/3.5-default/ticket.css)21
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/base.css (renamed from rt/html/NoAuth/css/3.5-default/logo.css)23
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/boxes.css192
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/collection.css (renamed from rt/html/NoAuth/css/3.4-compat/ticket.css)10
-rwxr-xr-xrt/share/html/NoAuth/css/freeside2.1/forms.css242
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/freeside.css9
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/images/dhandler8
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/images/source/background-gradient.pngbin0 -> 394 bytes
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/layout.css237
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/login.css82
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/main.css (renamed from rt/html/NoAuth/css/3.5-default/main.css)36
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/misc.css (renamed from rt/html/NoAuth/css/3.4-compat/quickbar.css)59
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/msie.css246
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/msie6.css (renamed from rt/html/NoAuth/css/print.css)53
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/nav.css206
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/portlets.css (renamed from rt/html/NoAuth/css/3.4-compat/footer.css)34
-rw-r--r--[-rwxr-xr-x]rt/share/html/NoAuth/css/freeside2.1/ticket-lists.css (renamed from rt/html/NoAuth/css/3.5-default/forms.css)162
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/ticket-search.css (renamed from rt/html/Search/Simple.html)180
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/ticket.css230
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/tools.css (renamed from rt/html/NoAuth/css/3.4-compat/login.css)14
-rw-r--r--rt/share/html/NoAuth/css/freeside2.1/yui-fonts.css7
-rw-r--r--rt/share/html/NoAuth/images/created.pngbin0 -> 994 bytes
-rw-r--r--rt/share/html/NoAuth/images/created_due.pngbin0 -> 997 bytes
-rw-r--r--rt/share/html/NoAuth/images/due.pngbin0 -> 936 bytes
-rw-r--r--rt/share/html/NoAuth/images/reminder.pngbin0 -> 921 bytes
-rw-r--r--rt/share/html/NoAuth/images/resolved.pngbin0 -> 229 bytes
-rw-r--r--rt/share/html/NoAuth/images/started.pngbin0 -> 934 bytes
-rw-r--r--rt/share/html/NoAuth/images/starts.pngbin0 -> 935 bytes
-rw-r--r--rt/share/html/NoAuth/images/starts_due.pngbin0 -> 173 bytes
-rw-r--r--rt/share/html/NoAuth/images/updated.pngbin0 -> 191 bytes
-rw-r--r--rt/share/html/Prefs/Calendar.html123
-rw-r--r--rt/share/html/Prefs/Elements/CalendarFeed68
-rw-r--r--rt/share/html/Prefs/SavedSearches.html10
-rw-r--r--rt/share/html/Prefs/SearchOptions.html2
-rwxr-xr-xrt/share/html/RTx/Statistics/CallsMultiQueue/Elements/Chart39
-rwxr-xr-xrt/share/html/RTx/Statistics/CallsMultiQueue/index.html325
-rwxr-xr-xrt/share/html/RTx/Statistics/CallsQueueDay/Elements/Chart29
-rw-r--r--rt/share/html/RTx/Statistics/CallsQueueDay/Results.tsv191
-rwxr-xr-xrt/share/html/RTx/Statistics/CallsQueueDay/index.html270
-rwxr-xr-xrt/share/html/RTx/Statistics/DayOfWeek/Elements/Chart26
-rwxr-xr-xrt/share/html/RTx/Statistics/DayOfWeek/index.html150
-rwxr-xr-xrt/share/html/RTx/Statistics/DurationAsString18
-rw-r--r--rt/share/html/RTx/Statistics/Elements/CollectionAsTable/Header (renamed from rt/html/Elements/CollectionAsTable/Header)29
-rw-r--r--rt/share/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat (renamed from rt/html/Elements/CollectionAsTable/ParseFormat)21
-rw-r--r--rt/share/html/RTx/Statistics/Elements/CollectionAsTable/Row (renamed from rt/html/Elements/CollectionAsTable/Row)27
-rw-r--r--rt/share/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox89
-rw-r--r--rt/share/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage5
-rw-r--r--rt/share/html/RTx/Statistics/Elements/DateSelectRow55
-rwxr-xr-xrt/share/html/RTx/Statistics/Elements/DurationAsString18
-rw-r--r--rt/share/html/RTx/Statistics/Elements/GraphBox13
-rwxr-xr-x[-rw-r--r--]rt/share/html/RTx/Statistics/Elements/SelectMultiQueue (renamed from rt/html/Ticket/Elements/ShowMemberOf)40
-rw-r--r--rt/share/html/RTx/Statistics/Elements/StatColumnMap173
-rwxr-xr-xrt/share/html/RTx/Statistics/Elements/Tabs72
-rw-r--r--rt/share/html/RTx/Statistics/FAQ/index.html23
-rwxr-xr-xrt/share/html/RTx/Statistics/OpenStalled/Elements/Chart27
-rw-r--r--rt/share/html/RTx/Statistics/OpenStalled/Results.tsv (renamed from rt/html/Ticket/Elements/ShowReferences)88
-rwxr-xr-xrt/share/html/RTx/Statistics/OpenStalled/index.html183
-rwxr-xr-xrt/share/html/RTx/Statistics/Resolution/Elements/Chart29
-rw-r--r--rt/share/html/RTx/Statistics/Resolution/index.html264
-rwxr-xr-xrt/share/html/RTx/Statistics/TimeToResolve/Elements/Chart23
-rwxr-xr-xrt/share/html/RTx/Statistics/TimeToResolve/index.html70
-rwxr-xr-xrt/share/html/RTx/Statistics/UserTest/Elements/Chart28
-rwxr-xr-xrt/share/html/RTx/Statistics/UserTest/index.html54
-rwxr-xr-xrt/share/html/RTx/Statistics/index.html59
-rw-r--r--rt/share/html/Search/Build.html2
-rw-r--r--rt/share/html/Search/Calendar.html238
-rw-r--r--rt/share/html/Search/Elements/BuildFormatString4
-rw-r--r--rt/share/html/Search/Elements/DisplayOptions2
-rw-r--r--rt/share/html/Search/Elements/PickCFs49
-rw-r--r--rt/share/html/Search/Elements/ResultViews3
-rw-r--r--rt/share/html/Search/Results.csv172
-rw-r--r--rt/share/html/Search/Results.tsv3
-rw-r--r--rt/share/html/Search/Results.xls (renamed from rt/html/Search/Results.tsv)151
-rw-r--r--rt/share/html/Ticket/Checklist.html30
-rwxr-xr-xrt/share/html/Ticket/Create.html10
-rwxr-xr-xrt/share/html/Ticket/Display.html6
-rw-r--r--rt/share/html/Ticket/Elements/AddCustomers55
-rwxr-xr-xrt/share/html/Ticket/Elements/BulkLinks2
-rw-r--r--rt/share/html/Ticket/Elements/CheckMandatoryFields9
-rw-r--r--rt/share/html/Ticket/Elements/EditCustomers63
-rw-r--r--rt/share/html/Ticket/Elements/EditTransactionCustomFields13
-rw-r--r--rt/share/html/Ticket/Elements/ShowCustomers38
-rw-r--r--rt/share/html/Ticket/Elements/ShowMembers_Checklist29
-rwxr-xr-xrt/share/html/Ticket/Elements/ShowSummary7
-rw-r--r--rt/share/html/Ticket/Elements/ShowTransactionAttachments10
-rwxr-xr-xrt/share/html/Ticket/Elements/Tabs13
-rw-r--r--rt/share/html/Ticket/ModifyCustomers.html49
-rwxr-xr-xrt/share/html/Ticket/Update.html20
-rwxr-xr-xrt/share/html/User/Prefs.html2
-rwxr-xr-xrt/share/html/Widgets/TitleBoxEnd2
-rwxr-xr-xrt/share/html/autohandler4
-rwxr-xr-xrt/share/html/index.html6
763 files changed, 14417 insertions, 103300 deletions
diff --git a/rt/.gitignore b/rt/.gitignore
deleted file mode 100644
index baa3d6305..000000000
--- a/rt/.gitignore
+++ /dev/null
@@ -1,42 +0,0 @@
-bin/mason_handler.fcgi
-bin/mason_handler.scgi
-bin/mason_handler.svc
-bin/rt-crontool
-bin/rt-mailgate
-bin/rt
-bin/standalone_httpd
-bin/webmux.pl
-etc/RT_Config.pm
-etc/upgrade/3.8-branded-queues-extension
-etc/upgrade/3.8-ical-extension
-lib/RT.pm
-Makefile
-t/data/gnupg/keyrings/random_seed
-t/data/configs/apache2.2+mod_perl.conf
-sbin/rt-attributes-viewer
-sbin/rt-clean-sessions
-sbin/rt-dump-database
-sbin/rt-email-dashboards
-sbin/rt-email-digest
-sbin/rt-email-group-admin
-sbin/rt-server
-sbin/rt-setup-database
-sbin/rt-shredder
-sbin/rt-test-dependencies
-sbin/rt-validator
-var/mason_data/
-autom4te.cache
-configure
-config.status
-config.log
-config.pld
-*~
-*.swp
-*.swo
-
-# RT4 junk
-META.yml
-inc/
-rt4
-var/
-etc/site_config.yml
diff --git a/rt/FREESIDE_MODIFIED b/rt/FREESIDE_MODIFIED
new file mode 100644
index 000000000..3c22f0da4
--- /dev/null
+++ b/rt/FREESIDE_MODIFIED
@@ -0,0 +1,134 @@
+ sbin/rt-setup-database.in # just a small password bugfix now
+config.layout
+config.layout.in
+ etc/RT_Config.pm.in
+ etc/RT_Config.pm
+ etc/RT_SiteConfig.pm
+ etc/schema.Pg
+ etc/schema.mysql-4.1
+
+lib/RT/Attribute_Overlay.pm #bugfix
+ lib/RT/Config.pm
+lib/RT/CustomField.pm #CheckMandatoryFields
+lib/RT/CustomField_Overlay.pm #customfield date patch #timeworked custom fields
+lib/RT/Interface/Web.pm #customfield date patch #fix transaction custom fields
+lib/RT/Action.pm #create ticket on custom field change
+lib/RT/Condition.pm #create ticket on custom field change
+lib/RT/Scrip_Overlay.pm #create ticket on custom field change
+lib/RT/Action/Accumulate.pm #timeworked custom fields
+lib/RT/Action/CreateTickets.pm #create ticket on custom field change
+lib/RT/Action/EscalatePriority.pm #ticket escalation
+lib/RT/Action/EscalateQueue.pm #ticket escalation
+lib/RT/Action/SetPriority_Local.pm #ticket escalation
+lib/RT/CustomFieldValues/Queues.pm #ticket escalation
+lib/RT/Condition/CustomFieldChange.pm #create ticket on custom field change
+lib/RT/Interface/Web_Vendor.pm
+ lib/RT/Interface/Web/Handler.pm #freeside comp_root for dashboard emails
+ lib/RT/Record.pm #and customfield date patch #fix transaction custom fields
+lib/RT/SavedSearches_Local.pm #saved searches
+lib/RT/Search/Googleish.pm #option to include resolved tickets
+lib/RT/SearchBuilder.pm #need DBIx::SearchBuilder >= 1.36 for Pg 8.1+
+lib/RT/Transaction_Overlay.pm #fix transaction custom fields
+lib/RT/Tickets_Overlay.pm #customfield date patch #SearchCustomerFields #this-month condition
+ lib/RT/Ticket_Overlay.pm #fix transaction custom fields
+ lib/RT/Users_Overlay.pm
+ lib/RT/Groups_Overlay.pm
+lib/RT/Date.pm #this-month condition
+lib/RT/Queue_Local.pm #fix saved settings when renaming queues
+lib/RT/URI/freeside.pm
+lib/RT/URI/freeside/Internal.pm
+lib/RT/URI/freeside/XMLRPC.pm
+
+# 3.9-fix-queue-caching bugfix branch
+# github.com/bestpractical/rt/commit/7e211c1199836d49f007d7f677105e5c73cc0348
+Makefile.in
+configure.ac
+lib/RT/Principal_Overlay.pm
+lib/RT/Queue_Overlay.pm
+lib/RT/System.pm
+lib/RT/Test.pm
+lib/RT/Interface/Web.pm
+sbin/rt-session-viewer.in
+share/html/Elements/SelectQueue
+
+share/html/Ticket/Create.html # queue select dropdown on Ticket/Create
+
+ share/html/autohandler #Footer getting appended where unwelcome
+ share/html/index.html #option to redirect to ticket display on quick create
+ share/html/Admin/CustomFields/Modify.html #CheckMandatoryFields #timeworked custom fields
+share/html/Admin/Elements/EditCustomFieldUILocation #timeworked custom fields
+ share/html/Admin/Elements/EditScrip #create ticket on custom field change
+ share/html/Admin/Elements/EditScripOptions #create ticket on custom field change
+ share/html/Admin/Elements/SelectScripAction #create ticket on custom field change
+ share/html/Admin/Elements/SelectScripCondition #create ticket on custom field change
+ share/html/Admin/Users/Modify.html
+ share/html/Elements/CollectionList
+share/html/Elements/EditCustomFieldDate #customfield date patch (NEW)
+share/html/Elements/EditCustomFieldTimeValue #timeworked custom fields
+ share/html/Elements/Header
+ share/html/Elements/PageLayout
+ #html/Elements/QuickCreate
+ share/html/Elements/RT__Ticket/ColumnMap
+share/html/Elements/RT__SavedSearch/ColumnMap #saved searches
+share/html/Elements/SavedSearches #saved searches
+ share/html/Elements/ShowCustomFieldDate #customfield date patch (NEW)
+share/html/Elements/ShowCustomFieldTimeValue #timeworked custom fields
+ share/html/Elements/SelectDate
+share/html/Elements/ShowLink_Checklist
+ share/html/Elements/ShowUserVerbose
+ share/html/Elements/Footer
+ share/html/Elements/SelectCustomerAgent #SearchCustomerFields
+ share/html/Elements/SelectCustomerClass #SearchCustomerFields
+ share/html/Elements/SelectCustomerTag #SearchCustomerFields
+share/html/Prefs/SavedSearches.html #saved searches
+ share/html/Search/Build.html
+share/html/Search/Results.tsv #content-type bug fix
+ share/html/Search/Elements/BuildFormatString
+ share/html/Search/Elements/PickCFs #customfield date patch
+share/html/Ticket/Checklist.html
+ share/html/Ticket/Display.html #timeworked custom fields
+share/html/Ticket/Elements/AddCustomers
+ share/html/Ticket/Elements/CheckMandatoryFields
+share/html/Ticket/Elements/EditCustomers
+share/html/Ticket/Elements/EditTransactionCustomFields #timeworked custom fields
+share/html/Ticket/Elements/ShowCustomers
+share/html/Ticket/Elements/ShowMembers_Checklist
+ share/html/Ticket/Elements/BulkLinks
+ share/html/Ticket/Elements/ShowSummary
+ share/html/Ticket/Elements/ShowTransactionAttachments
+ share/html/Ticket/Elements/Tabs #saved searches
+share/html/Ticket/Update.html #timeworked custom fields
+share/html/Ticket/ModifyCustomers.html
+ html/NoAuth/css/3.5-default/main.css
+ html/NoAuth/css/3.5-default/misc.css
+ html/NoAuth/css/3.5-default/titlebox.css
+share/html/NoAuth/css/freeside2.1/freeside.css
+share/html/NoAuth/css/freeside2.1/nav.css
+share/html/NoAuth/css/freeside2.1/base.css
+share/html/NoAuth/css/freeside2.1/layout.css
+
+share/html/Elements/AddCustomers
+share/html/Elements/EditCustomers
+
+ share/html/User/Prefs.html
+ share/html/Prefs/SearchOptions.html
+
+ share/html/Widgets/TitleBoxEnd
+
+share/html/Callbacks/RTx-Checklist/*
+
+share/html/Callbacks/CheckMandatoryFields/*
+
+share/html/Callbacks/TimeToResolve/*
+
+share/html/Callbacks/SearchCustomerFields/*
+
+share/html/Callbacks/RTx-Statistics/*
+share/html/RTx/Statistics/*
+
+share/html/Callbacks/Results-XLS/*
+share/html/Search/Results.xls
+lib/RT/Extension/SearchResults/XLS.pm
+
+share/html/Search/Results.csv
+share/html/Search/Elements/ResultViews
diff --git a/rt/HOWTO/README b/rt/HOWTO/README
deleted file mode 100644
index 942096b0a..000000000
--- a/rt/HOWTO/README
+++ /dev/null
@@ -1,14 +0,0 @@
-Here you'll find plain text documentation of how to handle various
-project procedures. Files contained herein:
-
-change.txt
- How changes are integrated, including generating and
- distributing aedist change sets, and updating the CVS repository.
-
-release.txt
- Steps to go through when releasing a new version of RT.
-
-
-These procedures are based on documentation from the scons project
-as http://www.scons.org/
-
diff --git a/rt/HOWTO/change.txt b/rt/HOWTO/change.txt
deleted file mode 100644
index de316450c..000000000
--- a/rt/HOWTO/change.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-Handling a change set:
-
- -- Start the change:
-
- aedist -r [if it's a remote submission]
-
- -or-
-
- aedb {cnum} [if it's initiated locally]
-
- -- Normal development cycle:
-
- aecd -c {cnum}
- aecp . # Copy the baseline to your working dir
- # work on your change
- aenf {new file names}
-
- aecpu -unch # Remove unchanged files, for faster diffs
- aeb # Currently does nothing
- aet # Currently does nothing
- aed # Diff your change
- aede # End the change
-
- -- As the reviewer:
-
- aerpass {cnum}
-
- -- As the integrator:
-
- aeib {cnum}
- aeb
- aet
- aed
- cd ~ # Get out of the current working directory
- aeipass
-
-
-
-
- -- Update the aedist baseline on the web site:
-
- aedist -s -bl -p rt.2.1 > rt.2.1.ae
- scp rt.2.1.ae jesse@fsck.com:/home/ftp/pub/rt/devel/rt.2.1.ae
- rm rt.2.1.ae
-
- [This will eventually be automated.]
-
- -- Distribute the change to CVS:
-
- WARNING. DOES NOT YET WORK
-
- export CVS_RSH=ssh
- ae2cvs -n -aegis -p rt.2.1 -c {cnum} -u ~/SCons/scons
- ae2cvs -X -aegis -p rt.2.1 -c {cnum} -u ~/SCons/scons
-
- If you need the "ae2cvs" Perl script, you can find a copy
- checked in to the bin/subdirectory.
-
- [This may eventually be automated.]
-
-
-
- -- Grabbing the latest dev sources over ssh
-
- ssh fsck.com "aedist -s -p rt.2.1 -naa -bl -entire-source" | aedist -r
-
-
diff --git a/rt/HOWTO/release.txt b/rt/HOWTO/release.txt
deleted file mode 100644
index 285041c5b..000000000
--- a/rt/HOWTO/release.txt
+++ /dev/null
@@ -1,124 +0,0 @@
-Things to do to release a new version of rt:
-
- Build and test candidate packages
-
- Read through the README and src/README.txt files for any updates
-
- Prepare ChangeLog
-
- date -R the latest release
-
- should be current if this has been updated as each
- change went in.
-
- [ Should be automated ]
-
-
- TODO: nothing below this line is accurate for RT
-
- END THE BRANCH
-
- ae_p rt.2
- aede {5}
- aerpass {5}
- aeib {5}
- aeb
- aet
- aet -reg
- aed
- aeipass
-
- START THE NEW BRANCH
-
- aenbr -p rt.2 {6}
- aenc -p rt.2.{6}
-
- Call it something like, "Initialize the new
- branch." Cause = internal_enhancement. Exempt
- it from all tests (*_exempt = true).
-
- ae_p rt.2.{6}
-
- aedb 100
-
- aecd
-
- # Change the hard-coded package version numbers
- # in the following files.
- aecp rttruct debian/changelog rpm/rt.spec
-
- vi rttruct debian/changelog rpm/rt.spec
-
- # Optionally, do the same in the following:
- [optional] aecp HOWTO/change.txt
- [optional] aecp HOWTO/release.txt
- [optional] aecp debian/rt.postinst
-
- [optional] vi HOWTO/change.txt
- [optional] vi HOWTO/release.txt
- [optional] vi debian/rt.postinst
-
- aeb
-
- aet -reg
-
- aed
-
- aede
-
- etc.
-
-
- Read through the FAQ for any updates
-
- Test downloading from the web site download page
-
-
- In the Bugs Tracker, add a Group for the new release (0.05)
-
- Announce to the following mailing lists (template below):
-
- rt-announce@lists.fsck.com
-
-
- Notify www.cmtoday.com/contribute.html
-
- [This guy wants an announcement no more frequently than
- once a month, so save it for a future release if it's
- been too soon since the previous one.]
-
- Notify freshmeat.net
-
- [Wait until the morning so the announcement hits the
- main freshmeat.net page while people in the U.S. are
- awake and working]
-
-
-
-
-=======================
-
-Template release announcement:
-
-
-
-Version 2.1.XXX of rt has been released and is available for download
-from the rt web site:
-
- http://bestpractical.com/rt/
-
-
-
-WHAT'S NEW IN THIS RELEASE?
-
-Version 2.1.XXX of rt contains the following important changes:
-
- - XXX
-
-For a complete list of changes in version 2.1.XXX, see the CHANGES.txt
-file in the release itself.
-
-
-WHAT IS RT?
-
- FILL THIS IN
diff --git a/rt/HOWTO/version-control.txt b/rt/HOWTO/version-control.txt
deleted file mode 100644
index 06babfdf1..000000000
--- a/rt/HOWTO/version-control.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-Using Aegis for RT development
-
- 1. The main line of RT development will be under the control
- of the Aegis change management system, as administered by
- Best Practical Solutions, LLC
-
- 2. We will use aedist to generate change sets for each change
- checked in to the main Aegis repository. These change sets will be
- either distributed by a mailing list or made available via the web,
- or both.
-
- 3. Remote developers using Aegis will send aedist output for
- their changes to rt-patches@bestpractical.com for review and
- integration.
-
- 4. The aedist output should be sent to rt-patches@bestpractical.com
- after the change has completed its local aede, but before aerpass.
-
- 5. If the change is rejected, the developer can aedeu to reopen
- the change and fix whatever problems caused the review to not pass.
-
- 6. A baseline snapshot (aedist -bl) of the main Aegis repository
- will be generated at least daily and made available via http
- to provide a central location for synchronizing remote Aegis
- repositories.
-
- 7. Changes to the main Aegis repository will also be propagated
- automatically to the tracking CVS repository.
-
-Using CVS for RT development
-
- 1. CVS is accessed via anonymous cvs with the following CVSROOT:
-
- :pserver:anoncvs@cvs.fsck.com:/raid/cvsroot/rt-2-1
-
- 2. Remote developers using CVS will send patches (cvs -diff
- output) to rt-patches@bestpractical.com for integration into the
- main Aegis repository. This allows anonymous CVS access to be used
- for RT development by developers who are unable to use Aegis.
-
-
diff --git a/rt/Makefile b/rt/Makefile
index b6e00c6fd..2365d927c 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -54,7 +54,7 @@
PERL = /usr/bin/perl
INSTALL = /usr/bin/install -c
-RT_LAYOUT = relative
+RT_LAYOUT = Freeside
CONFIG_FILE_PATH = /opt/rt3/etc
CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm
@@ -63,14 +63,14 @@ SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm
RT_VERSION_MAJOR = 3
RT_VERSION_MINOR = 8
-RT_VERSION_PATCH = 10
+RT_VERSION_PATCH = 9
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.
-RTGROUP = www
+RTGROUP = freeside
# User which should own rt binaries.
@@ -82,11 +82,11 @@ LIBS_OWNER = root
# Group that should own all of RT's libraries, generally root.
LIBS_GROUP = bin
-WEB_USER = www
-WEB_GROUP = www
+WEB_USER = freeside
+WEB_GROUP = freeside
-APACHECTL = /usr/sbin/apachectl
+APACHECTL =
# {{{ Files and directories
@@ -112,9 +112,9 @@ 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
-MASON_HTML_PATH = /opt/rt3/share/html
+MASON_HTML_PATH = /var/www/freeside/rt
MASON_LOCAL_HTML_PATH = /opt/rt3/local/html
-MASON_DATA_PATH = /opt/rt3/var/mason_data
+MASON_DATA_PATH = /usr/local/etc/freeside/masondata
MASON_SESSION_PATH = /opt/rt3/var/session_data
RT_LOG_PATH = /opt/rt3/var/log
@@ -170,6 +170,7 @@ SYSTEM_BINARIES = rt-attributes-viewer \
rt-email-dashboards \
rt-email-group-admin \
rt-server \
+ rt-session-viewer \
rt-test-dependencies \
rt-clean-sessions \
rt-shredder \
@@ -194,7 +195,7 @@ ETC_FILES = acl.Informix \
# {{{ Web frontend
-WEB_HANDLER = fastcgi
+WEB_HANDLER = modperl2
# }}}
@@ -206,7 +207,7 @@ WEB_HANDLER = fastcgi
# "Pg" is known to work
# "Informix" is known to work
-DB_TYPE = mysql
+DB_TYPE = Pg
# Set DBA to the name of a unix account with the proper permissions and
# environment to run your commandline SQL sbin
@@ -218,7 +219,7 @@ DB_TYPE = mysql
# For Oracle, you want 'system'
# For Informix, you want 'informix'
-DB_DBA = root
+DB_DBA = freeside
DB_HOST = localhost
@@ -244,9 +245,9 @@ DB_RT_HOST = localhost
# set this to the name you want to give to the RT database in
# your database server. For Oracle, this should be the name of your sid
-DB_DATABASE = rt3
-DB_RT_USER = rt_user
-DB_RT_PASS = rt_pass
+DB_DATABASE = freeside
+DB_RT_USER = freeside
+DB_RT_PASS =
# }}}
@@ -317,7 +318,7 @@ fixperms:
chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH)
chmod 0755 $(DESTDIR)$(RT_ETC_PATH)
- cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES)
+ cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES) || true
#TODO: the config file should probably be able to have its
# owner set separately from the binaries.
@@ -526,7 +527,7 @@ apachectl:
SNAPSHOT=$(shell git describe --tags)
snapshot:
git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf -
- ( cd $(SNAPSHOT) && autoconf && PERL=/usr/bin/perl ./configure )
+ ( cd $(SNAPSHOT) && autoconf && ./configure )
tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/"
rm -fr "$(SNAPSHOT)/"
diff --git a/rt/Makefile.in b/rt/Makefile.in
index 4bd512a7e..2288cfa59 100644
--- a/rt/Makefile.in
+++ b/rt/Makefile.in
@@ -170,6 +170,7 @@ SYSTEM_BINARIES = rt-attributes-viewer \
rt-email-dashboards \
rt-email-group-admin \
rt-server \
+ rt-session-viewer \
rt-test-dependencies \
rt-clean-sessions \
rt-shredder \
@@ -317,7 +318,7 @@ fixperms:
chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH)
chmod 0755 $(DESTDIR)$(RT_ETC_PATH)
- cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES)
+ cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES) || true
#TODO: the config file should probably be able to have its
# owner set separately from the binaries.
@@ -526,7 +527,7 @@ apachectl:
SNAPSHOT=$(shell git describe --tags)
snapshot:
git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf -
- ( cd $(SNAPSHOT) && autoconf && PERL=/usr/bin/perl ./configure )
+ ( cd $(SNAPSHOT) && autoconf && ./configure )
tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/"
rm -fr "$(SNAPSHOT)/"
diff --git a/rt/README b/rt/README
index 361c20681..7c5e4d47a 100755
--- a/rt/README
+++ b/rt/README
@@ -1,361 +1,278 @@
-RT is an enterprise-grade issue tracking system. It allows organizations
-to keep track of what needs to get done, who is working on which tasks,
-what's already been done, and when tasks were (or weren't) completed.
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Unless otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
+RT is an enterprise-grade issue tracking system. It allows
+organizations to keep track of their to-do lists, who is working
+on which tasks, what's already been done, and when tasks were
+completed. It is available under the terms of version 2 of the GNU
+General Public License (GPL), so it doesn't cost anything to set
+up and use.
+
+
+ Jesse Vincent
+ Best Practical Solutions, LLC
+ March 2003
+
+REQUIRED PACKAGES:
+------------------
+
+o Perl 5.8.0 or later (http://www.perl.com).
+
+ (If you intend to use the FastCGI or SpeedyCGI support, you
+ need to make sure that perl has been built with support for
+ setgid perl scripts.)`
+
+ Perl 5.6.1 is currently deprecated and will be officially desupported
+ in a future release
+
+o A DB backend; MySQL is recommended ( http://www.mysql.com )
+ Currently supported: Mysql 4.0.13 or later.
+ Postgres 7.2 or later.
-RT doesn't cost anything to use, no matter how much you use it; it
-is freely available under the terms of Version 2 of the GNU General
-Public License.
+ Mysql 3.23.46 or newer with support for InnoDB
+ is currently deprecated and will be officially
+ desupported in a future release.
-RT is commercially-supported software. To purchase support, training,
-custom development, or professional services, please get in touch with
-us at sales@bestpractical.com.
+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)
- Jesse Vincent
- Best Practical Solutions, LLC
- March, 2010
+ mod_perl 2.0 isn't quite ready for prime_time just yet;
+ Best Practical Solutions strongly recommends that sites use
+ Apache 1.3 or FastCGI.
+ Compiling mod_perl on Apache 1.3.x as a DSO has been known
+ to have massive stability problems and is not recommended.
-REQUIRED PACKAGES
------------------
+ mod_perl 1.x must be build with EVERYTHING=1
-o Perl 5.8.3 or later (http://www.perl.org).
+ RT's FastCGI handler runs setgid to the 'rt' group to
+ protect RT's database password. You may need to install
+ a special "suidperl" package or reconfigure your perl
+ setup to support "setuid scripts" if you intend to use RT
+ with FastCGI.
- Perl versions prior to 5.8.3 contain bugs that could result
- in data corruption. RT won't start on older versions.
+ Debian GNU/* 3.0+: the package which installs suidperl is
+ called perl-suid, and should work without any tweaking.
-o A supported SQL database
+ FreeBSD 4.2+: the package is called sperl, and should
+ install a suidperl that just works
- Currently supported: Mysql 4.0.13 or later with InnoDB support.
- Postgres 7.2 or later.
- Oracle 9iR2 or later.
- SQLite 3.0. (Not recommended for production)
+ Conectiva Linux 6.0+: suidperl is installed by default when
+ perl is installed, but the program /bin/suidperl is not setuid.
+ You must use chmod to make it setuid.
-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
--------------------
-1 Unpack this distribution other than where you want to install RT
-
- To do this cleanly, run the following command:
-
- tar xzvf rt.tar.gz -C /tmp
-
-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. Note that the
- default install directory in /opt/rt3 does not work under SELinux's
- default configuration.
-
- If you're upgrading RT stop and review the UPGRADING document.
- Some extensions you're using may have been integrated into
- core, or there may be other extra steps to follow. It's recommended
- that you use a 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
-
-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
- modules on your system:
-
- 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:
+This is a rough guide to installing RT. For more detail, you'll want
+to read 'Chapter 2: Installing' in RT's manual, available at
+http://www.bestpractical.com/rt
- As a user with permission to install RT in your chosen directory, type:
+1 Unpack this distribution SOMWHERE OTHER THAN where you want to install RT
- make install
+ Granted, you've already got it open. To do this cleanly:
- 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
- in etc/RT_Config.pm
+ tar xzvf rt.tar.gz -C /tmp
- As a user with permission to read RT's configuration file, type:
+2 Run the "configure" script.
- make initialize-database
+ ./configure --help to see the list of options
+ ./configure (with the flags you want)
- If the make fails, type:
+3 Satisfy RT's myriad dependencies.
- make dropdb
+3.1 Check for compliance:
+
+ perl sbin/rt-test-dependencies \
+ --with-<databasename> --with-<web-environment>
- and start over from step 6
+ databasename is one of: mysql, postgres
+ web-environment is one of: fastcgi, modperl1, modperl2
-7 If you're upgrading from RT 3.0 or newer:
+3.2 If there are unsatisfied dependencies, install them by hand or run:
- Read through the UPGRADING document included in this distribution. If
- you're using MySQL, read through UPGRADING.mysql as well.
+ perl sbin/rt-test-dependencies \
+ --with-<databasename> --with-<web-environment> --install
+
- It includes special upgrade instructions that will help you get this
- new version of RT up and running smoothly.
+3.3 Check to make sure everything was installed properly:
- As a user with permission to install RT in your chosen installation
- directory, type:
+ perl sbin/rt-test-dependencies \
+ --with-<databasename> --with-<web-environment>
- make upgrade
+4 Create a group called 'rt'
- This will install new binaries, config files and libraries without
- overwriting your RT database.
+5a FOR A NEW INSTALLATION:
+
+ As root, type:
+ make install (replace "make" with the local name for
+ Make, if you need to)
- 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
- in etc/RT_Config.pm
+
+ make initialize-database
- 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).
- 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
+ If the make fails, type:
+ make dropdb
+ and start over from step 5a
- You should back up your database before running this command.
+5b FOR UPGRADING: (Within the RT 3.0.x series)
- /opt/rt3/sbin/rt-setup-database --dba root --prompt-for-dba-password --action upgrade
+ As root, type:
+ make upgrade (replace "make" with the local name for
+ Make, if you need to)
- Clear mason cache dir:
+ This will build new binaries, config files and libraries without
+ overwriting your RT database.
+
+ It may then instruct you to update your RT system database objects
- rm -fr /opt/rt3/var/mason_data/obj
+6 Edit etc/RT_SiteConfig.pm in your RT installation directory, by specifying
+ any values you need to change from the defaults in etc/RT_Config.pm
- Stop and start web-server.
+7 Configure the email and web gateways, as described below.
+8 Stop and start your webserver, so it picks up your configuration changes.
-8 If you're upgrading from RT 2.0:
-
- Read more in UPGRADING
-
-9 Configure the email and web gateways, as described below.
-
- NOTE: root's password for the web interface is "password"
- (without the quotes). Not changing this is a SECURITY risk!
-
-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.
+ NOTE: root's password for the web interface is "password"
+ (without the quotes.) Not changing this is a SECURITY risk
+
+9 Configure RT per the instructions in RT's manual.
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.
-
-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.
-
-See below configuration instructions for mod_perl 2.x
-
-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:
+THE WEB INTERFACE
+-----------------
- perl -MCPAN -e'install "Apache::DBI"'
+RT's web interface is based around HTML::Mason, which works best with the mod_perl
+perl interpreter within Apache httpd. Alternatively, support for the FastCGI
+(and plain CGI) interface is also provided as 'bin/mason_handler.fcgi'.
-Next, add a few lines to your Apache 1.3.xx configuration file, so that
-it knows where to find RT:
+Apache
+ You'll need to add a few lines to your httpd.conf telling it about 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
+ # this line applies to Apache2+mod_perl2 only
+ PerlModule Apache2 Apache::compat
PerlModule Apache::DBI
PerlRequire /opt/rt3/bin/webmux.pl
- <Location /NoAuth/images>
- SetHandler default
- </Location>
+ # this section applies to Apache 1 only
<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 />
+ # this section applies to Apache2+mod_perl2 only
+ <FilesMatch "\.html$">
SetHandler perl-script
- PerlResponseHandler RT::Mason
- </Location>
-</VirtualHost>
-
-FastCGI
--------
-
-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
-as a user who is a member of the "rt" unix group so that the FastCGI script
-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
-Apache configuration file telling it about RT:
-
-
-# Tell FastCGI to put its temporary files somewhere sane.
-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/
+ PerlHandler RT::Mason
+ </FilesMatch>
+ <LocationMatch "/Attachment/">
+ SetHandler perl-script
+ PerlHandler RT::Mason
+ </LocationMatch>
+ <LocationMatch "/REST/">
+ SetHandler perl-script
+ PerlHandler RT::Mason
+ </LocationMatch>
</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
-configuration to your mail server's "aliases" file. These lines "pipe"
-incoming email messages from your mail server to RT.
-
-Add the following lines to /etc/aliases (or your local equivalent) on your mail server:
-
-rt: "|/opt/rt3/bin/rt-mailgate --queue general --action correspond --url http://rt.example.com/"
-rt-comment: "|/opt/rt3/bin/rt-mailgate --queue general --action comment --url http://rt.example.com/"
+An alias for the initial queue will need to be made in either your
+global mail aliases file (if you are using NIS) or locally on your
+machine.
+
+Add the following lines to /etc/aliases (or your local equivalent) :
-You'll need to add similar lines for each queue you want to be able
-to send email to. To find out more about how to configure RT's email
-gateway, type:
+rt: "|/opt/rt3/bin/rt-mailgate --queue general --action correspond --url http://localhost/"
+rt-comment: "|/opt/rt3/bin/rt-mailgate --queue general --action comment --url http://localhost/"
+ | | |
+ <queue-name>----/ | |
+ | |
+ <correspond or comment depending on whether | |
+ the mail should be resent to the requestor>---/ |
+ |
+ <URL for RT's web interface>---/
- perldoc /opt/rt3/bin/rt-mailgate
+BUGS
+----
+To report a bug, send email to rt-3.0-bugs@fsck.com.
GETTING HELP
------------
If RT is mission-critical for you or if you use it heavily, we recommend that
you purchase a commercial support contract. Details on support contracts
-are available at http://www.bestpractical.com or by writing to
-<sales@bestpractical.com>.
+are available at http://www.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.
-
-RT WEBSITE
-----------
-
-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
-patches, and lots of other great stuff.
-
-
-
-RT-USERS MAILING LIST
----------------------
+RT-USERS MAILINGLIST
+--------------------
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.fsck.com
-with the body of the message consisting of only the word:
+With the body of the message consisting of only the word:
- subscribe
+ subscribe
If you're interested in hacking on RT, you'll want to subscribe to
-<rt-devel@lists.bestpractical.com>. Subscribe to it with instructions
-similar to those above.
+rt-devel@lists.fsck.com. Subscribe to it with instructions similar to
+those above.
Address questions about the stable release to the rt-users list, and
questions about the development version to the rt-devel list. If you feel
@@ -363,63 +280,21 @@ your questions are best not asked publicly, send them personally to
<jesse@bestpractical.com>.
+RT WEBSITE
+----------
-BUGS
-----
+For current information about RT, check out the RT website at
+ http://www.bestpractical.com/
-RT's a pretty complex application, and as you get up to speed, you might
-run into some trouble. Generally, it's best to ask about things you
-run into on the rt-users mailinglist (or pick up a commercial support
-contract from Best Practical). But, sometimes people do run into bugs. In
-the exceedingly unlikely event that you hit a bug in RT, please report
-it! We'd love to hear about problems you have with RT, so we can fix them.
-To report a bug, send email to rt-bugs@fsck.com.
-
-
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
+You'll find screenshots, a pointer to the current version of RT, contributed
+patches, and lots of other great stuff.
+
+
+TROUBLESHOOTING
+---------------
+
+If the solution to the problem you're running into isn't obvious and you've
+checked the FAQ, feel free to send mail to rt-users@fsck.com (for released
+versions of RT) or rt-devel@fsck.com (for development versions).
+
+Thanks!
diff --git a/rt/bin/fastcgi_server b/rt/bin/fastcgi_server
index 4ccf014da..248267e45 100755
--- a/rt/bin/fastcgi_server
+++ b/rt/bin/fastcgi_server
@@ -230,18 +230,6 @@ while ( my $cgi = CGI::Fast->new ) {
Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase();
- # Each environment has its own way of handling .. and so on in paths,
- # so RT consistently forbids such paths.
- if ( $cgi->path_info =~ m{/\.} ) {
- $RT::Logger->crit("Invalid request for ".$cgi->path_info." aborting");
- print STDOUT "HTTP/1.0 400\r\n\r\n";
-
- RT::Interface::Web::Handler->CleanupRequest();
- $proc_manager->pm_post_dispatch;
-
- next;
- }
-
my $interp = $RT::Mason::Handler->interp;
if (
!$interp->comp_exists( $cgi->path_info )
diff --git a/rt/bin/mason_handler.fcgi b/rt/bin/mason_handler.fcgi
index 996e96076..432296be7 100755
--- a/rt/bin/mason_handler.fcgi
+++ b/rt/bin/mason_handler.fcgi
@@ -68,17 +68,6 @@ while ( my $cgi = CGI::Fast->new ) {
Module::Refresh->refresh if RT->Config->Get('DevelMode');
RT::ConnectToDatabase();
- # Each environment has its own way of handling .. and so on in paths,
- # so RT consistently forbids such paths.
- if ( $cgi->path_info =~ m{/\.} ) {
- $RT::Logger->crit("Invalid request for ".$cgi->path_info." aborting");
- print STDOUT "HTTP/1.0 400\r\n\r\n";
-
- RT::Interface::Web::Handler->CleanupRequest();
-
- next;
- }
-
my $interp = $RT::Mason::Handler->interp;
if (
!$interp->comp_exists( $cgi->path_info )
diff --git a/rt/bin/mason_handler.scgi b/rt/bin/mason_handler.scgi
index 83649edaf..5cbb9a30f 100755
--- a/rt/bin/mason_handler.scgi
+++ b/rt/bin/mason_handler.scgi
@@ -57,18 +57,6 @@ require (dirname(__FILE__) . '/webmux.pl');
require CGI;
my $cgi = CGI->new;
-
-# Each environment has its own way of handling .. and so on in paths,
-# so RT consistently forbids such paths.
-if ( $cgi->path_info =~ m{/\.} ) {
- $RT::Logger->crit("Invalid request for ".$cgi->path_info." aborting");
- print STDOUT "HTTP/1.0 400\r\n\r\n";
-
- RT::Interface::Web::Handler->CleanupRequest();
-
- return 0;
-}
-
if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) )
&& ( $Handler->interp->comp_exists( $cgi->path_info . "/index.html" ) ) ) {
$cgi->path_info( $cgi->path_info . "/index.html" );
diff --git a/rt/bin/mason_handler.svc b/rt/bin/mason_handler.svc
index 6275a9e59..ceb6cbcd9 100644
--- a/rt/bin/mason_handler.svc
+++ b/rt/bin/mason_handler.svc
@@ -234,17 +234,6 @@ $Handler ||= RT::Interface::Web::Handler->new(
while( my $cgi = CGI::Fast->new ) {
my $comp = $ENV{'PATH_INFO'};
- # Each environment has its own way of handling .. and so on in paths,
- # so RT consistently forbids such paths.
- if ( $cgi->path_info =~ m{/\.} ) {
- $RT::Logger->crit("Invalid request for ".$cgi->path_info." aborting");
- print STDOUT "HTTP/1.0 400\r\n\r\n";
-
- RT::Interface::Web::Handler->CleanupRequest();
-
- next;
- }
-
$comp = $1 if ($comp =~ /^(.*)$/);
my $web_path = RT->Config->Get('WebPath');
$comp =~ s|^\Q$web_path\E\b||i;
diff --git a/rt/bin/rt b/rt/bin/rt
deleted file mode 100755
index f327b39d3..000000000
--- a/rt/bin/rt
+++ /dev/null
@@ -1,2587 +0,0 @@
-#!/usr/bin/perl -w
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-# Designed and implemented for Best Practical Solutions, LLC by
-# Abhijit Menon-Sen <ams@wiw.org>
-
-use strict;
-
-# This program is intentionally written to have as few non-core module
-# dependencies as possible. It should stay that way.
-
-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).
-# Session information is stored in ~/.rt_sessions.
-
-my $VERSION = 0.02;
-my $HOME = eval{(getpwuid($<))[7]}
- || $ENV{HOME} || $ENV{LOGDIR} || $ENV{HOMEPATH}
- || ".";
-my %config = (
- (
- 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> ';
-
-sub whine;
-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 $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:
-#
-# rt <action> [options] [arguments]
-#
-# We'll parse just enough of it to decide upon an action to perform, and
-# leave the rest to per-action handlers to interpret appropriately.
-
-my %handlers = (
-# handler => [ ...aliases... ],
- version => ["version", "ver"],
- shell => ["shell"],
- logout => ["logout"],
- help => ["help", "man"],
- show => ["show", "cat"],
- edit => ["create", "edit", "new", "ed"],
- list => ["search", "list", "ls"],
- comment => ["comment", "correspond"],
- link => ["link", "ln"],
- merge => ["merge"],
- grant => ["grant", "revoke"],
- take => ["take", "steal", "untake"],
- quit => ["quit", "exit"],
- setcommand => ["del", "delete", "give", "res", "resolve",
- "subject"],
-);
-
-my %actions;
-foreach my $fn (keys %handlers) {
- foreach my $alias (@{ $handlers{$fn} }) {
- $actions{$alias} = \&{"$fn"};
- }
-}
-
-# Once we find and call an appropriate handler, we're done.
-
-sub handler {
- my $action;
-
- push @ARGV, 'shell' if (!@ARGV); # default to shell mode
- shift @ARGV if ($ARGV[0] eq 'rt'); # ignore a leading 'rt'
- if (@ARGV && exists $actions{$ARGV[0]}) {
- $action = shift @ARGV;
- return $actions{$action}->($action);
- }
- else {
- print STDERR "rt: Unknown command '@ARGV'.\n";
- print STDERR "rt: For help, run 'rt help'.\n";
- return 1;
- }
-}
-
-exit handler();
-
-# Handler functions.
-# ------------------
-#
-# The following subs are handlers for each entry in %actions.
-
-sub shell {
- $|=1;
- my $term = new Term::ReadLine 'RT CLI';
- while ( defined ($_ = $term->readline($prompt)) ) {
- next if /^#/ || /^\s*$/;
-
- @ARGV = shellwords($_);
- handler();
- }
-}
-
-sub version {
- print "rt $VERSION\n";
- return 0;
-}
-
-sub logout {
- submit("$REST/logout") if defined $session->cookie;
- return 0;
-}
-
-sub quit {
- logout();
- exit;
-}
-
-my %help;
-sub help {
- my ($action, $type, $rv) = @_;
- $rv = defined $rv ? $rv : 0;
- my $key;
-
- # What help topics do we know about?
- if (!%help) {
- local $/ = undef;
- foreach my $item (@{ Form::parse(<DATA>) }) {
- my $title = $item->[2]{Title};
- my @titles = ref $title eq 'ARRAY' ? @$title : $title;
-
- foreach $title (grep $_, @titles) {
- $help{$title} = $item->[2]{Text};
- }
- }
- }
-
- # What does the user want help with?
- undef $action if ($action && $actions{$action} eq \&help);
- unless ($action || $type) {
- # If we don't know, we'll look for clues in @ARGV.
- foreach (@ARGV) {
- if (exists $help{$_}) { $key = $_; last; }
- }
- unless ($key) {
- # Tolerate possibly plural words.
- foreach (@ARGV) {
- if ($_ =~ s/s$// && exists $help{$_}) { $key = $_; last; }
- }
- }
- }
-
- if ($type && $action) {
- $key = "$type.$action";
- }
- $key ||= $type || $action || "introduction";
-
- # Find a suitable topic to display.
- while (!exists $help{$key}) {
- if ($type && $action) {
- if ($key eq "$type.$action") { $key = $action; }
- elsif ($key eq $action) { $key = $type; }
- else { $key = "introduction"; }
- }
- else {
- $key = "introduction";
- }
- }
-
- print STDERR $help{$key}, "\n\n";
- return $rv;
-}
-
-# Displays a list of objects that match some specified condition.
-
-sub list {
- my ($q, $type, %data);
- my $orderby = $config{orderby};
-
- if ($config{orderby}) {
- $data{orderby} = $config{orderby};
- }
- my $bad = 0;
- my $rawprint = 0;
- my $reverse_sort = 0;
- my $queue = $config{queue};
-
- while (@ARGV) {
- $_ = shift @ARGV;
-
- if (/^-t$/) {
- $bad = 1, last unless defined($type = get_type_argument());
- }
- elsif (/^-S$/) {
- $bad = 1, last unless get_var_argument(\%data);
- }
- elsif (/^-o$/) {
- $data{'orderby'} = shift @ARGV;
- }
- elsif (/^-([isl])$/) {
- $data{format} = $1;
- $rawprint = 1;
- }
- elsif (/^-q$/) {
- $queue = shift @ARGV;
- }
- elsif (/^-r$/) {
- $reverse_sort = 1;
- }
- elsif (/^-f$/) {
- if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) {
- whine "No valid field list in '-f $ARGV[0]'.";
- $bad = 1; last;
- }
- $data{fields} = shift @ARGV;
- $data{format} = 's' if ! $data{format};
- $rawprint = 1;
- }
- elsif (!defined $q && !/^-/) {
- $q = $_;
- }
- else {
- my $datum = /^-/ ? "option" : "argument";
- whine "Unrecognised $datum '$_'.";
- $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";
- whine "No $item specified.";
- $bad = 1;
- }
- #return 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 });
- if ( $rawprint ) {
- print $r->content;
- } else {
- my $forms = Form::parse($r->content);
- prettylist ($forms);
- }
- return 0;
-}
-
-# Displays selected information about a single object.
-
-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());
- }
- elsif (/^-S$/) {
- $bad = 1, last unless get_var_argument(\%data);
- }
- elsif (/^-([isl])$/) {
- $data{format} = $1;
- $rawprint = 1;
- }
- elsif (/^-$/ && !$slurped) {
- chomp(my @lines = <STDIN>);
- foreach (@lines) {
- unless (is_object_spec($_, $type)) {
- whine "Invalid object on STDIN: '$_'.";
- $bad = 1; last;
- }
- push @objects, $_;
- }
- $slurped = 1;
- }
- elsif (/^-f$/) {
- if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) {
- whine "No valid field list in '-f $ARGV[0]'.";
- $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";
- whine "Unrecognised $datum '$_'.";
- $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, $bad) if $bad;
-
- my $r = submit("$REST/show", { id => \@objects, %data });
- my $c = $r->content;
- # if this isn't a text reply, remove the trailing newline so we
- # don't corrupt things like tarballs when people do
- # 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);
- }
- return 0;
-}
-
-# To create a new object, we ask the server for a form with the defaults
-# filled in, allow the user to edit it, and send the form back.
-#
-# To edit an object, we must ask the server for a form representing that
-# object, make changes requested by the user (either on the command line
-# or interactively via $EDITOR), and send the form back.
-
-sub edit {
- my ($action) = @_;
- my (%data, $type, @objects);
- my ($cl, $text, $edit, $input, $output);
-
- use vars qw(%set %add %del);
- %set = %add = %del = ();
- my $slurped = 0;
- my $bad = 0;
-
- while (@ARGV) {
- $_ = shift @ARGV;
- s/^#// if /^#\d+/; # get rid of leading hash
-
- if (/^-e$/) { $edit = 1 }
- elsif (/^-i$/) { $input = 1 }
- elsif (/^-o$/) { $output = 1 }
- elsif (/^-t$/) {
- $bad = 1, last unless defined($type = get_type_argument());
- }
- elsif (/^-S$/) {
- $bad = 1, last unless get_var_argument(\%data);
- }
- elsif (/^-$/ && !($slurped || $input)) {
- chomp(my @lines = <STDIN>);
- foreach (@lines) {
- unless (is_object_spec($_, $type)) {
- whine "Invalid object on STDIN: '$_'.";
- $bad = 1; last;
- }
- push @objects, $_;
- }
- $slurped = 1;
- }
- elsif (/^set$/i) {
- my $vars = 0;
-
- while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/s) {
- my ($key, $op, $val) = ($1, $2, $3);
- my $hash = ($op eq '=') ? \%set : ($op =~ /^\+/) ? \%add : \%del;
-
- vpush($hash, lc $key, $val);
- shift @ARGV;
- $vars++;
- }
- unless ($vars) {
- whine "No variables to set.";
- $bad = 1; last;
- }
- $cl = $vars;
- }
- elsif (/^(?:add|del)$/i) {
- my $vars = 0;
- my $hash = ($_ eq "add") ? \%add : \%del;
-
- while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/s) {
- my ($key, $val) = ($1, $2);
-
- vpush($hash, lc $key, $val);
- shift @ARGV;
- $vars++;
- }
- unless ($vars) {
- whine "No variables to set.";
- $bad = 1; last;
- }
- $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;
- }
- else {
- my $datum = /^-/ ? "option" : "argument";
- whine "Unrecognised $datum '$_'.";
- $bad = 1; last;
- }
- }
-
- if ($action =~ /^ed(?:it)?$/) {
- unless (@objects) {
- whine "No objects specified.";
- $bad = 1;
- }
- }
- else {
- if (@objects) {
- whine "You shouldn't specify objects as arguments to $action.";
- $bad = 1;
- }
- unless ($type) {
- whine "What type of object do you want to create?";
- $bad = 1;
- }
- @objects = ("$type/new") if defined($type);
- }
- #return 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
- # user doesn't want to edit the form by hand, and the command line
- # specifies only simple variable assignments. We *should* get a
- # form if we're creating a new ticket, so that the default values
- # get filled in properly.
-
- my @new_objects = grep /\/new$/, @objects;
-
- if ($input) {
- local $/ = undef;
- $text = <STDIN>;
- }
- elsif ($edit || %add || %del || !$cl || @new_objects) {
- my $r = submit("$REST/show", { id => \@objects, format => 'l' });
- $text = $r->content;
- }
-
- # If any changes were specified on the command line, apply them.
- if ($cl) {
- if ($text) {
- # We're updating forms from the server.
- my $forms = Form::parse($text);
-
- foreach my $form (@$forms) {
- my ($c, $o, $k, $e) = @$form;
- my ($key, $val);
-
- next if ($e || !@$o);
-
- local %add = %add;
- local %del = %del;
- local %set = %set;
-
- # Make changes to existing fields.
- foreach $key (@$o) {
- if (exists $add{lc $key}) {
- $val = delete $add{lc $key};
- vpush($k, $key, $val);
- $k->{$key} = vsplit($k->{$key}) if $val =~ /[,\n]/;
- }
- if (exists $del{lc $key}) {
- $val = delete $del{lc $key};
- my %val = map {$_=>1} @{ vsplit($val) };
- $k->{$key} = vsplit($k->{$key});
- @{$k->{$key}} = grep {!exists $val{$_}} @{$k->{$key}};
- }
- if (exists $set{lc $key}) {
- $k->{$key} = delete $set{lc $key};
- }
- }
-
- # Then update the others.
- foreach $key (keys %set) { vpush($k, $key, $set{$key}) }
- foreach $key (keys %add) {
- vpush($k, $key, $add{$key});
- $k->{$key} = vsplit($k->{$key});
- }
- push @$o, (keys %add, keys %set);
- }
-
- $text = Form::compose($forms);
- }
- else {
- # We're rolling our own set of forms.
- my @forms;
- foreach (@objects) {
- my ($type, $ids, $args) =
- m{^($name)/($idlist|$labels)(?:(/.*))?$}o;
-
- $args ||= "";
- foreach my $obj (expand_list($ids)) {
- my %set = (%set, id => "$type/$obj$args");
- push @forms, ["", [keys %set], \%set];
- }
- }
- $text = Form::compose(\@forms);
- }
- }
-
- if ($output) {
- print $text;
- return 0;
- }
-
- my $synerr = 0;
-
-EDIT:
- # We'll let the user edit the form before sending it to the server,
- # unless we have enough information to submit it non-interactively.
- if ($edit || (!$input && !$cl)) {
- my $newtext = vi($text);
- # We won't resubmit a bad form unless it was changed.
- $text = ($synerr && $newtext eq $text) ? undef : $newtext;
- }
-
- if ($text) {
- my $r = submit("$REST/edit", {content => $text, %data});
- if ($r->code == 409) {
- # If we submitted a bad form, we'll give the user a chance
- # to correct it and resubmit.
- if ($edit || (!$input && !$cl)) {
- $text = $r->content;
- $synerr = 1;
- goto EDIT;
- }
- else {
- print $r->content;
- 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.
-
-sub comment {
- my ($action) = @_;
- my (%data, $id, @files, @bcc, @cc, $msg, $wtime, $edit);
- my $bad = 0;
-
- while (@ARGV) {
- $_ = shift @ARGV;
-
- if (/^-e$/) {
- $edit = 1;
- }
- elsif (/^-[abcmw]$/) {
- unless (@ARGV) {
- whine "No argument specified with $_.";
- $bad = 1; last;
- }
-
- if (/-a/) {
- unless (-f $ARGV[0] && -r $ARGV[0]) {
- whine "Cannot read attachment: '$ARGV[0]'.";
- return 0;
- }
- push @files, shift @ARGV;
- }
- elsif (/-([bc])/) {
- my $a = $_ eq "-b" ? \@bcc : \@cc;
- @$a = split /\s*,\s*/, shift @ARGV;
- }
- elsif (/-m/) {
- $msg = shift @ARGV;
- if ( $msg =~ /^-$/ ) {
- undef $msg;
- while (<STDIN>) { $msg .= $_ }
- }
- }
-
- elsif (/-w/) { $wtime = shift @ARGV }
- }
- elsif (!$id && m|^(?:ticket/)?($idlist)$|) {
- $id = $1;
- }
- else {
- my $datum = /^-/ ? "option" : "argument";
- whine "Unrecognised $datum '$_'.";
- $bad = 1; last;
- }
- }
-
- unless ($id) {
- whine "No object specified.";
- $bad = 1;
- }
- #return help($action, "ticket") if $bad;
- return suggest_help($action, "ticket") if $bad;
-
- my $form = [
- "",
- [ "Ticket", "Action", "Cc", "Bcc", "Attachment", "TimeWorked", "Text" ],
- {
- Ticket => $id,
- Action => $action,
- Cc => [ @cc ],
- Bcc => [ @bcc ],
- Attachment => [ @files ],
- TimeWorked => $wtime || '',
- Text => $msg || '',
- Status => ''
- }
- ];
-
- my $text = Form::compose([ $form ]);
-
- if ($edit || !$msg) {
- my $error = 0;
- my ($c, $o, $k, $e);
-
- do {
- my $ntext = vi($text);
- return if ($error && $ntext eq $text);
- $text = $ntext;
- $form = Form::parse($text);
- $error = 0;
-
- ($c, $o, $k, $e) = @{ $form->[0] };
- if ($e) {
- $error = 1;
- $c = "# Syntax error.";
- goto NEXT;
- }
- elsif (!@$o) {
- return 0;
- }
- @files = @{ vsplit($k->{Attachment}) };
-
- NEXT:
- $text = Form::compose([[$c, $o, $k, $e]]);
- } while ($error);
- }
-
- my $i = 1;
- foreach my $file (@files) {
- $data{"attachment_$i"} = bless([ $file ], "Attachment");
- $i++;
- }
- $data{content} = $text;
-
- my $r = submit("$REST/ticket/$id/comment", \%data);
- print $r->content;
- return 0;
-}
-
-# Merge one ticket into another.
-
-sub merge {
- my @id;
- my $bad = 0;
-
- while (@ARGV) {
- $_ = shift @ARGV;
- s/^#// if /^#\d+/; # get rid of leading hash
-
- if (/^\d+$/) {
- push @id, $_;
- }
- else {
- whine "Unrecognised argument: '$_'.";
- $bad = 1; last;
- }
- }
-
- unless (@id == 2) {
- my $evil = @id > 2 ? "many" : "few";
- whine "Too $evil arguments specified.";
- $bad = 1;
- }
- #return 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);
-
- while (@ARGV && $ARGV[0] =~ /^-/) {
- $_ = shift @ARGV;
-
- 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 $type ID '$bad' specified.";
- $bad = 1;
- }
- 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);
- }
- else {
- my $bad = @ARGV < 3 ? "few" : "many";
- whine "Too $bad arguments specified.";
- $bad = 1;
- }
- return suggest_help("link", $type, $bad) if $bad;
-
- my $r = submit("$REST/$type/link", \%data);
- print $r->content;
- return 0;
-}
-
-# Take/steal a ticket
-sub take {
- my ($cmd) = @_;
- my ($bad, %data) = (0, ());
-
- my $id;
-
- # get the ticket id
- if (@ARGV == 1) {
- ($id) = @ARGV;
- unless ($id =~ /^\d+$/) {
- whine "Invalid ticket ID $id specified.";
- $bad = 1;
- }
- my $form = [
- "",
- [ "Ticket", "Action" ],
- {
- Ticket => $id,
- Action => $cmd,
- Status => '',
- }
- ];
-
- my $text = Form::compose([ $form ]);
- $data{content} = $text;
- }
- else {
- $bad = @ARGV < 1 ? "few" : "many";
- whine "Too $bad arguments specified.";
- $bad = 1;
- }
- 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.
-
-sub grant {
- my ($cmd) = @_;
-
- my $revoke = 0;
- while (@ARGV) {
- }
-
- $revoke = 1 if $cmd->{action} eq 'revoke';
- return 0;
-}
-
-# Client <-> Server communication.
-# --------------------------------
-#
-# This function composes and sends an HTTP request to the RT server, and
-# interprets the response. It takes a request URI, and optional request
-# data (a string, or a reference to a set of key-value pairs).
-
-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 = [];
- if (defined $content) {
- unless (ref $content) {
- # If it's just a string, make sure LWP handles it properly.
- # (By pretending that it's a file!)
- $content = [ content => [undef, "", Content => $content] ];
- }
- elsif (ref $content eq 'HASH') {
- my @data;
- foreach my $k (keys %$content) {
- if (ref $content->{$k} eq 'ARRAY') {
- foreach my $v (@{ $content->{$k} }) {
- push @data, $k, $v;
- }
- }
- else { push @data, $k, $content->{$k} }
- }
- $content = \@data;
- }
- $data = $content;
- }
-
- # Should we send authentication information to start a new session?
- 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.
- if (@$data) {
- $req = POST($uri, $data, Content_Type => 'form-data');
- }
- else {
- $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);
- my $res = $ua->request($req);
- DEBUG(3, $res->as_string);
-
- if ($res->is_success) {
- # The content of the response we get from the RT server consists
- # of an HTTP-like status line followed by optional header lines,
- # a blank line, and arbitrary text.
-
- my ($head, $text) = split /\n\n/, $res->content, 2;
- my ($status, @headers) = split /\n/, $head;
- $text =~ s/\n*$/\n/ if ($text);
-
- # "RT/3.0.1 401 Credentials required"
- if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) {
- warn "rt: Malformed RT response from $config{server}.\n";
- warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3;
- exit -1;
- }
-
- # Our caller can pretend that the server returned a custom HTTP
- # response code and message. (Doing that directly is apparently
- # not sufficiently portable and uncomplicated.)
- $res->code($1);
- $res->message($2);
- $res->content($text);
- $session->update($res) if ($res->is_success || $res->code != 401);
-
- if (!$res->is_success) {
- # We can deal with authentication failures ourselves. Either
- # we sent invalid credentials, or our session has expired.
- if ($res->code == 401) {
- my %d = @$data;
- if (exists $d{user}) {
- warn "rt: Incorrect username or password.\n";
- exit -1;
- }
- elsif ($req->header("Cookie")) {
- # We'll retry the request with credentials, unless
- # we only wanted to logout in the first place.
- $session->delete;
- return submit(@_) unless $uri eq "$REST/logout";
- }
- }
- # Conflicts should be dealt with by the handler and user.
- # For anything else, we just die.
- elsif ($res->code != 409) {
- warn "rt: ", $res->content;
- #exit;
- }
- }
- }
- else {
- warn "rt: Server error: ", $res->message, " (", $res->code, ")\n";
- exit -1;
- }
-
- return $res;
-}
-
-# Session management.
-# -------------------
-#
-# Maintains a list of active sessions in the ~/.rt_sessions file.
-{
- package Session;
- my ($s, $u);
-
- # Initialises the session cache.
- sub new {
- my ($class, $file) = @_;
- my $self = {
- file => $file || "$HOME/.rt_sessions",
- sids => { }
- };
-
- # The current session is identified by the currently configured
- # server and user.
- ($s, $u) = @config{"server", "user"};
-
- bless $self, $class;
- $self->load();
-
- return $self;
- }
-
- # Returns the current session cookie.
- sub cookie {
- my ($self) = @_;
- my $cookie = $self->{sids}{$s}{$u};
- return defined $cookie ? "RT_SID_$cookie" : undef;
- }
-
- # Deletes the current session cookie.
- sub delete {
- my ($self) = @_;
- delete $self->{sids}{$s}{$u};
- }
-
- # Adds a Cookie header to an outgoing HTTP request.
- sub add_cookie_header {
- my ($self, $request) = @_;
- my $cookie = $self->cookie();
-
- $request->header(Cookie => $cookie) if defined $cookie;
- }
-
- # Extracts the Set-Cookie header from an HTTP response, and updates
- # session information accordingly.
- sub update {
- my ($self, $response) = @_;
- my $cookie = $response->header("Set-Cookie");
-
- if (defined $cookie && $cookie =~ /^RT_SID_(.[^;,\s]+=[0-9A-Fa-f]+);/) {
- $self->{sids}{$s}{$u} = $1;
- }
- }
-
- # Loads the session cache from the specified file.
- sub load {
- my ($self, $file) = @_;
- $file ||= $self->{file};
- local *F;
-
- open(F, '<', $file) && do {
- $self->{file} = $file;
- my $sids = $self->{sids} = {};
- while (<F>) {
- chomp;
- next if /^$/ || /^#/;
- next unless m#^https?://[^ ]+ \w+ [^;,\s]+=[0-9A-Fa-f]+$#;
- my ($server, $user, $cookie) = split / /, $_;
- $sids->{$server}{$user} = $cookie;
- }
- return 1;
- };
- return 0;
- }
-
- # Writes the current session cache to the specified file.
- sub save {
- my ($self, $file) = shift;
- $file ||= $self->{file};
- local *F;
-
- open(F, '>', $file) && do {
- my $sids = $self->{sids};
- foreach my $server (keys %$sids) {
- foreach my $user (keys %{ $sids->{$server} }) {
- my $sid = $sids->{$server}{$user};
- if (defined $sid) {
- print F "$server $user $sid\n";
- }
- }
- }
- close(F);
- chmod 0600, $file;
- return 1;
- };
- return 0;
- }
-
- sub DESTROY {
- my $self = shift;
- $self->save;
- }
-}
-
-# Form handling.
-# --------------
-#
-# Forms are RFC822-style sets of (field, value) specifications with some
-# initial comments and interspersed blank lines allowed for convenience.
-# Sets of forms are separated by --\n (in a cheap parody of MIME).
-#
-# Each form is parsed into an array with four elements: commented text
-# at the start of the form, an array with the order of keys, a hash with
-# key/value pairs, and optional error text if the form syntax was wrong.
-
-# Returns a reference to an array of parsed forms.
-sub Form::parse {
- my $state = 0;
- my @forms = ();
- my @lines = split /\n/, $_[0] if $_[0];
- my ($c, $o, $k, $e) = ("", [], {}, "");
-
- LINE:
- while (@lines) {
- my $line = shift @lines;
-
- next LINE if $line eq '';
-
- if ($line eq '--') {
- # We reached the end of one form. We'll ignore it if it was
- # empty, and store it otherwise, errors and all.
- if ($e || $c || @$o) {
- push @forms, [ $c, $o, $k, $e ];
- $c = ""; $o = []; $k = {}; $e = "";
- }
- $state = 0;
- }
- elsif ($state != -1) {
- if ($state == 0 && $line =~ /^#/) {
- # Read an optional block of comments (only) at the start
- # of the form.
- $state = 1;
- $c = $line;
- while (@lines && $lines[0] =~ /^#/) {
- $c .= "\n".shift @lines;
- }
- $c .= "\n";
- }
- elsif ($state <= 1 && $line =~ /^($field):(?:\s+(.*))?$/) {
- # Read a field: value specification.
- my $f = $1;
- my @v = ($2 || ());
-
- # Read continuation lines, if any.
- while (@lines && ($lines[0] eq '' || $lines[0] =~ /^\s+/)) {
- push @v, shift @lines;
- }
- pop @v while (@v && $v[-1] eq '');
-
- # Strip longest common leading indent from text.
- my $ws = "";
- foreach my $ls (map {/^(\s+)/} @v[1..$#v]) {
- $ws = $ls if (!$ws || length($ls) < length($ws));
- }
- s/^$ws// foreach @v;
-
- push(@$o, $f) unless exists $k->{$f};
- vpush($k, $f, join("\n", @v));
-
- $state = 1;
- }
- elsif ($line !~ /^#/) {
- # We've found a syntax error, so we'll reconstruct the
- # form parsed thus far, and add an error marker. (>>)
- $state = -1;
- $e = Form::compose([[ "", $o, $k, "" ]]);
- $e.= $line =~ /^>>/ ? "$line\n" : ">> $line\n";
- }
- }
- else {
- # We saw a syntax error earlier, so we'll accumulate the
- # contents of this form until the end.
- $e .= "$line\n";
- }
- }
- push(@forms, [ $c, $o, $k, $e ]) if ($e || $c || @$o);
-
- foreach my $l (keys %$k) {
- $k->{$l} = vsplit($k->{$l}) if (ref $k->{$l} eq 'ARRAY');
- }
-
- return \@forms;
-}
-
-# Returns text representing a set of forms.
-sub Form::compose {
- my ($forms) = @_;
- my @text;
-
- foreach my $form (@$forms) {
- my ($c, $o, $k, $e) = @$form;
- my $text = "";
-
- if ($c) {
- $c =~ s/\n*$/\n/;
- $text = "$c\n";
- }
- if ($e) {
- $text .= $e;
- }
- elsif ($o) {
- my @lines;
-
- foreach my $key (@$o) {
- my ($line, $sp);
- my $v = $k->{$key};
- my @values = ref $v eq 'ARRAY' ? @$v : $v;
-
- $sp = " "x(length("$key: "));
- $sp = " "x4 if length($sp) > 16;
-
- foreach $v (@values) {
- if ($v =~ /\n/) {
- $v =~ s/^/$sp/gm;
- $v =~ s/^$sp//;
-
- if ($line) {
- push @lines, "$line\n\n";
- $line = "";
- }
- elsif (@lines && $lines[-1] !~ /\n\n$/) {
- $lines[-1] .= "\n";
- }
- push @lines, "$key: $v\n\n";
- }
- elsif ($line &&
- length($line)+length($v)-rindex($line, "\n") >= 70)
- {
- $line .= ",\n$sp$v";
- }
- else {
- $line = $line ? "$line,$v" : "$key: $v";
- }
- }
-
- $line = "$key:" unless @values;
- if ($line) {
- if ($line =~ /\n/) {
- if (@lines && $lines[-1] !~ /\n\n$/) {
- $lines[-1] .= "\n";
- }
- $line .= "\n";
- }
- push @lines, "$line\n";
- }
- }
-
- $text .= join "", @lines;
- }
- else {
- chomp $text;
- }
- push @text, $text;
- }
-
- return join "\n--\n\n", @text;
-}
-
-# Configuration.
-# --------------
-
-# Returns configuration information from the environment.
-sub config_from_env {
- my %env;
-
- foreach my $k (qw(EXTERNALAUTH DEBUG USER PASSWD SERVER QUERY ORDERBY)) {
-
- if (exists $ENV{"RT$k"}) {
- $env{lc $k} = $ENV{"RT$k"};
- }
- }
-
- return %env;
-}
-
-# Finds a suitable configuration file and returns information from it.
-sub config_from_file {
- my ($rc) = @_;
-
- if ($rc =~ m#^/#) {
- # We'll use an absolute path if we were given one.
- return parse_config_file($rc);
- }
- else {
- # Otherwise we'll use the first file we can find in the current
- # directory, or in one of its (increasingly distant) ancestors.
-
- my @dirs = split /\//, cwd;
- while (@dirs) {
- my $file = join('/', @dirs, $rc);
- if (-r $file) {
- return parse_config_file($file);
- }
-
- # Remove the last directory component each time.
- pop @dirs;
- }
-
- # Still nothing? We'll fall back to some likely defaults.
- for ("$HOME/$rc", "local/etc/rt.conf", "/etc/rt.conf") {
- return parse_config_file($_) if (-r $_);
- }
- }
-
- return ();
-}
-
-# Makes a hash of the specified configuration file.
-sub parse_config_file {
- my %cfg;
- my ($file) = @_;
- local $_; # $_ may be aliased to a constant, from line 1163
-
- open(CFG, '<', $file) && do {
- while (<CFG>) {
- chomp;
- next if (/^#/ || /^\s*$/);
-
- if (/^(externalauth|user|passwd|server|query|orderby|queue)\s+(.*)\s?$/) {
- $cfg{$1} = $2;
- }
- else {
- die "rt: $file:$.: unknown configuration directive.\n";
- }
- }
- };
-
- return %cfg;
-}
-
-# Helper functions.
-# -----------------
-
-sub whine {
- my $sub = (caller(1))[3];
- $sub =~ s/^main:://;
- warn "rt: $sub: @_\n";
- return 0;
-}
-
-sub read_passwd {
- eval 'require Term::ReadKey';
- if ($@) {
- die "No password specified (and Term::ReadKey not installed).\n";
- }
-
- print "Password: ";
- Term::ReadKey::ReadMode('noecho');
- chomp(my $passwd = Term::ReadKey::ReadLine(0));
- Term::ReadKey::ReadMode('restore');
- print "\n";
-
- return $passwd;
-}
-
-sub vi {
- my ($text) = @_;
- my $file = "/tmp/rt.form.$$";
- my $editor = $ENV{EDITOR} || $ENV{VISUAL} || "vi";
-
- local *F;
- local $/ = undef;
-
- open(F, '>', $file) or die "$file: $!\n"; print F $text; close(F);
- system($editor, $file) && die "Couldn't run $editor.\n";
- open(F, '<', $file) or die "$file: $!\n"; $text = <F>; close(F);
- unlink($file);
-
- return $text;
-}
-
-# Add a value to a (possibly multi-valued) hash key.
-sub vpush {
- my ($hash, $key, $val) = @_;
- my @val = ref $val eq 'ARRAY' ? @$val : $val;
-
- if (exists $hash->{$key}) {
- unless (ref $hash->{$key} eq 'ARRAY') {
- my @v = $hash->{$key} ne '' ? $hash->{$key} : ();
- $hash->{$key} = \@v;
- }
- push @{ $hash->{$key} }, @val;
- }
- else {
- $hash->{$key} = $val;
- }
-}
-
-# "Normalise" a hash key that's known to be multi-valued.
-sub vsplit {
- my ($val) = @_;
- my ($word, @words);
- my @values = ref $val eq 'ARRAY' ? @$val : $val;
-
- foreach my $line (map {split /\n/} @values) {
- # XXX: This should become a real parser, à la Text::ParseWords.
- $line =~ s/^\s+//;
- $line =~ s/\s+$//;
- my ( $a, $b ) = split /\s*,\s*/, $line, 2;
-
- while ($a) {
- no warnings 'uninitialized';
- if ( $a =~ /^'/ ) {
- my $s = $a;
- while ( $a !~ /'$/ || ( $a !~ /(\\\\)+'$/
- && $a =~ /(\\)+'$/ )) {
- ( $a, $b ) = split /\s*,\s*/, $b, 2;
- $s .= ',' . $a;
- }
- push @words, $s;
- }
- elsif ( $a =~ /^q{/ ) {
- my $s = $a;
- while ( $a !~ /}$/ ) {
- ( $a, $b ) =
- split /\s*,\s*/, $b, 2;
- $s .= ',' . $a;
- }
- $s =~ s/^q{/'/;
- $s =~ s/}/'/;
- push @words, $s;
- }
- else {
- push @words, $a;
- }
- ( $a, $b ) = split /\s*,\s*/, $b, 2;
- }
-
-
- }
-
- return \@words;
-}
-
-# WARN: this code is duplicated in lib/RT/Interface/REST.pm
-# change both functions at once
-sub expand_list {
- my ($list) = @_;
-
- my @elts;
- foreach (split /\s*,\s*/, $list) {
- push @elts, /^(\d+)-(\d+)$/? ($1..$2): $_;
- }
-
- return map $_->[0], # schwartzian transform
- sort {
- defined $a->[1] && defined $b->[1]?
- # both numbers
- $a->[1] <=> $b->[1]
- :!defined $a->[1] && !defined $b->[1]?
- # both letters
- $a->[2] cmp $b->[2]
- # mix, number must be first
- :defined $a->[1]? -1: 1
- }
- map [ $_, (defined( /^(\d+)$/ )? $1: undef), lc($_) ],
- @elts;
-}
-
-sub get_type_argument {
- my $type;
-
- if (@ARGV) {
- $type = shift @ARGV;
- unless ($type =~ /^[A-Za-z0-9_.-]+$/) {
- # We want whine to mention our caller, not us.
- @_ = ("Invalid type '$type' specified.");
- goto &whine;
- }
- }
- else {
- @_ = ("No type argument specified with -t.");
- goto &whine;
- }
-
- $type =~ s/s$//; # "Plural". Ugh.
- return $type;
-}
-
-sub get_var_argument {
- my ($data) = @_;
-
- if (@ARGV) {
- my $kv = shift @ARGV;
- if (my ($k, $v) = $kv =~ /^($field)=(.*)$/) {
- push @{ $data->{$k} }, $v;
- }
- else {
- @_ = ("Invalid variable specification: '$kv'.");
- goto &whine;
- }
- }
- else {
- @_ = ("No variable argument specified with -S.");
- goto &whine;
- }
-}
-
-sub is_object_spec {
- my ($spec, $type) = @_;
-
- $spec =~ s|^(?:$type/)?|$type/| if defined $type;
- return $spec if ($spec =~ m{^$name/(?:$idlist|$labels)(?:/.*)?$}o);
- return 0;
-}
-
-sub suggest_help {
- 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__
-
-Title: intro
-Title: introduction
-Text:
-
- This is a command-line interface to RT 3.0 or newer.
-
- It allows you to interact with an RT server over HTTP, and offers an
- interface to RT's functionality that is better-suited to automation
- and integration with other tools.
-
- In general, each invocation of this program should specify an action
- to perform on one or more objects, and any other arguments required
- to complete the desired action.
-
- For more information:
-
- - rt help usage (syntax information)
- - rt help objects (how to specify objects)
- - rt help actions (a list of possible actions)
- - rt help types (a list of object types)
-
- - rt help config (configuration details)
- - rt help examples (a few useful examples)
- - rt help topics (a list of help topics)
-
---
-
-Title: usage
-Title: syntax
-Text:
-
- Syntax:
-
- rt <action> [options] [arguments]
- or
- rt shell
-
- Each invocation of this program must specify an action (e.g. "edit",
- "create"), options to modify behaviour, and other arguments required
- by the specified action. (For example, most actions expect a list of
- numeric object IDs to act upon.)
-
- The details of the syntax and arguments for each action are given by
- "rt help <action>". Some actions may be referred to by more than one
- name ("create" is the same as "new", for example).
-
- You may also call "rt shell", which will give you an 'rt>' prompt at
- which you can issue commands of the form "<action> [options]
- [arguments]". See "rt help shell" for details.
-
- Objects are identified by a type and an ID (which can be a name or a
- number, depending on the type). For some actions, the object type is
- implied (you can only comment on tickets); for others, the user must
- specify it explicitly. See "rt help objects" for details.
-
- In syntax descriptions, mandatory arguments that must be replaced by
- appropriate value are enclosed in <>, and optional arguments are
- indicated by [] (for example, <action> and [options] above).
-
- For more information:
-
- - rt help objects (how to specify objects)
- - rt help actions (a list of actions)
- - rt help types (a list of object types)
- - rt help shell (how to use the shell)
-
---
-
-Title: conf
-Title: config
-Title: configuration
-Text:
-
- This program has two major sources of configuration information: its
- configuration files, and the environment.
-
- The program looks for configuration directives in a file named .rtrc
- (or $RTCONFIG; see below) in the current directory, and then in more
- distant ancestors, until it reaches /. If no suitable configuration
- files are found, it will also check for ~/.rtrc, local/etc/rt.conf
- and /etc/rt.conf.
-
- Configuration directives:
-
- The following directives may occur, one per line:
-
- - 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
- - 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
- values defined in configuration files:
-
- - RTUSER
- - RTPASSWD
- - RTEXTERNALAUTH
- - RTSERVER
- - RTDEBUG Numeric debug level. (Set to 3 for full logs.)
- - RTCONFIG Specifies a name other than ".rtrc" for the
- configuration file.
- - RTQUERY Default RT Query for rt list
- - RTORDERBY Default order for rt list
-
---
-
-Title: objects
-Text:
-
- Syntax:
-
- <type>/<id>[/<attributes>]
-
- Every object in RT has a type (e.g. "ticket", "queue") and a numeric
- ID. Some types of objects can also be identified by name (like users
- and queues). Furthermore, objects may have named attributes (such as
- "ticket/1/history").
-
- An object specification is like a path in a virtual filesystem, with
- object types as top-level directories, object IDs as subdirectories,
- and named attributes as further subdirectories.
-
- A comma-separated list of names, numeric IDs, or numeric ranges can
- be used to specify more than one object of the same type. Note that
- the list must be a single argument (i.e., no spaces). For example,
- "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
- ticket/1/attachments/3/content
- ticket/1-3/links
- ticket/1-3,5-7/history
-
- user/ams
- user/ams/rights
- user/ams,rai,1/rights
-
- For more information:
-
- - rt help <action> (action-specific details)
- - rt help <type> (type-specific details)
-
---
-
-Title: actions
-Title: commands
-Text:
-
- You can currently perform the following actions on all objects:
-
- - list (list objects matching some condition)
- - show (display object details)
- - edit (edit object details)
- - create (create a new object)
-
- Each type may define actions specific to itself; these are listed in
- the help item about that type.
-
- For more information:
-
- - 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
-Text:
-
- You can currently operate on the following types of objects:
-
- - tickets
- - users
- - groups
- - queues
-
- For more information:
-
- - rt help <type> (type-specific details)
- - rt help objects (how to specify objects)
- - rt help actions (a list of possible actions)
-
---
-
-Title: ticket
-Text:
-
- Tickets are identified by a numeric ID.
-
- The following generic operations may be performed upon tickets:
-
- - list
- - show
- - edit
- - create
-
- In addition, the following ticket-specific actions exist:
-
- - link
- - merge
- - comment
- - correspond
- - take
- - steal
- - untake
- - give
- - resolve
- - delete
- - subject
-
- Attributes:
-
- The following attributes can be used with "rt show" or "rt edit"
- to retrieve or edit other information associated with tickets:
-
- links A ticket's relationships with others.
- history All of a ticket's transactions.
- history/type/<type> Only a particular type of transaction.
- history/id/<id> Only the transaction of the specified id.
- attachments A list of attachments.
- attachments/<id> The metadata for an individual attachment.
- attachments/<id>/content The content of an individual attachment.
-
---
-
-Title: user
-Title: group
-Text:
-
- Users and groups are identified by name or numeric ID.
-
- The following generic operations may be performed upon them:
-
- - list
- - show
- - edit
- - create
-
- In addition, the following type-specific actions exist:
-
- - grant
- - revoke
-
- Attributes:
-
- The following attributes can be used with "rt show" or "rt edit"
- to retrieve or edit other information associated with users and
- groups:
-
- rights Global rights granted to this user.
- rights/<queue> Queue rights for this user.
-
---
-
-Title: queue
-Text:
-
- Queues are identified by name or numeric ID.
-
- Currently, they can be subjected to the following actions:
-
- - show
- - edit
- - create
-
---
-
-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:
-
- Syntax:
-
- rt logout
-
- Terminates the currently established login session. You will need to
- provide authentication credentials before you can continue using the
- server. (See "rt help config" for details about authentication.)
-
---
-
-Title: ls
-Title: list
-Title: search
-Text:
-
- Syntax:
-
- rt <ls|list|search> [options] "query string"
-
- Displays a list of objects matching the specified conditions.
- ("ls", "list", and "search" are synonyms.)
-
- Conditions are expressed in the SQL-like syntax used internally by
- RT3. (For more information, see "rt help query".) The query string
- must be supplied as one argument.
-
- (Right now, the server doesn't support listing anything but tickets.
- Other types will be supported in future; this client will be able to
- take advantage of that support without any changes.)
-
- Options:
-
- 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.
- -f <field[s] Display only the fields listed and the ticket id
-
- In addition,
-
- -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 -i "Priority > 5"|rt edit - set status=resolved
- rt ls -t ticket "Subject like '[PATCH]%'"
- rt ls -q systems
- rt ls -f owner,subject
-
---
-
-Title: show
-Text:
-
- Syntax:
-
- rt show [options] <object-ids>
-
- Displays details of the specified objects.
-
- For some types, object information is further classified into named
- attributes (for example, "1-3/links" is a valid ticket specification
- 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.
-
- Examples:
-
- rt show -t ticket -f id,subject,status 1-3
- rt show ticket/3/attachments/29
- rt show ticket/3/attachments/29/content
- rt show ticket/1-3/links
- rt show ticket/3/history
- rt show -l ticket/3/history
- rt show -t user 2
- rt show 2
-
---
-
-Title: new
-Title: edit
-Title: create
-Text:
-
- Syntax:
-
- rt edit [options] <object-ids> set field=value [field=value] ...
- add field=value [field=value] ...
- del field=value [field=value] ...
-
- 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
- unchanged.
-
- This command typically starts an editor to allow you to edit object
- data in a form for submission. If you specified enough information
- on the command-line, however, it will make the submission directly.
-
- The command line may specify field-values in three different ways.
- "set" sets the named field to the given value, "add" adds a value
- to a multi-valued field, and "del" deletes the corresponding value.
- Each "field=value" specification must be given as a single argument.
-
- For some types, object information is further classified into named
- attributes (for example, "1-3/links" is a valid ticket specification
- that refers to the links for tickets 1-3). These attributes may also
- be edited. Consult "rt help <type>" and "rt help object" for further
- details.
-
- Options:
-
- - Read numeric IDs from STDIN instead of the command-line.
- (Useful with rt ls ... | rt edit -; see examples below.)
- -i Read a completed form from STDIN before submitting.
- -o Dump the completed form to STDOUT instead of submitting.
- -e Allows you to edit the form even if the command-line has
- enough information to make a submission directly.
- -S var=val
- Submits the specified variable with the request.
- -t type Specifies object type.
-
- Examples:
-
- # Interactive (starts $EDITOR with a form).
- rt edit ticket/3
- rt create -t ticket
-
- # Non-interactive.
- 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
- rt create -t ticket set subject='new ticket' priority=10 \
- add cc=foo@example.com
-
---
-
-Title: comment
-Title: correspond
-Text:
-
- Syntax:
-
- rt <comment|correspond> [options] <ticket-id>
-
- Adds a comment (or correspondence) to the specified ticket (the only
- difference being that comments aren't sent to the requestors.)
-
- This command will typically start an editor and allow you to type a
- comment into a form. If, however, you specified all the necessary
- information on the command line, it submits the comment directly.
-
- (See "rt help forms" for more information about forms.)
-
- Options:
-
- -m <text> Specify comment text.
- -a <file> Attach a file to the comment. (May be used more
- than once to attach multiple files.)
- -c <addrs> A comma-separated list of Cc addresses.
- -b <addrs> A comma-separated list of Bcc addresses.
- -w <time> Specify the time spent working on this ticket.
- -e Starts an editor before the submission, even if
- arguments from the command line were sufficient.
-
- Examples:
-
- rt comment -m 'Not worth fixing.' -a stddisclaimer.h 23
-
---
-
-Title: merge
-Text:
-
- Syntax:
-
- rt merge <from-id> <to-id>
-
- Merges the first ticket specified into the second ticket specified.
-
---
-
-Title: link
-Text:
-
- Syntax:
-
- rt link [-d] <id-A> <link> <id-B>
-
- Creates (or, with -d, deletes) a link between the specified tickets.
- The link can (irrespective of case) be any of:
-
- DependsOn/DependedOnBy: A depends upon B (or vice versa).
- RefersTo/ReferredToBy: A refers to B (or vice versa).
- MemberOf/HasMember: A is a member of B (or vice versa).
-
- To view a ticket's links, use "rt show ticket/3/links". (See
- "rt help ticket" and "rt help show".)
-
- Options:
-
- -d Deletes the specified link.
-
- Examples:
-
- rt link 2 dependson 3
- rt link -d 4 referredtoby 6 # 6 no longer refers to 4
-
---
-
-Title: grant
-Title: revoke
-Text:
-
---
-
-Title: query
-Text:
-
- RT3 uses an SQL-like syntax to specify object selection constraints.
- See the <RT:...> documentation for details.
-
- (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
-Title: forms
-Text:
-
- This program uses RFC822 header-style forms to represent object data
- in a form that's suitable for processing both by humans and scripts.
-
- A form is a set of (field, value) specifications, with some initial
- commented text and interspersed blank lines allowed for convenience.
- Field names may appear more than once in a form; a comma-separated
- list of multiple field values may also be specified directly.
-
- Field values can be wrapped as in RFC822, with leading whitespace.
- The longest sequence of leading whitespace common to all the lines
- is removed (preserving further indentation). There is no limit on
- the length of a value.
-
- Multiple forms are separated by a line containing only "--\n".
-
- (XXX: A more detailed specification will be provided soon. For now,
- the server-side syntax checking will suffice.)
-
---
-
-Title: topics
-Text:
-
- Syntax:
-
- rt help <topic>
-
- Get help on any of the following subjects:
-
- - tickets, users, groups, queues.
- - show, edit, ls/list/search, new/create.
-
- - query (search query syntax)
- - forms (form specification)
-
- - objects (how to specify objects)
- - types (a list of object types)
- - actions/commands (a list of actions)
- - usage/syntax (syntax details)
- - conf/config/configuration (configuration details)
- - examples (a few useful examples)
-
---
-
-Title: example
-Title: examples
-Text:
-
- 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
-
---
-
-Title: shell
-Text:
-
- Syntax:
-
- rt shell
-
- Opens an interactive shell, at which you can issue commands of
- the form "<action> [options] [arguments]".
-
- To exit the shell, type "quit" or "exit".
-
- Commands can be given at the shell in the same form as they would
- be given at the command line without the leading 'rt' invocation.
-
- Example:
- $ rt shell
- rt> create -t ticket set subject='new' add cc=foo@example.com
- # Ticket 8 created.
- rt> quit
- $
-
---
-
-Title: take
-Title: untake
-Title: steal
-Text:
-
- Syntax:
-
- rt <take|untake|steal> <ticket-id>
-
- Sets the owner of the specified ticket to the current user,
- assuming said user has the bits to do so, or releases the
- ticket.
-
- 'Take' is used on tickets which are not currently owned
- (Owner: Nobody), 'steal' is used on tickets which *are*
- currently owned, and 'untake' is used to "release" a ticket
- (reset its Owner to Nobody). 'Take' cannot be used on
- tickets which are currently owned.
-
- Example:
- alice$ rt create -t ticket set subject="New ticket"
- # Ticket 7 created.
- alice$ rt take 7
- # Owner changed from Nobody to alice
- alice$ su bob
- bob$ rt steal 7
- # Owner changed from alice to bob
- bob$ rt untake 7
- # Owner changed from bob to Nobody
-
---
-
-Title: quit
-Title: exit
-Text:
-
- Use "quit" or "exit" to leave the shell. Only valid within shell
- mode.
-
- Example:
- $ rt shell
- rt> quit
- $
diff --git a/rt/bin/rt-commit-handler b/rt/bin/rt-commit-handler
index 29e443ebd..bf23a6c0b 100644
--- a/rt/bin/rt-commit-handler
+++ b/rt/bin/rt-commit-handler
@@ -26,7 +26,7 @@
# {{{ Docs
# -*-Perl-*-
#
-#ident "@(#)ccvs/contrib:$Name: $:$Id: rt-commit-handler,v 1.1 2003-07-15 13:16:15 ivan Exp $"
+#ident "@(#)ccvs/contrib:$Name: $:$Id: rt-commit-handler,v 1.2 2007-08-01 22:20:32 ivan Exp $"
#
# Perl filter to handle the log messages from the checkin of files in multiple
# directories. This script will group the lists of files by log message, and
diff --git a/rt/bin/rt-commit-handler.in b/rt/bin/rt-commit-handler.in
deleted file mode 100644
index 02b01abff..000000000
--- a/rt/bin/rt-commit-handler.in
+++ /dev/null
@@ -1,846 +0,0 @@
-#!@PERL@ -w
-# BEGIN LICENSE BLOCK
-#
-# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-#
-# (Except where explictly superceded by other copyright notices)
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# Unless otherwise specified, all modifications, corrections or
-# extensions to this work which alter its source code become the
-# property of Best Practical Solutions, LLC when submitted for
-# inclusion in the work.
-#
-#
-# END LICENSE BLOCK
-
-# {{{ Docs
-# -*-Perl-*-
-#
-#ident "@(#)ccvs/contrib:$Name: $:$Id: rt-commit-handler.in,v 1.1 2003-07-15 13:16:15 ivan Exp $"
-#
-# Perl filter to handle the log messages from the checkin of files in multiple
-# directories. This script will group the lists of files by log message, and
-# send one piece of mail per unique message, no matter how many files are
-# committed.
-
-=head1 NAME rt-commit-handler
-
-=head1 USAGE
-
-
-
-=head2 Regular use
-
-Stick the following in in CVSROOT/commitinfo
-
- ALL @RT_BIN_PATH@/rt-commit-handler --record-last-dir
-
-Stick the following in CVSROOT/loginfo
-
- ALL @RT_BIN_PATH@/rt-commit-handler --cvs-root /pathtocvs/root --rt %{Vvts}
-
-=head2 Invocation (advanced use)
-
-rt-commit-handler --cvs-root /path/to/cvs/root [-d] [-D] [-r] [-M module] \
- [[-m mailto] ...] [[-R replyto] ...] [-f logfile]
-
-
- -d - turn on debugging
- -m mailto - send mail to "mailto" (multiple)
- -R replyto - set the "Reply-To:" to "replyto" (multiple)
- -M modulename - set module name to "modulename"
- -f logfile - write commit messages to logfile too
- -D - generate diff commands
- --rt - invoke RT commit handler
- --cvs-root - specify your CVS root
-
- --record-last-dir - Record the last directory with changes in
- pre-commit (commitinfo) mode
-
-
-=cut
-
-# }}}
-
-use strict;
-use Carp;
-use Getopt::Long;
-use Text::Wrap;
-use Digest::MD5;
-use MIME::Entity;
-
-use lib ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@");
-
-use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc);
-
-use vars
- qw(@MAILER $TMPDIR $FILE_PREFIX $LASTDIR_FILE $HASH_FILE $VERSION_FILE $MESSAGE_FILE $MAIL_FILE $DEBUG $MAILTO $REPLYTO $id $MODULE_NAME
- $LOGIN $COMMITLOG $CVS_ROOT $RT_HANDLER);
-
-#Clean out all the nasties from the environment
-CleanEnv();
-
-#Load etc/config.pm and drop privs
-RT::LoadConfig();
-
-#Drop setgid permissions
-RT::DropSetGIDPermissions();
-
-# {{{ Variable setup
-$TMPDIR = '/tmp';
-$FILE_PREFIX = $TMPDIR . '/#cvs.';
-
-# The root of your CVS install. we should get this from some smarter place.
-# It needs a trailing /
-
-$LASTDIR_FILE = $FILE_PREFIX . "lastdir";
-$HASH_FILE = $FILE_PREFIX . "hash";
-$VERSION_FILE = $FILE_PREFIX . "version";
-$MESSAGE_FILE = $FILE_PREFIX . "message";
-$MAIL_FILE = $FILE_PREFIX . "mail";
-
-$DEBUG = 0;
-$RT_HANDLER = 1;
-
-$MAILTO = '';
-
-my @files = ();
-my (@log_lines);
-my $do_diff = 0;
-my $id = getpgrp(); # note, you *must* use a shell which does setpgrp()
-$LOGIN = getpwuid($<);
-
-# }}}
-
-die "User could not be found" unless ($LOGIN);
-
-# {{{ parse command line arguments (file list is seen as one arg)
-#
-while ( my $arg = shift @ARGV ) {
-
- if ( $arg eq '-d' ) {
- $DEBUG = 1;
- warn "Debug turned on...\n";
- }
- elsif ( $arg =~ /^--record-last-dir$/i ) {
- record_last_dir( $id, $ARGV[0] );
- exit(0);
- }
- elsif ( $arg eq '-m' ) {
- $MAILTO .= ", " if $MAILTO;
- $MAILTO .= shift @ARGV;
- }
- elsif ( $arg eq '--rt' ) {
- $RT_HANDLER = 1;
- }
- elsif ( $arg eq '-R' ) {
- $REPLYTO .= ", " if $REPLYTO;
- $REPLYTO .= shift @ARGV;
- }
- elsif ( $arg eq '-M' ) {
- die ("too many '-M' args\n") if $MODULE_NAME;
- $MODULE_NAME = shift @ARGV;
- }
- elsif ( $arg eq '--cvs-root' ) {
- $CVS_ROOT = shift @ARGV;
- $CVS_ROOT .= "/" unless ( $CVS_ROOT =~ /\/$/ );
- }
- elsif ( $arg eq '-f' ) {
- die ("too many '-f' args\n") if $COMMITLOG;
- $COMMITLOG = shift @ARGV;
-
- # This is a disgusting hack to untaint $COMMITLOG if we're running from
- # setgid cvs.
- $COMMITLOG = untaint($COMMITLOG);
- }
- elsif ( $arg eq '-D' ) {
- $do_diff = 1;
- }
- else {
- @files = split ( ' ', $arg );
- last;
- }
-}
-
-# }}}
-
-$REPLYTO = $LOGIN unless ($REPLYTO);
-
-# for now, the first "file" is the repository directory being committed,
-# relative to the $CVSROOT location
-#
-my $dir = shift @files;
-
-# XXX there are some ugly assumptions in here about module names and
-# XXX directories relative to the $CVSROOT location -- really should
-# XXX read $CVSROOT/CVSROOT/modules, but that's not so easy to do, since
-# XXX we have to parse it backwards.
-#
-# XXX For now we set the `module' name to the top-level directory name.
-#
-unless ($MODULE_NAME) {
- ($MODULE_NAME) = split ( '/', $dir, 2 );
-}
-
-if ($DEBUG) {
- warn "module - ", $MODULE_NAME, "\n";
- warn "dir - ", $dir, "\n";
- warn "files - ", join ( " ", @files ), "\n";
- warn "id - ", $id, "\n";
-}
-
-# {{{ Check for a new directory or an import command.
-
-#
-# files[0] - "-"
-# files[1] - "New"
-# files[2] - "directory"
-#
-# files[0] - "-"
-# files[1] - "Imported"
-# files[2] - "sources"
-#
-if ( $files[0] eq "-" ) {
-
- #we just don't care about New Directory notes
- unless ( $files[1] eq "New" && $files[2] eq "directory" ) {
-
- my @text = ();
-
- push @text, build_header();
- push @text, "";
-
- while ( my $line = <STDIN> ) {
- chop $line; # Drop the newline
- push @text, $line;
- }
-
- append_logfile( $COMMITLOG, @text ) if ($COMMITLOG);
-
- mail_notification( $id, @text );
- }
-
- exit 0;
-}
-
-# }}}
-
-# {{{ Collect just the log message from stdin.
-#
-
-while ( my $line = <STDIN> ) {
- chop $line; # strip the newline
- last if ( $line =~ /^Log Message:$/ );
-}
-while ( my $line = <STDIN> ) {
- chop $line; # strip the newline
- $line =~ s/\s+$//; # strip trailing white space
- push @log_lines, $line;
-}
-
-my $md5 = Digest::MD5->new();
-foreach my $line (@log_lines) {
- $md5->add( $line . "\n" );
-}
-my $hash = $md5->hexdigest();
-
-warn "hash = $hash\n" if ($DEBUG);
-
-if ( !-e "$MESSAGE_FILE.$id.$hash" ) {
- append_logfile( "$HASH_FILE.$id", $hash );
- write_file( "$MESSAGE_FILE.$id.$hash", @log_lines );
-}
-
-# }}}
-
-# Spit out the information gathered in this pass.
-
-append_logfile( "$VERSION_FILE.$id.$hash", $dir . '/', @files );
-
-# {{{ Check whether this is the last directory. If not, quit.
-
-warn "Checking current dir against last dir $LASTDIR_FILE.$id\n" if ($DEBUG);
-
-my @last_dir = read_file("$LASTDIR_FILE.$id");
-
-unless ($CVS_ROOT) {
- die "No cvs root specified with --cvs-root. Can't continue.";
-}
-
-if ( $last_dir[0] ne $CVS_ROOT . $dir ) {
- warn "Current directory $CVS_ROOT$dir is not last directory $last_dir[0].\n"
- if ($DEBUG);
- exit 0;
-}
-
-# }}}
-
-# {{{ End Of Commits!
-#
-
-# This is it. The commits are all finished. Lump everything together
-# into a single message, fire a copy off to the mailing list, and drop
-# it on the end of the Changes file.
-#
-
-#
-# Produce the final compilation of the log messages
-#
-
-my @hashes = read_file("$HASH_FILE.$id");
-my (@text);
-
-push @text, build_header();
-push @text, "";
-
-my ( @added_files, @modified_files, @removed_files );
-
-foreach my $hash (@hashes) {
-
- # In case we're running setgid, make sure the hash file hasn't been hacked.
- $hash =~ m/([a-z0-9]*)/ || die "*** Hacking attempt detected\n";
- $hash = $1;
-
- my @files = read_file("$VERSION_FILE.$id.$hash");
- my @log_lines = read_file("$MESSAGE_FILE.$id.$hash");
-
- my $working_on_dir; # gets set as we iterate through the files.
- foreach my $file (@files) {
-
- #If we've entered a new directory, make a note of that and remove the trailing /
-
- if ( $file =~ s'\/$'' ) {
- $working_on_dir = $file;
- next;
- }
-
- my @file_entry = ( split ( ',', $file, 4 ), $working_on_dir );
-
- # file_entry looks like ths:
-
- # 0 1 2 3 4
- # Old rev : new rev : tag: file :directory
- my $entry = {};
- $entry->{'old'} = $file_entry[0];
- $entry->{'new'} = $file_entry[1];
- $entry->{'tag'} = $file_entry[2];
- $entry->{'file'} = $file_entry[3];
- $entry->{'dir'} = $file_entry[4];
-
- if ( $file_entry[0] eq 'NONE' ) {
- $entry->{'old'} = '0';
- push @added_files, $entry;
- }
- elsif ( $file_entry[1] eq 'NONE' ) {
- $entry->{'new'} = '0';
- push @removed_files, $entry;
- }
- else {
- push @modified_files, $entry;
- }
- }
-}
-
-# }}}
-
-# {{{ start building up the body
-
-# Strip leading and trailing blank lines from the log message. Also
-# compress multiple blank lines in the body of the message down to a
-# single blank line.
-#
-
-my $blank = 1;
-@log_lines = map {
- my $wasblank = $blank;
- $blank = $_ eq '';
- $blank && $wasblank ? () : $_;
-} @log_lines;
-
-pop @log_lines if $blank;
-
-@modified_files = order_and_summarize_diffs(@modified_files);
-@added_files = order_and_summarize_diffs(@added_files);
-@removed_files = order_and_summarize_diffs(@removed_files);
-
-push @text, "Modified Files:", format_lists(@modified_files)
- if (@modified_files);
-
-push @text, "Added Files:", format_lists(@added_files) if (@added_files);
-
-push @text, "Removed Files:", format_lists(@removed_files) if (@removed_files);
-
-push @text, "", "Log Message", @log_lines if (@log_lines);
-
-push @text, "";
-
-if ($RT_HANDLER) {
- rt_handler(
- @log_lines, "\n",
- loc("To generate a diff of this commit:\n"), "\n",
- format_diffs( @modified_files, @added_files, @removed_files )
- );
-}
-
-if ($COMMITLOG) {
- append_logfile( $COMMITLOG, @text );
-}
-
-if ($do_diff) {
- push @text, "";
- push @text, loc("To generate a diff of this commit:");
- push @text, format_diffs( @modified_files, @added_files, @removed_files );
- push @text, "";
-}
-
-# }}}
-
-# {{{ Mail out the notification.
-
-mail_notification( $id, @text );
-
-# }}}
-
-# {{{ clean up
-
-unless ($DEBUG) {
- $hash = untaint($hash);
- $id = untaint($id);
- unlink "$VERSION_FILE.$id.$hash";
- unlink "$MESSAGE_FILE.$id.$hash";
- unlink "$MAIL_FILE.$id";
- unlink "$LASTDIR_FILE.$id";
- unlink "$HASH_FILE.$id";
-}
-
-# }}}
-
-exit 0;
-
-# {{{ Subroutines
-#
-
-# {{{ append_logfile
-sub append_logfile {
- my $filename = shift;
- my (@lines) = @_;
-
- $filename = untaint($filename);
-
- open( FILE, ">>$filename" )
- || die ("Cannot open file $filename for append.\n");
- foreach my $line (@lines) {
- print FILE $line . "\n";
- }
- close(FILE);
-}
-
-# }}}
-
-# {{{ write_file
-sub write_file {
- my $filename = shift;
- my (@lines) = @_;
-
- $filename = untaint($filename);
-
- open( FILE, ">$filename" )
- || die ("Cannot open file $filename for write.\n");
- foreach my $line (@lines) {
- print FILE $line . "\n";
- }
- close(FILE);
-}
-
-# }}}
-
-# {{{ read_file
-sub read_file {
- my $filename = shift;
- my (@lines);
-
- open( FILE, "<$filename" )
- || die ("Cannot open file $filename for read.\n");
- while ( my $line = <FILE> ) {
- chop $line;
- push @lines, $line;
- }
- close(FILE);
-
- return (@lines);
-}
-
-# }}}
-
-# {{{ sub format_lists
-
-sub format_lists {
- my @items = (@_);
-
- my $files = "";
- map {
- $_->{'files'} && ( $files .= ' ' . join ( ' ', @{ $_->{'files'} } ) );
- } @items;
-
- my @lines = wrap( "\t", "\t\t", $files );
- return (@lines);
-
-}
-
-# }}}
-
-# {{{ sub format_diffs
-
-sub format_diffs {
- my @items = (@_);
-
- my @lines;
- foreach my $item (@items) {
- next unless ( $item->{'files'} );
- push ( @lines,
- "cvs diff -r"
- . $item->{'old'} . " -r"
- . $item->{'new'} . " "
- . join ( " ", @{ $item->{'files'} } ) . "\n" );
-
- }
-
- @lines = fill( "\t", "\t\t", @lines );
-
- return (@lines);
-}
-
-# }}}
-
-# {{{ sub order_and_summarize_diffs {
-
-# takes an array of file items
-# returns a sorted array of fileset items, which are like file items, except they can have an array of files, rather than
-# a singleton file.
-
-sub order_and_summarize_diffs {
-
- my @files = (@_);
-
- # Sort by tag, dir, file.
- @files = sort {
- $a->{'tag'} cmp $b->{'tag'}
- || $a->{'dir'} cmp $b->{'dir'}
- || $a->{'file'} cmp $b->{'file'};
- } @files;
-
- # Combine adjacent rows that are the same modulo the file name.
-
- my @items = (undef);
-
- foreach my $file (@files) {
- if ( $#items == -1 #if it's empty
- || ( !defined $items[-1]->{'old'}
- || $items[-1]->{'old'} ne $file->{'old'} )
- || ( !defined $items[-1]->{'new'}
- || $items[-1]->{'new'} ne $file->{'new'} )
- || ( !defined $items[-1]->{'tag'}
- || $items[-1]->{'tag'} ne $file->{'tag'} ) )
- {
-
- push ( @items, $file );
- }
- push ( @{ $items[-1]->{'files'} },
- $file->{'dir'} . "/" . $file->{'file'} );
- }
-
- return (@items);
-}
-
-# }}}
-
-# {{{ build_header
-
-sub build_header {
- my $now = gmtime;
- my $header =
- sprintf( "Module Name:\t%s\nCommitted By:\t%s\nDate:\t\t%s %s %s",
- $MODULE_NAME, $LOGIN, substr( $now, 0, 19 ), "UTC",
- substr( $now, 20, 4 ) );
- return ($header);
-}
-
-# }}}
-
-# {{{ mail_notification
-sub mail_notification {
- my $id = shift;
- my (@text) = @_;
- write_file( "$MAIL_FILE.$id", "From: " . $LOGIN,
- "Subject: CVS commit: " . $MODULE_NAME, "To: " . $MAILTO,
- "Reply-To: " . $REPLYTO, "", "", @text );
-
- my $entity = MIME::Entity->build(
- From => $LOGIN,
- To => $MAILTO,
- Subject => "CVS commit: " . $MODULE_NAME,
- 'Reply-To' => $REPLYTO,
- Data => join ( "\n", @text )
- );
- if ( $RT::MailCommand eq 'sendmailpipe' ) {
- open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" )
- || die "Couldn't send mail: " . $@ . "\n";
- print MAIL $entity->as_string;
- close(MAIL);
- }
- else {
- $entity->send( $RT::MailCommand, $RT::MailParams );
- }
-
-}
-
-# }}}
-
-# {{{ sub record_last_dir
-
-sub record_last_dir {
- my $id = shift;
- my $dir = shift;
-
- # make a note of this directory. later, we'll use this to
- # figure out if we've gone through the whole commit,
- # for something that is a bad mockery of attomic commits.
-
- warn "about to write $dir to $LASTDIR_FILE.$id" if ($DEBUG);
-
- write_file( "$LASTDIR_FILE.$id", $dir );
-}
-
-# }}}
-
-# {{{ Get the RT stuff set up
-
-# {{{ sub rt_handler
-
-sub rt_handler {
- my (@LogMessage) = (@_);
-
- #Connect to the database and get RT::SystemUser and RT::Nobody loaded
- RT::Init;
-
- require RT::Ticket;
-
- #Get the current user all loaded
- my $CurrentUser = GetCurrentUser();
-
- if ( !$CurrentUser->Id ) {
- print
-loc("No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\n");
- return;
- }
-
- my (@commands) = find_commands( \@LogMessage );
-
- my ( @tickets, @errors );
-
- # Get the list of tickets we're working with out of commands
- grep { $_ =~ /^RT-Ticket:\s*(.*?)$/i && push ( @tickets, $1 ) } @commands;
-
- my $message = new MIME::Entity;
- $message->build(
- From => $CurrentUser->EmailAddress,
- Subject => 'CVS Commit',
- Data => \@LogMessage
- );
-
- # {{{ comment or correspond, as needed
-
- foreach my $ticket (@tickets) {
- my $TicketObj = RT::Ticket->new($CurrentUser);
- $TicketObj->Load($ticket);
- my ( $id, $msg );
- unless ( $TicketObj->Id ) {
- push ( @errors,
-"Couldn't load ticket #$ticket. Not adding commit log to ticket history.\n"
- );
- }
-
- if ( $LogMessage[0] =~ /^(comment|private)$/ ) {
- ( $id, $msg ) = $TicketObj->Comment( MIMEObj => $message );
-
- }
- else {
- ( $id, $msg ) = $TicketObj->Correspond( MIMEObj => $message );
- }
-
- push ( @errors, ">> Log message",
- "Ticket #" . $TicketObj->Id . ": " . $msg );
-
- }
-
- # }}}
-
- my ($reply) = ActOnPseudoHeaders( $CurrentUser, @commands );
- print "$reply\n" if ($reply);
- print join ( "\n", @errors );
- print "\n";
-
-}
-
-# }}}
-
-# {{{ sub find_commands
-
-sub find_commands {
- my $lines = shift;
- my (@pseudoheaders);
-
- while ( my $line = shift @{$lines} ) {
- next if $line =~ /^\s*?$/;
- if ( $line =~ /^RT-/i ) {
-
- push ( @pseudoheaders, $line );
- }
-
- #If we find a line that's not a command, get out.
- else {
- unshift ( @{$lines}, $line );
- last;
- }
- }
-
- return (@pseudoheaders);
-
-}
-
-# }}}
-
-# {{{ sub ActOnPseudoHeaders
-
-=item ActOnPseudoHeaders $PseudoHeaders
-
-Takes a string of pseudo-headers, iterates through them and does what they tell it to.
-
-=cut
-
-sub ActOnPseudoHeaders {
- my $CurrentUser = shift;
- my (@actions) = (@_);
-
- my $ResultsMessage = '';
- my $Ticket = RT::Ticket->new($CurrentUser);
-
- foreach my $action (@actions) {
- my ($val);
- my $msg = '';
-
- $ResultsMessage .= ">>> $action\n";
-
- if ( $action =~ /^RT-(.*?):\s*(.*)$/i ) {
- my $command = $1;
- my $args = $2;
-
- if ( $command =~ /^ticket$/i ) {
-
- $val = $Ticket->Load($args);
- unless ($val) {
- $ResultsMessage .=
- loc("ERROR: Couldn't load ticket '[_1]': [_2].\n", $1, $msg);
- . loc("Aborting to avoid unintended ticket modifications.\n")
- . loc("The following commands were not proccessed:\n\n")
- . join ( "\n", @actions );
- return ($ResultsMessage);
- }
- $ResultsMessage .= loc("Ticket [_1] loaded\n", $Ticket->Id);
- }
- else {
- unless ( $Ticket->Id ) {
- $ResultsMessage .= loc("No Ticket specified. Aborting ticket ")
- . loc("modifications\n\n")
- . loc("The following commands were not proccessed:\n\n")
- . join ( "\n", @actions );
- return ($ResultsMessage);
- }
-
- # Deal with the basics
- if ( $command =~ /^(Subject|Owner|Status|Queue)$/i ) {
- my $method = 'Set' . ucfirst( lc($1) );
- ( $val, $msg ) = $Ticket->$method($args);
- }
-
- # Deal with the dates
- elsif ( $command =~ /^(due|starts|started|resolved)$/i ) {
- my $method = 'Set' . ucfirst( lc($1) );
- my $date = new RT::Date($CurrentUser);
- $date->Set( Format => 'unknown', Value => $args );
- ( $val, $msg ) = $Ticket->$method( $date->ISO );
- }
-
- # Deal with the watchers
- elsif ( $command =~ /^(requestor|requestors|cc|admincc)$/i ) {
- my $operator = "+";
- my ($type);
- if ( $args =~ /^(\+|\-)(.*)$/ ) {
- $operator = $1;
- $args = $2;
- }
- $type = 'Requestor' if ( $command =~ /^requestor/i );
- $type = 'Cc' if ( $command =~ /^cc/i );
- $type = 'AdminCc' if ( $command =~ /^admincc/i );
-
- my $user = RT::User->new($CurrentUser);
- $user->Load($args);
-
- if ($operator eq '+') {
- ($val, $msg) = $Ticket->AddWatcher( Type => $type,
- PrincipalId => $user->PrincipalId);
- } elsif ($operator eq '-') {
- ($val, $msg) = $Ticket->DeleteWatcher( Type => $type,
- PrincipalId => $user->PrincipalId);
- }
-
- }
- $ResultsMessage .= $msg . "\n";
- }
-
- }
- return ($ResultsMessage);
-
-}
-
-# }}}
-
-# {{{ sub untaint
-sub untaint {
- my $val = shift;
-
- if ( $val =~ /^([-\#\/\w.]+)$/ ) {
- $val = $1; # $data now untainted
- }
- else {
- die loc("Bad data in [_1]", $val); # log this somewhere
- }
- return ($val);
-}
-
-# }}}
-
-=head1 AUTHOR
-
-
-
- rt-commit-handler is a rewritten version of the NetBSD commit handler,
- which was placed in the public domain by Charles Hannum. It bore the following
- authors statement:
-
- Contributed by David Hampton <hampton@cisco.com>
- Hacked greatly by Greg A. Woods <woods@planix.com>
- Rewritten by Charles M. Hannum <mycroft@netbsd.org>
-
-=cut
-
diff --git a/rt/bin/rt-mailgate b/rt/bin/rt-mailgate
index de0529d84..9227a6ee6 100755
--- a/rt/bin/rt-mailgate
+++ b/rt/bin/rt-mailgate
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
@@ -186,7 +186,7 @@ sub write_down_message {
print STDERR "$0: Couldn't create temp file, using memory\n";
print STDERR "error: $@\n" if $@;
- my $message = \do { local (@ARGV, $/); <STDIN> };
+ my $message = \do { local (@ARGV, $/); <> };
unless ( $$message =~ /\S/ ) {
print STDERR "$0: no message passed on STDIN\n";
exit 0;
diff --git a/rt/bin/rt-mailgate.in b/rt/bin/rt-mailgate.in
index c1a57cb3e..10db6ad1e 100644
--- a/rt/bin/rt-mailgate.in
+++ b/rt/bin/rt-mailgate.in
@@ -1,4 +1,4 @@
-#!@PERL@ -w
+#!@PERL@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
@@ -186,7 +186,7 @@ sub write_down_message {
print STDERR "$0: Couldn't create temp file, using memory\n";
print STDERR "error: $@\n" if $@;
- my $message = \do { local (@ARGV, $/); <STDIN> };
+ my $message = \do { local (@ARGV, $/); <> };
unless ( $$message =~ /\S/ ) {
print STDERR "$0: no message passed on STDIN\n";
exit 0;
diff --git a/rt/bin/standalone_httpd b/rt/bin/standalone_httpd
index a307910c1..9488d0a8b 100755
--- a/rt/bin/standalone_httpd
+++ b/rt/bin/standalone_httpd
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
diff --git a/rt/bin/webmux.pl b/rt/bin/webmux.pl
deleted file mode 100755
index 561dec55e..000000000
--- a/rt/bin/webmux.pl
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-local $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need
-local $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'};
-local $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'};
-local $ENV{'ENV'} = '' if defined $ENV{'ENV'};
-local $ENV{'IFS'} = '' if defined $ENV{'IFS'};
-
-package HTML::Mason::Commands;
-our %session;
-
-package RT::Mason;
-
-our ($Nobody, $SystemUser, $Handler, $r);
-
-my $protect_fd;
-
-sub handler {
- ($r) = @_;
-
- if ( !$protect_fd && $ENV{'MOD_PERL'} && exists $ENV{'MOD_PERL_API_VERSION'}
- && $ENV{'MOD_PERL_API_VERSION'} >= 2 && fileno(STDOUT) != 1
- ) {
- # under mod_perl2, STDOUT gets closed and re-opened, however new STDOUT
- # is not on FD #1. In this case next IO operation will occupy this FD
- # and make all system() and open "|-" dangerouse, for example DBI
- # can get this FD for DB connection and system() call will close
- # by putting grabage into the socket
- open( $protect_fd, '>', '/dev/null' )
- or die "Couldn't open /dev/null: $!";
- unless ( fileno($protect_fd) == 1 ) {
- warn "We opened /dev/null to protect FD #1, but descriptor #1 is already occupied";
- }
- }
-
- local $SIG{__WARN__};
- local $SIG{__DIE__};
- RT::InitSignalHandlers();
-
- if ($r->content_type =~ m/^httpd\b.*\bdirectory/i) {
- use File::Spec::Unix;
- # Our DirectoryIndex is always index.html, regardless of httpd settings
- $r->filename( File::Spec::Unix->catfile( $r->filename, 'index.html' ) );
- }
-
- Module::Refresh->refresh if RT->Config->Get('DevelMode');
-
- RT::ConnectToDatabase();
-
- # none of the methods in $r gives us the information we want (most
- # canonicalize /foo/../bar to /bar which is exactly what we want to avoid)
- my (undef, $requested) = split ' ', $r->the_request, 3;
- my $uri = URI->new("http://".$r->hostname.$requested);
- my $path = URI::Escape::uri_unescape($uri->path);
-
- ## Each environment has its own way of handling .. and so on in paths,
- ## so RT consistently forbids such paths.
- if ( $path =~ m{/\.} ) {
- $RT::Logger->crit("Invalid request for ".$path." aborting");
- RT::Interface::Web::Handler->CleanupRequest();
- return 400;
- }
-
- my (%session, $status);
- {
- local $@;
- $status = eval { $Handler->handle_request($r) };
- $RT::Logger->crit( $@ ) if $@;
- }
- undef %session;
-
- RT::Interface::Web::Handler->CleanupRequest();
-
- return $status;
-}
-
-package main;
-
-# check mod_perl version if it's mod_perl
-BEGIN {
- die "RT does not support mod_perl 1.99. Please upgrade to mod_perl 2.0"
- if $ENV{'MOD_PERL'}
- and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:1\.9)};
-}
-
-require CGI;
-CGI->import(qw(-private_tempfiles));
-
-# 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;
- }
-
-}
-
-require RT;
-die "Wrong version of RT $RT::Version found; need 3.8.*"
- unless $RT::VERSION =~ /^3\.8\./;
-RT::LoadConfig();
-if ( RT->Config->Get('DevelMode') ) {
- require Module::Refresh;
-}
-RT::Init();
-
-# check compatibility of the DB
-{
- my $dbh = $RT::Handle->dbh;
- if ( $dbh ) {
- my ($status, $msg) = $RT::Handle->CheckCompatibility( $dbh, 'post' );
- die $msg unless $status;
- }
-}
-
-require RT::Interface::Web::Handler;
-$RT::Mason::Handler = RT::Interface::Web::Handler->new(
- RT->Config->Get('MasonParameters')
-);
-
-# load more for mod_perl before forking
-RT::InitClasses( Heavy => 1 ) if $ENV{'MOD_PERL'} || $ENV{RT_WEBMUX_HEAVY_LOAD};
-
-# we must disconnect DB before fork
-$RT::Handle->dbh(undef);
-undef $RT::Handle;
-
-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.
- #
- # We can't do this in FastCGI or we'll blow away the component
- # root _every_ time a new server starts which happens every few
- # hits.
-
- require File::Path;
- require File::Glob;
- my @files = File::Glob::bsd_glob("$RT::MasonDataDir/obj/*");
- File::Path::rmtree([ @files ], 0, 1) if @files;
-}
-
-1;
diff --git a/rt/config b/rt/config
deleted file mode 100644
index b9418a66d..000000000
--- a/rt/config
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * This is the project ``config'' file. It controls many aspects of
- * how Aegis interacts with your project.
- *
- * There are several sections of this file, each dealing with a different
- * aspect of the interaction between Aegis and the tools used to manage
- * yout project.
- */
-
-/*
- * -------------------------------------------------------------------------
- *
- * The build tool is delegated.
- */
-
-/*
- * The build_command field of the config file is used to invoke the relevant
- * build command. The following command tells cook where to find the recipes.
- * The ${s Howto.cook} expands to a path into the baseline during development
- * if the file is not in the change. Look in aesub(5) for more information
- * about command substitutions.
- */
-build_command =
- "";
-
-/* cook -book ${s Howto.cook} search_path=$search_path \
-project=$p change=$c version=$v -star -no-log -action -notouch";
-
-/*
- * The recipes in the User Guide will all remove their targets before
- * constructing them, which qualifies them to use the following entry in the
- * config file. The targets MUST be removed first if this field is true,
- * otherwise the baseline would cease to be self-consistent.
- *
- * Fortunately, Cook has a nifty ``set unlink;'' statement which is
- * placed at the top of the cookbook.
- */
-link_integration_directory = true;
-
-
-/*
- * -------------------------------------------------------------------------
- *
- * The history tool is delegated.
- *
- * The fhist program was written by David I. Bell and is admirably
- * suited to providing a history mechanism with out the "cruft" that
- * SCCS and RCS impose. The fhist program also comes with two other
- * utilities, fcomp and fmerge, which use the same minimal difference
- * algorithm.
- *
- * Please note that the [# edit #] feature needs to be avoided, or the
- * -Fored_Update (-fu) flag needs to be used in addition to the
- * -Conditional_Update (-cu) flag, otherwise updates will complain that
- * ``Input file "XXX" contains edit A instead of B for module "YYY"''
- *
- * The history_create_command and the history_put_command are
- * intentionally identical. This minimizes problems when using
- * branches.
- *
- * The ${quote ...} construct is used to quote filesnames whicg contain
- * shell special characters. A minimum of quoting is performed, so if
- * the filenames do not contail shell special characters, no quotes will
- * be used.
- */
-
-/*
- * This command is used to create a new project history. The command is
- * always executed as the project owner. Note he the source is left in
- * the baseline. The following substitutions are available:
- *
- * ${Input}
- * absolute path of the source file
- * ${History}
- * absolute path of the history file
- *
- * The history_create_command and the history_put_command are
- * intentionally identical. This minimizes problems when using
- * branches.
- */
-history_create_command =
- "fhist ${quote ${basename $input}} -cr -cu -i ${quote $input} \
--p ${quote ${dirname $history}} -r";
-
-/*
- * This command is used to get a specific edit back from history. The
- * command may be executed by developers. The following substitutions
- * are available:
- *
- * ${History}
- * absolute path of the history file
- * ${Edit}
- * edit number, as given by history_query_command
- * ${Output}
- * absolute path of the destination file
- *
- * Note that the destination filename will never look anything like the
- * history source filename, so the -p is essential.
- */
-history_get_command =
- "fhist ${quote ${basename $history}} -e ${quote $e} \
--o ${quote $output} -p ${quote ${dirname $history}}";
-
-/*
- * This command is used to add a new "top-most" entry to the history
- * file. This command is always executed as the project owner. Note
- * that the source file is left in the baseline. The following
- * substitutions are available:
- *
- * ${Input}
- * absolute path of source file
- * ${History}
- * absolute path of history file
- *
- * The history_create_command and the history_put_command are
- * intentionally identical. This minimizes problems when using
- * branches.
- */
-history_put_command =
- "fhist ${quote ${basename $input}} -cr -cu -i ${quote $input} \
--p ${quote ${dirname $history}} -r";
-
-/*
- * This command is used to query what the history mechanism calls the
- * "top-most" edit of a history file. The result may be any arbitrary
- * string, it need not be anything like a number, just so long as it
- * uniquely identifies the edit for use by the history_get_command at a
- * later date. The edit number is to be printed on the standard output.
- * This command may be executed by developers. The following
- * substitutions are available:
- *
- * ${History}
- * absolute path of the history file
- */
-history_query_command =
- "fhist ${quote ${basename $history}} -l 0 \
--p ${quote ${dirname $history}} -q";
-
-/*
- * -------------------------------------------------------------------------
- *
- * The difference and merge tools are delegated.
- */
-
-/*
- * Compare two files using fcomp. The -w option produces an output of
- * the entire file, with insertions an deletions marked by "change bars"
- * in the left margin. This is superior to context difference, as it
- * shows the entire file as context. The -s option could be added to
- * compare runs of white space as equal.
- *
- * This command is used by aed(1) to produce a difference listing when
- * file in the development directory was originally copied from the
- * current version in the baseline.
- *
- * All of the command substitutions described in aesub(5) are available.
- * In addition, the following substitutions are also available:
- *
- * ${ORiginal}
- * The absolute path name of a file containing the version
- * originally copied. Usually in the baseline.
- * ${Input}
- * The absolute path name of the edited version of the file.
- * Usually in the development directory.
- * ${Output}
- * The absolute path name of the file in which to write the
- * difference listing. Usually in the development directory.
- *
- * An exit status of 0 means successful, even of the files differ (and
- * they usually do). An exit status which is non-zero means something
- * is wrong.
- *
- * The non-zero exit status may be used to overload this command with
- * extra tests, such as line length limits. The difference files must
- * be produced in addition to these extra tests.
- */
-diff_command =
- "fcomp -w ${quote $original} ${quote $input} -o ${quote $output}";
-
-/*
- * Compare three files using fmerge. Conflicts are marked in the
- * output.
- *
- * This command is used by aed(1) to produce a difference listing when a
- * file in the development directory is out of date compared to the
- * current version in the baseline.
- *
- * All of the command substitutions described in aesub(5) are available.
- * In addition, the following substitutions are also available:
- *
- * ${ORiginal}
- * The absolute path name of a file containing the common ancestor
- * version of ${MostRecent} and {$Input}. Usually the version
- * originally copied into the change. Usually in a temporary file.
- * ${Most_Recent}
- * The absolute path name of a file containing the most recent
- * version. Usually in the baseline.
- * ${Input}
- * The absolute path name of the edited version of the file.
- * Usually in the development directory.
- * ${Output}
- * The absolute path name of the file in which to write the
- * difference listing. Usually in the development directory.
- *
- * An exit status of 0 means successful, even of the files differ (and
- * they usually do). An exit status which is non-zero means something
- * is wrong.
- */
-merge_command =
- "fmerge ${quote $original} ${quote $MostRecent} ${quote $input} \
--o ${quote $output} -c /dev/null";
-
-/*
- * -------------------------------------------------------------------------
- *
- * The new file templates are very handy. They allow all sorts of things
- * to be se automatically. You need to edit them to add your own name,
- * and copyright conditions.
- */
-
-file_template =
-[
- {
- pattern = [ "*" ];
- body = "${read_file ${source etc/template/generic abs}}";
-
- }
-];
-
-/* -------------------------------------------------------------------------
- *
- * The integrate_begin_exceptions are files which are not hard linked
- * from the baseline to the integration directory. In this case, this
- * is done to ensure the version stmp is updated appropriately.
- */
-
-integrate_begin_exceptions = [ ];
-
-
-
-
-/* -------------------------------------------------------------------------
- *
- * The trojan_horse_suspect field is a list of filename patterns which
- * indicate files which *could* host a Trojan horse attack. It makes
- * aedist --receive more cautions. It is NOT a silver bullet: just
- * about ANY file can host a Trojan, one way or the other.
- */
-
-trojan_horse_suspect = [ ];
-
-build_covers_all_architectures = true;
-
-test_command = "make test";
-
-build_time_adjust=dont_adjust;
diff --git a/rt/config.layout b/rt/config.layout.in
index 9c1ce4c87..c1ad96428 100644
--- a/rt/config.layout
+++ b/rt/config.layout.in
@@ -10,7 +10,7 @@
##
## The following variables must _all_ be set:
## prefix exec_prefix bindir sbindir sysconfdir mandir libdir
-## datadir htmldir localstatedir logfiledir masonstatedir fontdir
+## datadir htmldir localstatedir logfiledir masonstatedir
## sessionstatedir customdir customhtmldir customlexdir
## (This can be seen in m4/rt_layout.m4.)
##
@@ -23,11 +23,9 @@
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc
mandir: ${prefix}/man
- plugindir: ${prefix}/plugins
libdir: ${prefix}/lib
datadir: ${prefix}/share
htmldir: ${datadir}/html
- fontdir: ${datadir}/fonts
manualdir: ${datadir}/doc
localstatedir: ${prefix}/var
logfiledir: ${localstatedir}/log
@@ -40,17 +38,15 @@
customlibdir: ${customdir}/lib
</Layout>
<Layout inplace>
- prefix: .
+ prefix: `pwd`
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: ${datadir}/html
- fontdir: ${datadir}/fonts
+ htmldir: ${prefix}/html
manualdir: ${datadir}/doc
localstatedir: ${prefix}/var
logfiledir: ${localstatedir}/log
@@ -63,33 +59,6 @@
customlibdir: ${customdir}/lib
</Layout>
-<Layout FHS>
- prefix: /usr/local
- exec_prefix: ${prefix}
- bindir: ${prefix}/bin
- sbindir: ${prefix}/sbin
- sysconfdir: /etc+
- datadir: ${prefix}/share
-# FIXME: missing support for lib64
- 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
- fontdir: ${datadir}/fonts
- manualdir: ${datadir}/doc
- localstatedir: /var
- logfiledir: ${localstatedir}/log
-# XXX: "/var/cache/mason/*"?
- masonstatedir: ${localstatedir}/cache/mason_data
- sessionstatedir: ${localstatedir}/cache/session_data
- customdir: ${prefix}/local
- custometcdir: ${customdir}/etc
- customhtmldir: ${customdir}/html
- customlexdir: ${customdir}/po
- customlibdir: ${customdir}/lib
-</Layout>
-
<Layout FreeBSD>
prefix: /usr/local
exec_prefix: ${prefix}
@@ -97,11 +66,9 @@
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc+
mandir: ${prefix}/man
- plugindir: ${prefix}/plugins
libdir: ${prefix}/lib+
datadir: ${prefix}/share+
htmldir: ${datadir}/html
- fontdir: ${datadir}/fonts
manualdir: ${prefix}/share/doc+
logfiledir: /var/log
localstatedir: /var/run+
@@ -121,11 +88,9 @@
sbindir: ${exec_prefix}/sbin
sysconfdir: ${prefix}/etc
mandir: ${prefix}/man
- plugindir: ${prefix}/plugins
libdir: ${prefix}/lib
datadir: ${prefix}
htmldir: ${datadir}/html
- fontdir: ${datadir}/fonts
manualdir: ${datadir}/doc
localstatedir: ${prefix}/var
logfiledir: ${localstatedir}/log
@@ -138,52 +103,26 @@
customlibdir: ${customdir}/lib
</Layout>
-# RH path layout.
-<Layout RH>
- prefix: /usr
+<Layout Freeside>
+ prefix: /opt/rt3
exec_prefix: ${prefix}
bindir: ${exec_prefix}/bin
sbindir: ${exec_prefix}/sbin
- sysconfdir: /etc/rt3
+ sysconfdir: ${prefix}/etc
mandir: ${prefix}/man
- libdir: ${prefix}/lib/rt3
- datadir: /var/rt3
- htmldir: ${datadir}/html
- fontdir: ${datadir}/fonts
+ libdir: ${prefix}/lib
+ datadir: ${prefix}/share
+ htmldir: %%%FREESIDE_DOCUMENT_ROOT%%%/rt
manualdir: ${datadir}/doc
- plugindir: ${datadir}/plugins
- localstatedir: /var
- logfiledir: ${localstatedir}/log/rt3
- masonstatedir: ${localstatedir}/rt3/mason_data
- sessionstatedir: ${localstatedir}/rt3/session_data
- customdir: ${prefix}/local/rt3
- custometcdir: ${customdir}/etc
- customhtmldir: ${customdir}/html
- 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
- fontdir: ${datadir}/fonts
- manualdir: ${datadir}/doc
- localstatedir: var
+ localstatedir: ${prefix}/var
logfiledir: ${localstatedir}/log
- masonstatedir: ${localstatedir}/mason_data
+ masonstatedir: %%%MASONDATA%%%
sessionstatedir: ${localstatedir}/session_data
- customdir: local
+ customdir: ${prefix}/local
custometcdir: ${customdir}/etc
customhtmldir: ${customdir}/html
customlexdir: ${customdir}/po
customlibdir: ${customdir}/lib
+ fontdir: ${datadir}/fonts
</Layout>
+
diff --git a/rt/config.log b/rt/config.log
index 3c65cbbf7..636e689d8 100644
--- a/rt/config.log
+++ b/rt/config.log
@@ -1,10 +1,10 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by RT configure 3.8.10, which was
-generated by GNU Autoconf 2.68. Invocation command line was
+It was created by RT configure 3.8.9, which was
+generated by GNU Autoconf 2.65. Invocation command line was
- $ ./configure
+ $ ./configure --enable-layout=Freeside --with-db-type=Pg --with-db-dba=freeside --with-db-database=freeside --with-db-rt-user=freeside --with-db-rt-pass= --with-web-user=freeside --with-web-group=freeside --with-rt-group=freeside
## --------- ##
## Platform. ##
@@ -12,26 +12,26 @@ generated by GNU Autoconf 2.68. Invocation command line was
hostname = transom.local
uname -m = i386
-uname -r = 10.7.0
+uname -r = 10.6.0
uname -s = Darwin
-uname -v = Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386
+uname -v = Darwin Kernel Version 10.6.0: Wed Nov 10 18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386
-/usr/bin/uname -p = i386
+/usr/bin/uname -p = unknown
/bin/uname -X = unknown
/bin/arch = unknown
/usr/bin/arch -k = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo = Mach kernel version:
- Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386
+ Darwin Kernel Version 10.6.0: Wed Nov 10 18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386
Kernel configured for up to 2 processors.
2 processors are physically available.
2 processors are logically available.
Processor type: i486 (Intel 80486)
Processors active: 0 1
Primary memory available: 8.00 gigabytes
-Default processor set: 141 tasks, 509 threads, 2 processors
-Load average: 1.63, Mach factor: 0.74
+Default processor set: 158 tasks, 589 threads, 2 processors
+Load average: 0.94, Mach factor: 1.30
/bin/machine = unknown
/usr/bin/oslevel = unknown
/bin/universe = unknown
@@ -56,110 +56,101 @@ PATH: /usr/sbin
PATH: /sbin
PATH: /usr/local/bin
PATH: /usr/X11/bin
-PATH: /Users/falcone/perl5/perlbrew/bin
-PATH: /Users/falcone/perl5/perlbrew/perls/current/bin
-PATH: /Users/falcone/gitprojects/v/
-PATH: /opt/local/bin
-PATH: /opt/local/sbin
-PATH: /Users/falcone/bin
-PATH: /Users/falcone/ec2/bin
-PATH: /Users/falcone/work/git/git-sync
-PATH: /Users/falcone/work/private-git/git-tools
-PATH: /Users/falcone/Documents//android-sdk-mac_86/tools
## ----------- ##
## Core tests. ##
## ----------- ##
-configure:1995: checking for a BSD-compatible install
-configure:2063: result: /usr/bin/install -c
-configure:2078: checking for gawk
-configure:2094: found /opt/local/bin/gawk
-configure:2105: result: gawk
-configure:2119: checking for perl
-configure:2150: result: /usr/bin/perl
-configure:2515: checking for chosen layout
-configure:2528: result: relative
-configure:2687: checking if user www exists
-configure:2690: result: found
-configure:2711: checking if group www exists
-configure:2714: result: found
-configure:2734: checking if group rt3 exists
-configure:2740: result: not found
-configure:2734: checking if group rt exists
-configure:2740: result: not found
-configure:2734: checking if group www exists
-configure:2737: result: found
-configure:2767: checking if database name is valid
-configure:2770: result: yes
-configure:2861: checking for gcc
-configure:2877: found /usr/bin/gcc
-configure:2888: result: gcc
-configure:3117: checking for C compiler version
-configure:3126: gcc --version >&5
-i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
+configure:1979: checking for a BSD-compatible install
+configure:2047: result: /usr/bin/install -c
+configure:2062: checking for gawk
+configure:2078: found /opt/local/bin/gawk
+configure:2089: result: gawk
+configure:2103: checking for perl
+configure:2121: found /Users/falcone/perl5/perlbrew/bin/perl
+configure:2134: result: /Users/falcone/perl5/perlbrew/bin/perl
+configure:2499: checking for chosen layout
+configure:2512: result: relative
+configure:2671: checking if user www exists
+configure:2674: result: found
+configure:2695: checking if group www exists
+configure:2698: result: found
+configure:2718: checking if group rt3 exists
+configure:2724: result: not found
+configure:2718: checking if group rt exists
+configure:2724: result: not found
+configure:2718: checking if group www exists
+configure:2721: result: found
+configure:2751: checking if database name is valid
+configure:2754: result: yes
+configure:2845: checking for gcc
+configure:2861: found /usr/bin/gcc
+configure:2872: result: gcc
+configure:3101: checking for C compiler version
+configure:3110: gcc --version >&5
+i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-configure:3137: $? = 0
-configure:3126: gcc -v >&5
+configure:3121: $? = 0
+configure:3110: gcc -v >&5
Using built-in specs.
Target: i686-apple-darwin10
-Configured with: /var/tmp/gcc/gcc-5666.3~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
+Configured with: /var/tmp/gcc/gcc-5664~89/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
-gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
-configure:3137: $? = 0
-configure:3126: gcc -V >&5
+gcc version 4.2.1 (Apple Inc. build 5664)
+configure:3121: $? = 0
+configure:3110: gcc -V >&5
gcc-4.2: argument to `-V' is missing
-configure:3137: $? = 1
-configure:3126: gcc -qversion >&5
+configure:3121: $? = 1
+configure:3110: gcc -qversion >&5
i686-apple-darwin10-gcc-4.2.1: no input files
-configure:3137: $? = 1
-configure:3157: checking whether the C compiler works
-configure:3179: gcc conftest.c >&5
-configure:3183: $? = 0
-configure:3231: result: yes
-configure:3234: checking for C compiler default output file name
-configure:3236: result: a.out
-configure:3242: checking for suffix of executables
-configure:3249: gcc -o conftest conftest.c >&5
-configure:3253: $? = 0
-configure:3275: result:
-configure:3297: checking whether we are cross compiling
-configure:3305: gcc -o conftest conftest.c >&5
-configure:3309: $? = 0
-configure:3316: ./conftest
-configure:3320: $? = 0
-configure:3335: result: no
-configure:3340: checking for suffix of object files
-configure:3362: gcc -c conftest.c >&5
-configure:3366: $? = 0
-configure:3387: result: o
-configure:3391: checking whether we are using the GNU C compiler
-configure:3410: gcc -c conftest.c >&5
-configure:3410: $? = 0
-configure:3419: result: yes
-configure:3428: checking whether gcc accepts -g
-configure:3448: gcc -c -g conftest.c >&5
-configure:3448: $? = 0
-configure:3489: result: yes
-configure:3506: checking for gcc option to accept ISO C89
-configure:3570: gcc -c -g -O2 conftest.c >&5
-configure:3570: $? = 0
-configure:3583: result: none needed
-configure:3604: checking for aginitlib in -lgraph
-configure:3629: gcc -o conftest -g -O2 conftest.c -lgraph >&5
+configure:3121: $? = 1
+configure:3141: checking whether the C compiler works
+configure:3163: gcc conftest.c >&5
+configure:3167: $? = 0
+configure:3216: result: yes
+configure:3219: checking for C compiler default output file name
+configure:3221: result: a.out
+configure:3227: checking for suffix of executables
+configure:3234: gcc -o conftest conftest.c >&5
+configure:3238: $? = 0
+configure:3260: result:
+configure:3282: checking whether we are cross compiling
+configure:3290: gcc -o conftest conftest.c >&5
+configure:3294: $? = 0
+configure:3301: ./conftest
+configure:3305: $? = 0
+configure:3320: result: no
+configure:3325: checking for suffix of object files
+configure:3347: gcc -c conftest.c >&5
+configure:3351: $? = 0
+configure:3372: result: o
+configure:3376: checking whether we are using the GNU C compiler
+configure:3395: gcc -c conftest.c >&5
+configure:3395: $? = 0
+configure:3404: result: yes
+configure:3413: checking whether gcc accepts -g
+configure:3433: gcc -c -g conftest.c >&5
+configure:3433: $? = 0
+configure:3474: result: yes
+configure:3491: checking for gcc option to accept ISO C89
+configure:3555: gcc -c -g -O2 conftest.c >&5
+configure:3555: $? = 0
+configure:3568: result: none needed
+configure:3589: checking for aginitlib in -lgraph
+configure:3614: gcc -o conftest -g -O2 conftest.c -lgraph >&5
ld: library not found for -lgraph
collect2: ld returned 1 exit status
-configure:3629: $? = 1
+configure:3614: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "RT"
| #define PACKAGE_TARNAME "rt"
-| #define PACKAGE_VERSION "3.8.10"
-| #define PACKAGE_STRING "RT 3.8.10"
+| #define PACKAGE_VERSION "3.8.9"
+| #define PACKAGE_STRING "RT 3.8.9"
| #define PACKAGE_BUGREPORT "rt-bugs@bestpractical.com"
| #define PACKAGE_URL ""
| /* end confdefs.h. */
@@ -178,21 +169,21 @@ configure: failed program was:
| ;
| return 0;
| }
-configure:3638: result: no
-configure:3664: checking for gdlib-config
-configure:3680: found /opt/local/bin/gdlib-config
-configure:3692: result: yes
-configure:3720: checking for gpg
-configure:3736: found /opt/local/bin/gpg
-configure:3748: result: yes
-configure:4059: creating ./config.status
+configure:3623: result: no
+configure:3649: checking for gdlib-config
+configure:3665: found /opt/local/bin/gdlib-config
+configure:3677: result: yes
+configure:3705: checking for gpg
+configure:3721: found /opt/local/bin/gpg
+configure:3733: result: yes
+configure:4032: creating ./config.status
## ---------------------- ##
## Running config.status. ##
## ---------------------- ##
-This file was extended by RT config.status 3.8.10, which was
-generated by GNU Autoconf 2.68. Invocation command line was
+This file was extended by RT config.status 3.8.9, which was
+generated by GNU Autoconf 2.65. Invocation command line was
CONFIG_FILES =
CONFIG_HEADERS =
@@ -202,36 +193,36 @@ generated by GNU Autoconf 2.68. Invocation command line was
on transom.local
-config.status:869: creating etc/upgrade/3.8-branded-queues-extension
-config.status:869: creating etc/upgrade/3.8-ical-extension
-config.status:869: creating etc/upgrade/split-out-cf-categories
-config.status:869: creating etc/upgrade/generate-rtaddressregexp
-config.status:869: creating etc/upgrade/vulnerable-passwords
-config.status:869: creating sbin/rt-attributes-viewer
-config.status:869: creating sbin/rt-dump-database
-config.status:869: creating sbin/rt-setup-database
-config.status:869: creating sbin/rt-test-dependencies
-config.status:869: creating sbin/rt-email-digest
-config.status:869: creating sbin/rt-email-dashboards
-config.status:869: creating sbin/rt-clean-sessions
-config.status:869: creating sbin/rt-shredder
-config.status:869: creating sbin/rt-validator
-config.status:869: creating sbin/rt-email-group-admin
-config.status:869: creating sbin/rt-server
-config.status:869: creating bin/fastcgi_server
-config.status:869: creating bin/mason_handler.fcgi
-config.status:869: creating bin/mason_handler.scgi
-config.status:869: creating bin/standalone_httpd
-config.status:869: creating bin/rt-crontool
-config.status:869: creating bin/rt-mailgate
-config.status:869: creating bin/rt
-config.status:869: creating Makefile
-config.status:869: creating etc/RT_Config.pm
-config.status:869: creating lib/RT.pm
-config.status:869: creating bin/mason_handler.svc
-config.status:869: creating bin/webmux.pl
-config.status:869: creating t/data/configs/apache2.2+mod_perl.conf
-config.status:869: creating t/data/configs/apache2.2+fastcgi.conf
+config.status:860: creating etc/upgrade/3.8-branded-queues-extension
+config.status:860: creating etc/upgrade/3.8-ical-extension
+config.status:860: creating etc/upgrade/split-out-cf-categories
+config.status:860: creating etc/upgrade/generate-rtaddressregexp
+config.status:860: creating etc/upgrade/vulnerable-passwords
+config.status:860: creating sbin/rt-attributes-viewer
+config.status:860: creating sbin/rt-dump-database
+config.status:860: creating sbin/rt-setup-database
+config.status:860: creating sbin/rt-test-dependencies
+config.status:860: creating sbin/rt-email-digest
+config.status:860: creating sbin/rt-email-dashboards
+config.status:860: creating sbin/rt-clean-sessions
+config.status:860: creating sbin/rt-shredder
+config.status:860: creating sbin/rt-validator
+config.status:860: creating sbin/rt-email-group-admin
+config.status:860: creating sbin/rt-server
+config.status:860: creating bin/fastcgi_server
+config.status:860: creating bin/mason_handler.fcgi
+config.status:860: creating bin/mason_handler.scgi
+config.status:860: creating bin/standalone_httpd
+config.status:860: creating bin/rt-crontool
+config.status:860: creating bin/rt-mailgate
+config.status:860: creating bin/rt
+config.status:860: creating Makefile
+config.status:860: creating etc/RT_Config.pm
+config.status:860: creating lib/RT.pm
+config.status:860: creating bin/mason_handler.svc
+config.status:860: creating bin/webmux.pl
+config.status:860: creating t/data/configs/apache2.2+mod_perl.conf
+config.status:860: creating t/data/configs/apache2.2+fastcgi.conf
## ---------------- ##
## Cache variables. ##
@@ -248,8 +239,8 @@ ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
-ac_cv_env_PERL_set=set
-ac_cv_env_PERL_value=/usr/bin/perl
+ac_cv_env_PERL_set=
+ac_cv_env_PERL_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
@@ -258,14 +249,9 @@ ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_lib_graph_aginitlib=no
ac_cv_objext=o
-ac_cv_path_PERL=/usr/bin/perl
+ac_cv_path_PERL=/Users/falcone/perl5/perlbrew/bin/perl
ac_cv_path_install='/usr/bin/install -c'
ac_cv_prog_AWK=gawk
-ac_cv_prog_RT_GD=yes
-ac_cv_prog_RT_GPG=yes
-ac_cv_prog_ac_ct_CC=gcc
-ac_cv_prog_cc_c89=
-ac_cv_prog_cc_g=yes
## ----------------- ##
## Output variables. ##
@@ -274,167 +260,126 @@ ac_cv_prog_cc_g=yes
APACHECTL='/usr/sbin/apachectl'
AWK='gawk'
BIN_OWNER='root'
-CC='gcc'
-CFLAGS='-g -O2'
-COMMENT_INPLACE_LAYOUT=''
-CONFIG_FILE_PATH='etc'
-CONFIG_FILE_PATH_R='/opt/rt3/etc'
-CPPFLAGS=''
+CONFIG_FILE_PATH='/opt/rt3/etc'
DATABASE_ENV_PREF=''
-DB_DATABASE='rt3'
-DB_DBA='root'
+DB_DATABASE='freeside'
+DB_DBA='freeside'
DB_HOST='localhost'
DB_PORT=''
DB_RT_HOST='localhost'
DB_RT_PASS='rt_pass'
DB_RT_USER='rt_user'
DB_TYPE='mysql'
-DEFS='-DPACKAGE_NAME=\"RT\" -DPACKAGE_TARNAME=\"rt\" -DPACKAGE_VERSION=\"3.8.10\" -DPACKAGE_STRING=\"RT\ 3.8.10\" -DPACKAGE_BUGREPORT=\"rt-bugs@bestpractical.com\" -DPACKAGE_URL=\"\"'
+DEFS='-DPACKAGE_NAME=\"RT\" -DPACKAGE_TARNAME=\"rt\" -DPACKAGE_VERSION=\"3.8.9\" -DPACKAGE_STRING=\"RT\ 3.8.9\" -DPACKAGE_BUGREPORT=\"rt-bugs@bestpractical.com\" -DPACKAGE_URL=\"\"'
ECHO_C='\c'
ECHO_N=''
ECHO_T=''
-EXEEXT=''
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
-LDFLAGS=''
LIBOBJS=''
LIBS=''
LIBS_GROUP='bin'
LIBS_OWNER='root'
-LOCAL_ETC_PATH='local/etc'
-LOCAL_ETC_PATH_R='/opt/rt3/local/etc'
-LOCAL_LEXICON_PATH='local/po'
-LOCAL_LEXICON_PATH_R='/opt/rt3/local/po'
-LOCAL_LIB_PATH='local/lib'
-LOCAL_LIB_PATH_R='/opt/rt3/local/lib'
+LOCAL_ETC_PATH='/opt/rt3/local/etc'
+LOCAL_LEXICON_PATH='/opt/rt3/local/po'
+LOCAL_LIB_PATH='/opt/rt3/local/lib'
LTLIBOBJS=''
-MASON_DATA_PATH='var/mason_data'
-MASON_DATA_PATH_R='/opt/rt3/var/mason_data'
-MASON_HTML_PATH='share/html'
-MASON_HTML_PATH_R='/opt/rt3/share/html'
-MASON_LOCAL_HTML_PATH='local/html'
-MASON_LOCAL_HTML_PATH_R='/opt/rt3/local/html'
-MASON_SESSION_PATH='var/session_data'
-MASON_SESSION_PATH_R='/opt/rt3/var/session_data'
-OBJEXT='o'
+MASON_DATA_PATH='/usr/local/etc/freeside/masondata'
+MASON_HTML_PATH='/var/www/freeside/rt'
+MASON_LOCAL_HTML_PATH='/opt/rt3/local/html'
+MASON_SESSION_PATH='/opt/rt3/var/session_data'
PACKAGE_BUGREPORT='rt-bugs@bestpractical.com'
PACKAGE_NAME='RT'
-PACKAGE_STRING='RT 3.8.10'
+PACKAGE_STRING='RT 3.8.9'
PACKAGE_TARNAME='rt'
PACKAGE_URL=''
-PACKAGE_VERSION='3.8.10'
+PACKAGE_VERSION='3.8.9'
PATH_SEPARATOR=':'
-PERL='/usr/bin/perl'
+PERL='/Users/falcone/perl5/perlbrew/bin/perl'
RTGROUP='www'
RT_BIN_PATH='bin'
RT_BIN_PATH_R='/opt/rt3/bin'
RT_DEVEL_MODE='0'
-RT_DOC_PATH='share/doc'
-RT_DOC_PATH_R='/opt/rt3/share/doc'
-RT_ETC_PATH='etc'
-RT_ETC_PATH_R='/opt/rt3/etc'
-RT_FONT_PATH='share/fonts'
-RT_FONT_PATH_R='/opt/rt3/share/fonts'
-RT_GD='1'
-RT_GPG='1'
-RT_GRAPHVIZ='0'
-RT_LIB_PATH='lib'
-RT_LIB_PATH_R='/opt/rt3/lib'
-RT_LOCAL_PATH='local'
-RT_LOCAL_PATH_R='/opt/rt3/local'
-RT_LOG_PATH='var/log'
-RT_LOG_PATH_R='/opt/rt3/var/log'
-RT_MAN_PATH='man'
-RT_MAN_PATH_R='/opt/rt3/man'
+RT_DOC_PATH='/opt/rt3/share/doc'
+RT_ETC_PATH='/opt/rt3/etc'
+RT_LIB_PATH='/opt/rt3/lib'
+RT_LOCAL_PATH='/opt/rt3/local'
+RT_LOG_PATH='/opt/rt3/var/log'
+RT_MAN_PATH='/opt/rt3/man'
RT_PATH='/opt/rt3'
-RT_PATH_R='/opt/rt3'
-RT_PLUGIN_PATH='plugins'
-RT_PLUGIN_PATH_R='/opt/rt3/plugins'
-RT_SBIN_PATH='sbin'
-RT_SBIN_PATH_R='/opt/rt3/sbin'
-RT_VAR_PATH='var'
-RT_VAR_PATH_R='/opt/rt3/var'
+RT_SBIN_PATH='/opt/rt3/sbin'
+RT_STANDALONE='0'
+RT_VAR_PATH='/opt/rt3/var'
RT_VERSION_MAJOR='3'
RT_VERSION_MINOR='8'
-RT_VERSION_PATCH='10'
+RT_VERSION_PATCH='9'
SHELL='/bin/sh'
SPEEDY_BIN='/usr/local/bin/speedy'
-WEB_GROUP='www'
-WEB_HANDLER='fastcgi'
-WEB_USER='www'
-ac_ct_CC='gcc'
-bindir='bin'
+WEB_GROUP='freeside'
+WEB_USER='freeside'
+bindir='/opt/rt3/bin'
build_alias=''
-customdir='local'
-custometcdir='local/etc'
-customhtmldir='local/html'
-customlexdir='local/po'
-customlibdir='local/lib'
-datadir='share'
-datarootdir='${prefix}/share'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-dvidir='${docdir}'
+customdir='/opt/rt3/local'
+custometcdir='/opt/rt3/local/etc'
+customhtmldir='/opt/rt3/local/html'
+customlexdir='/opt/rt3/local/po'
+customlibdir='/opt/rt3/local/lib'
+datadir='/opt/rt3/share'
exec_prefix='/opt/rt3'
-exp_bindir='bin'
-exp_customdir='local'
-exp_custometcdir='local/etc'
-exp_customhtmldir='local/html'
-exp_customlexdir='local/po'
-exp_customlibdir='local/lib'
-exp_datadir='share'
+exp_bindir='/opt/rt3/bin'
+exp_customdir='/opt/rt3/local'
+exp_custometcdir='/opt/rt3/local/etc'
+exp_customhtmldir='/opt/rt3/local/html'
+exp_customlexdir='/opt/rt3/local/po'
+exp_customlibdir='/opt/rt3/local/lib'
+exp_datadir='/opt/rt3/share'
exp_exec_prefix='/opt/rt3'
-exp_fontdir='share/fonts'
-exp_htmldir='share/html'
-exp_libdir='lib'
-exp_localstatedir='var'
-exp_logfiledir='var/log'
-exp_mandir='man'
-exp_manualdir='share/doc'
-exp_masonstatedir='var/mason_data'
-exp_plugindir='plugins'
+exp_htmldir='/var/www/freeside/rt'
+exp_libdir='/opt/rt3/lib'
+exp_localstatedir='/opt/rt3/var'
+exp_logfiledir='/opt/rt3/var/log'
+exp_mandir='/opt/rt3/man'
+exp_manualdir='/opt/rt3/share/doc'
+exp_masonstatedir='/usr/local/etc/freeside/masondata'
exp_prefix='/opt/rt3'
-exp_sbindir='sbin'
-exp_sessionstatedir='var/session_data'
-exp_sysconfdir='etc'
-fontdir='share/fonts'
+exp_sbindir='/opt/rt3/sbin'
+exp_sessionstatedir='/opt/rt3/var/session_data'
+exp_sysconfdir='/opt/rt3/etc'
host_alias=''
-htmldir='share/html'
+htmldir='/var/www/freeside/rt'
includedir='${prefix}/include'
-infodir='${datarootdir}/info'
-libdir='lib'
+infodir='${prefix}/info'
+libdir='/opt/rt3/lib'
libexecdir='${exec_prefix}/libexec'
-localedir='${datarootdir}/locale'
-localstatedir='var'
-logfiledir='var/log'
-mandir='man'
-manualdir='share/doc'
-masonstatedir='var/mason_data'
+localstatedir='/opt/rt3/var'
+logfiledir='/opt/rt3/var/log'
+mandir='/opt/rt3/man'
+manualdir='/opt/rt3/share/doc'
+masonstatedir='/usr/local/etc/freeside/masondata'
oldincludedir='/usr/include'
-pdfdir='${docdir}'
-plugindir='plugins'
prefix='/opt/rt3'
program_transform_name='s,x,x,'
-psdir='${docdir}'
-rt_layout_name='relative'
+rt_layout_name='Freeside'
rt_version_major='3'
rt_version_minor='8'
-rt_version_patch='10'
+rt_version_patch='9'
sbindir='sbin'
sessionstatedir='var/session_data'
sharedstatedir='${prefix}/com'
-sysconfdir='etc'
+sysconfdir='/opt/rt3/etc'
target_alias=''
## ----------- ##
## confdefs.h. ##
## ----------- ##
-/* confdefs.h */
+#define PACKAGE_BUGREPORT "rt-bugs@bestpractical.com"
#define PACKAGE_NAME "RT"
+#define PACKAGE_STRING "RT 3.6.4"
#define PACKAGE_TARNAME "rt"
-#define PACKAGE_VERSION "3.8.10"
-#define PACKAGE_STRING "RT 3.8.10"
+#define PACKAGE_VERSION "3.8.9"
+#define PACKAGE_STRING "RT 3.8.9"
#define PACKAGE_BUGREPORT "rt-bugs@bestpractical.com"
#define PACKAGE_URL ""
diff --git a/rt/config.pld b/rt/config.pld
deleted file mode 100644
index c37c784a5..000000000
--- a/rt/config.pld
+++ /dev/null
@@ -1,21 +0,0 @@
-(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=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$fontdir" = "xNONE" || test "x$fontdir" = "x") && fontdir=${datadir}/fonts
-(test "x$manualdir" = "xNONE" || test "x$manualdir" = "x") && manualdir=${datadir}/doc
-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=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
-(test "x$customlibdir" = "xNONE" || test "x$customlibdir" = "x") && customlibdir=${customdir}/lib
diff --git a/rt/config.status b/rt/config.status
index 83560ece8..293cc6c3e 100755
--- a/rt/config.status
+++ b/rt/config.status
@@ -89,7 +89,6 @@ fi
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -135,19 +134,19 @@ export LANGUAGE
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
+# script with status $?, using 1 if that was 0.
as_fn_error ()
{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ as_status=$?; test $as_status -eq 0 && as_status=1
+ if test "$3"; then
+ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
fi
- $as_echo "$as_me: error: $2" >&2
+ $as_echo "$as_me: error: $1" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -343,7 +342,7 @@ $as_echo X"$as_dir" |
test -d "$as_dir" && break
done
test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
} # as_fn_mkdir_p
@@ -392,8 +391,8 @@ 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.8.10, which was
-generated by GNU Autoconf 2.68. Invocation command line was
+This file was extended by RT $as_me 3.8.9, which was
+generated by GNU Autoconf 2.65. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -429,17 +428,17 @@ $config_files
Report bugs to <rt-bugs@bestpractical.com>."
-ac_cs_config="'PERL=/usr/bin/perl'"
+ac_cs_config=""
ac_cs_version="\
-RT config.status 3.8.10
-configured by ./configure, generated by GNU Autoconf 2.68,
+RT config.status 3.8.9
+configured by ./configure, generated by GNU Autoconf 2.65,
with options \"$ac_cs_config\"
-Copyright (C) 2010 Free Software Foundation, Inc.
+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/security/rt-3.8.10'
+ac_pwd='/Users/falcone/work/rt/3.8/rt-3.8.9'
srcdir='.'
INSTALL='/usr/bin/install -c'
AWK='gawk'
@@ -449,16 +448,11 @@ ac_need_defaults=:
while test $# != 0
do
case $1 in
- --*=?*)
+ --*=*)
ac_option=`expr "X$1" : 'X\([^=]*\)='`
ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
*)
ac_option=$1
ac_optarg=$2
@@ -480,7 +474,6 @@ do
$ac_shift
case $ac_optarg in
*\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
@@ -491,7 +484,7 @@ do
ac_cs_silent=: ;;
# This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
+ -*) as_fn_error "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;
*) as_fn_append ac_config_targets " $1"
@@ -509,7 +502,7 @@ if $ac_cs_silent; then
fi
if $ac_cs_recheck; then
- set X '/bin/sh' './configure' 'PERL=/usr/bin/perl' $ac_configure_extra_args --no-create --no-recursion
+ set X '/bin/sh' './configure' $ac_configure_extra_args --no-create --no-recursion
shift
$as_echo "running CONFIG_SHELL=/bin/sh $*" >&6
CONFIG_SHELL='/bin/sh'
@@ -562,7 +555,7 @@ do
"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;;
+ *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
done
@@ -583,10 +576,9 @@ fi
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- tmp= ac_tmp=
+ tmp=
trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
' 0
trap 'as_fn_exit 1' 1 2 13 15
}
@@ -594,13 +586,12 @@ $debug ||
{
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
+ test -n "$tmp" && test -d "$tmp"
} ||
{
tmp=./conf$$-$RANDOM
(umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
@@ -617,13 +608,13 @@ if test "x$ac_cr" = x; then
fi
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
+ ac_cs_awk_cr='\r'
else
ac_cs_awk_cr=$ac_cr
fi
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-cat >>"$ac_tmp/subs1.awk" <<\_ACAWK &&
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+cat >>"$tmp/subs1.awk" <<\_ACAWK &&
S["LTLIBOBJS"]=""
S["LIBOBJS"]=""
S["RT_LOG_PATH_R"]="/opt/rt3/var/log"
@@ -666,7 +657,7 @@ 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_PATCH"]="9"
S["RT_VERSION_MINOR"]="8"
S["RT_VERSION_MAJOR"]="3"
S["RT_GPG"]="1"
@@ -732,12 +723,12 @@ S["exp_exec_prefix"]="/opt/rt3"
S["exp_prefix"]="/opt/rt3"
S["SPEEDY_BIN"]="/usr/local/bin/speedy"
S["WEB_HANDLER"]="fastcgi"
-S["PERL"]="/usr/bin/perl"
+S["PERL"]="/Users/falcone/perl5/perlbrew/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_patch"]="9"
S["rt_version_minor"]="8"
S["rt_version_major"]="3"
S["target_alias"]=""
@@ -747,8 +738,8 @@ S["LIBS"]=""
S["ECHO_T"]=""
S["ECHO_N"]=""
S["ECHO_C"]="\\c"
-S["DEFS"]="-DPACKAGE_NAME=\\\"RT\\\" -DPACKAGE_TARNAME=\\\"rt\\\" -DPACKAGE_VERSION=\\\"3.8.10\\\" -DPACKAGE_STRING=\\\"RT\\ 3.8.10\\\" -DPACKAGE_BUGREPORT=\\\"rt-bugs@bestpracti"\
-"cal.com\\\" -DPACKAGE_URL=\\\"\\\""
+S["DEFS"]="-DPACKAGE_NAME=\\\"RT\\\" -DPACKAGE_TARNAME=\\\"rt\\\" -DPACKAGE_VERSION=\\\"3.8.9\\\" -DPACKAGE_STRING=\\\"RT\\ 3.8.9\\\" -DPACKAGE_BUGREPORT=\\\"rt-bugs@bestpractica"\
+"l.com\\\" -DPACKAGE_URL=\\\"\\\""
S["mandir"]="man"
S["localedir"]="${datarootdir}/locale"
S["libdir"]="lib"
@@ -773,14 +764,14 @@ S["prefix"]="/opt/rt3"
S["exec_prefix"]="/opt/rt3"
S["PACKAGE_URL"]=""
S["PACKAGE_BUGREPORT"]="rt-bugs@bestpractical.com"
-S["PACKAGE_STRING"]="RT 3.8.10"
-S["PACKAGE_VERSION"]="3.8.10"
+S["PACKAGE_STRING"]="RT 3.8.9"
+S["PACKAGE_VERSION"]="3.8.9"
S["PACKAGE_TARNAME"]="rt"
S["PACKAGE_NAME"]="RT"
S["PATH_SEPARATOR"]=":"
S["SHELL"]="/bin/sh"
_ACAWK
-cat >>"$ac_tmp/subs1.awk" <<_ACAWK &&
+cat >>"$tmp/subs1.awk" <<_ACAWK &&
for (key in S) S_is_set[key] = 1
FS = ""
@@ -810,8 +801,8 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
else
cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error "could not setup config files machinery" "$LINENO" 5
fi # test -n "$CONFIG_FILES"
@@ -824,7 +815,7 @@ do
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
@@ -843,7 +834,7 @@ do
for ac_f
do
case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
+ -) ac_f="$tmp/stdin";;
*) # Look for the file first in the build tree, then in the source tree
# (if the path is not absolute). The absolute path cannot be DOS-style,
# because $ac_f cannot contain `:'.
@@ -852,7 +843,7 @@ do
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
@@ -878,8 +869,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
esac
case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac
@@ -979,20 +970,12 @@ $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir set
s&@mandir@&man&g
s&\${datarootdir}&${prefix}/share&g' ;;
esac
-ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
+ac_sed_extra="/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
s/^[^=]*=[ ]*$//
}
@@ -1011,24 +994,23 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
$ac_datarootdir_hack
"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error "could not create $ac_file" "$LINENO" 5
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
+which seems to be undefined. Please make sure it is defined." >&5
$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
+which seems to be undefined. Please make sure it is defined." >&2;}
- rm -f "$ac_tmp/stdin"
+ rm -f "$tmp/stdin"
case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ || as_fn_error "could not create $ac_file" "$LINENO" 5
;;
diff --git a/rt/configure.ac b/rt/configure.ac
index b5b38eec3..73738b359 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.14 $)dnl
+AC_REVISION($Revision: 1.3 $)dnl
dnl Setup autoconf
AC_PREREQ([2.53])
-AC_INIT(RT, 3.8.10, [rt-bugs@bestpractical.com])
+AC_INIT(RT, 3.8.9, [rt-bugs@bestpractical.com])
AC_CONFIG_SRCDIR([lib/RT.pm.in])
dnl Extract RT version number components
@@ -400,6 +400,7 @@ AC_CONFIG_FILES([
etc/upgrade/generate-rtaddressregexp
etc/upgrade/vulnerable-passwords
sbin/rt-attributes-viewer
+ sbin/rt-session-viewer
sbin/rt-dump-database
sbin/rt-setup-database
sbin/rt-test-dependencies
diff --git a/rt/etc/RT_Config.pm b/rt/etc/RT_Config.pm
index 67d131319..12044a4f9 100644
--- a/rt/etc/RT_Config.pm
+++ b/rt/etc/RT_Config.pm
@@ -104,7 +104,7 @@ Valid types are "mysql", "Oracle" and "Pg"
=cut
-Set($DatabaseType , 'mysql');
+Set($DatabaseType , 'Pg');
=item C<$DatabaseHost>, C<$DatabaseRTHost>
@@ -133,7 +133,7 @@ The name of the database user (inside the database)
=cut
-Set($DatabaseUser , 'rt_user');
+Set($DatabaseUser , 'freeside');
=item C<$DatabasePassword>
@@ -141,7 +141,7 @@ Password the C<$DatabaseUser> should use to access the database
=cut
-Set($DatabasePassword , 'rt_pass');
+Set($DatabasePassword , '');
=item C<$DatabaseName>
@@ -150,7 +150,7 @@ it's SID, DB objects are created in L<$DatabaseUser>'s schema.
=cut
-Set($DatabaseName , 'rt3');
+Set($DatabaseName , 'freeside');
=item C<$DatabaseRequireSSL>
@@ -733,7 +733,7 @@ NOTE that options with '-' character MUST be quoted.
=cut
Set(%GnuPGOptions,
- homedir => 'var/data/gpg',
+ homedir => '/opt/rt3/var/data/gpg',
# URL of a keyserver
# keyserver => 'hkp://subkeys.pgp.net',
@@ -787,7 +787,7 @@ direct file logging.
=cut
Set($LogToFile , undef);
-Set($LogDir, 'var/log');
+Set($LogDir, '/opt/rt3/var/log');
Set($LogToFileNamed , "rt.log"); #log to rt.log
=item C<$LogStackTraces>
@@ -841,6 +841,9 @@ RT ships with several themes by default:
3.4-compat A 3.4 compatibility stylesheet to make RT look
(mostly) like 3.4
+This bundled distibution of RT also includes (enabled by default):
+ freeside2.1 Integration with Freeside
+
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
@@ -849,7 +852,7 @@ option can be overridden by users in their preferences.
=cut
-Set($WebDefaultStylesheet, 'web2');
+Set($WebDefaultStylesheet, 'freeside2.1');
=item C<$UsernameFormat>
@@ -860,7 +863,7 @@ EmailAddress.
=cut
-Set($UsernameFormat, 'concise');
+Set($UsernameFormat, 'verbose');
=item C<$WebDomain>
@@ -982,7 +985,7 @@ login if you change it.
=cut
-Set($WebNoAuthRegex, qr{^ (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
+Set($WebNoAuthRegex, qr{^ /rt (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
=item C<$SelfServiceRegex>
@@ -1371,7 +1374,7 @@ customized homepage ("RT at a glance").
=cut
-Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
+Set($HomepageComponents, [qw(QuickCreate Quicksearch MyCalendar MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
=item C<@MasonParameters>
@@ -1395,6 +1398,7 @@ C<$DefaultSearchResultFormat> is the default format for RT search results
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',
+ Customer,
Status,
QueueName,
OwnerName,
@@ -1402,6 +1406,7 @@ Set ($DefaultSearchResultFormat, qq{
'__NEWLINE__',
'',
'<small>__Requestors__</small>',
+ '<small>__CustomerTags__</small>',
'<small>__CreatedRelative__</small>',
'<small>__ToldRelative__</small>',
'<small>__LastUpdatedRelative__</small>',
@@ -1773,7 +1778,7 @@ custom field values from external sources at runtime.
=cut
-Set(@CustomFieldValuesSources, ());
+Set(@CustomFieldValuesSources, ('RT::CustomFieldValues::Queues'));
=item C<$CanonicalizeRedirectURLs>
@@ -1805,7 +1810,7 @@ C<Set(@Plugins, (qw(Extension::QuickDelete RT::FM)));>
=cut
-Set(@Plugins, ());
+Set(@Plugins, (qw(RTx::Calendar))); #RTx::Checklist ));
=back
diff --git a/rt/etc/RT_Config.pm.in b/rt/etc/RT_Config.pm.in
index ea64a2e01..201802373 100644
--- a/rt/etc/RT_Config.pm.in
+++ b/rt/etc/RT_Config.pm.in
@@ -841,6 +841,9 @@ RT ships with several themes by default:
3.4-compat A 3.4 compatibility stylesheet to make RT look
(mostly) like 3.4
+This bundled distibution of RT also includes (enabled by default):
+ freeside2.1 Integration with Freeside
+
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
@@ -849,7 +852,7 @@ option can be overridden by users in their preferences.
=cut
-Set($WebDefaultStylesheet, 'web2');
+Set($WebDefaultStylesheet, 'freeside2.1');
=item C<$UsernameFormat>
@@ -860,7 +863,7 @@ EmailAddress.
=cut
-Set($UsernameFormat, 'concise');
+Set($UsernameFormat, 'verbose');
=item C<$WebDomain>
@@ -982,7 +985,7 @@ login if you change it.
=cut
-Set($WebNoAuthRegex, qr{^ (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
+Set($WebNoAuthRegex, qr{^ /rt (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
=item C<$SelfServiceRegex>
@@ -1371,7 +1374,7 @@ customized homepage ("RT at a glance").
=cut
-Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
+Set($HomepageComponents, [qw(QuickCreate Quicksearch MyCalendar MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
=item C<@MasonParameters>
@@ -1395,13 +1398,15 @@ C<$DefaultSearchResultFormat> is the default format for RT search results
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',
+ Customer,
Status,
- QueueName,
+ QueueName,
OwnerName,
Priority,
'__NEWLINE__',
- '',
+ '',
'<small>__Requestors__</small>',
+ '<small>__CustomerTags__</small>',
'<small>__CreatedRelative__</small>',
'<small>__ToldRelative__</small>',
'<small>__LastUpdatedRelative__</small>',
@@ -1554,6 +1559,16 @@ Use this to set the default units for time entry to hours instead of minutes.
Set($DefaultTimeUnitsToHours, 0);
+=item C<$SimpleSearchIncludeResolved>
+
+By default, the simple ticket search in the top bar excludes "resolved" tickets
+unless a status argument is specified. Set this to a true value to include
+them.
+
+=cut
+
+Set($SimpleSearchIncludeResolved, 0);
+
=back
=head1 L<Net::Server> (rt-server) Configuration
@@ -1773,7 +1788,7 @@ custom field values from external sources at runtime.
=cut
-Set(@CustomFieldValuesSources, ());
+Set(@CustomFieldValuesSources, ('RT::CustomFieldValues::Queues'));
=item C<$CanonicalizeRedirectURLs>
@@ -1805,7 +1820,7 @@ C<Set(@Plugins, (qw(Extension::QuickDelete RT::FM)));>
=cut
-Set(@Plugins, ());
+Set(@Plugins, (qw(RTx::Calendar))); #RTx::Checklist ));
=back
diff --git a/rt/etc/RT_SiteConfig.pm b/rt/etc/RT_SiteConfig.pm
index 1661e4d6e..e55f4fc70 100644
--- a/rt/etc/RT_SiteConfig.pm
+++ b/rt/etc/RT_SiteConfig.pm
@@ -14,6 +14,44 @@
#
# perl -c /path/to/your/etc/RT_SiteConfig.pm
-Set( $rtname, 'example.com');
+#Set( $rtname, 'example.com');
+
+# These settings should have been inserted by the initial Freeside install.
+# Sometimes you may want to change domain, timezone, or freeside::URL later,
+# everything else should probably stay untouched.
+
+Set($rtname, '%%%RT_DOMAIN%%%');
+Set($Organization, '%%%RT_DOMAIN%%%');
+
+Set($Timezone, '%%%RT_TIMEZONE%%%');
+
+Set($WebExternalAuth, 1);
+Set($WebFallbackToInternal, 1); #no
+Set($WebExternalAuto, 1);
+
+$RT::URI::freeside::IntegrationType = 'Internal';
+$RT::URI::freeside::URL = '%%%FREESIDE_URL%%%';
+
+$RT::URI::freeside::URL =~ m(^(https?://[^/]+)(/.*)$)i;
+Set($WebBaseURL, $1);
+Set($WebPath, "$2/rt");
+
+Set($DatabaseHost , '');
+
+# These settings are user-editable.
+
+Set($WebDefaultStylesheet, 'freeside2.1');
+Set($UsernameFormat, 'verbose'); #back to concise to hide email addresses
+
+#uncomment to use
+#Set($DefaultSummaryRows, 10);
+
+Set($MessageBoxWidth, 80);
+Set($MessageBoxRichTextHeight, 368);
+
+#redirects to ticket display on quick create
+#Set($QuickCreateRedirect, 1);
+
#Set(@Plugins,(qw(Extension::QuickDelete RT::FM)));
+
1;
diff --git a/rt/etc/acl.Oracle b/rt/etc/acl.Oracle
index 9ca4122a0..c8667c031 100644
--- a/rt/etc/acl.Oracle
+++ b/rt/etc/acl.Oracle
@@ -1,4 +1,10 @@
-
-sub acl { return () }
-
+sub acl {
+return (
+"CREATE USER ${RT::DatabaseUser} identified by ${RT::DatabasePassword}".
+"temporary tablespace TEMP" .
+"default tablespace USERS" .
+"quota unlimited on USERS;" ,
+"grant connect, resource to ${RT::DatabaseUser};",
+"exit;");
+}
1;
diff --git a/rt/etc/acl.Pg b/rt/etc/acl.Pg
index 8a0d4f28c..16ea71b2d 100755
--- a/rt/etc/acl.Pg
+++ b/rt/etc/acl.Pg
@@ -1,76 +1,63 @@
-
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
- );
- my $db_user = RT->Config->Get('DatabaseUser');
- my $db_pass = RT->Config->Get('DatabasePassword');
+ attachments_id_seq
+ Attachments
+ 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
+ ticketcustomfieldvalues_id_s
+ TicketCustomFieldValues
+ customfields_id_seq
+ CustomFields
+ customfieldvalues_id_seq
+ CustomFieldValues
+ sessions
+ );
- # 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;";
+ # 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 $sequence_right
- = ( $dbh->{pg_server_version} >= 80200 )
- ? "USAGE, SELECT, UPDATE"
- : "SELECT, UPDATE";
+ push @acls, "create user ${RT::DatabaseUser} with password '${RT::DatabasePassword}' NOCREATEDB NOCREATEUSER;";
foreach my $table (@tables) {
- 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\";"
- }
+ push @acls,
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON $table to "
+ . $RT::DatabaseUser . ";";
+
}
return (@acls);
}
-
1;
diff --git a/rt/etc/acl.mysql b/rt/etc/acl.mysql
index 16882378e..0ecaa3b15 100755
--- a/rt/etc/acl.mysql
+++ b/rt/etc/acl.mysql
@@ -1,25 +1,8 @@
-
sub acl {
- 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";
- $db_name =~ s/([_%])/\\$1/g;
- return (
- "GRANT SELECT,INSERT,CREATE,INDEX,UPDATE,DELETE
- ON `$db_name`.*
- TO '$db_user'\@'$db_rthost'
- IDENTIFIED BY '$db_pass';",
- );
+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}';");
}
-
1;
diff --git a/rt/etc/rt.spec b/rt/etc/rt.spec
deleted file mode 100644
index 14200c1f3..000000000
--- a/rt/etc/rt.spec
+++ /dev/null
@@ -1,137 +0,0 @@
-Summary: rt Request Tracker
-
-Name: rt
-Version: 2.0.9pre5
-Release: 1
-Group: Applications/Web
-Packager: Jesse Vincent <jesse@bestpractical.com>
-Vendor: http://www.fsck.com/projects/rt
-Requires: perl
-Requires: mod_perl > 1.22
-Requires: perl-DBI >= 1.18
-Requires: perl-DBIx-DataSource >= 0.02
-Requires: perl-DBIx-SearchBuilder >= 0.47
-Requires: perl-HTML-Parser
-Requires: perl-MLDBM
-Requires: perl-libnet
-Requires: perl-CGI.pm >= 2.78
-Requires: perl-Params-Validate >= 0.02
-Requires: perl-HTML-Mason >= 0.896
-Requires: perl-libapreq
-Requires: perl-Apache-Session >= 1.53
-Requires: perl-MIME-tools >= 5.411
-Requires: perl-MailTools >= 1.20
-Requires: perl-Getopt-Long >= 2.24
-Requires: perl-Tie-IxHash
-Requires: perl-TimeDate
-Requires: perl-Time-HiRes
-Requires: perl-Text-Wrapper
-Requires: perl-Text-Template
-Requires: perl-File-Spec >= 0.8
-Requires: perl-FreezeThaw
-Requires: perl-Storable
-Requires: perl-File-Temp
-Requires: perl-Log-Dispatch >= 1.6
-
-Source: http://www.fsck.com/pub/rt/release/%{name}.tar.gz
-
-Copyright: GPL
-BuildRoot: /var/tmp/rt-root
-
-%description
-RT is an industrial-grade ticketing system. It lets a group
-of people intelligently and efficiently manage requests
-submitted by a community of users. RT is used by systems
-administrators, customer support staffs, NOCs, developers
-and even marketing departments at over a thousand sites
-around the world.
-
-%prep
-groupadd rt || true
-%setup -q -n %{name}
-
-%build
-
-%install
-
-if [ x$RPM_BUILD_ROOT != x ]; then
-rm -rf $RPM_BUILD_ROOT
-fi
-
-#
-# Perform all the non-site specfic steps whilst building the package
-#
-make dirs libs-install html-install bin-install DESTDIR=$RPM_BUILD_ROOT
-#
-# fixperms needs these, so make fake empty files
-touch $RPM_BUILD_ROOT/opt/rt2/etc/insertdata $RPM_BUILD_ROOT/opt/rt2/etc/config.pm
-make fixperms insert-install WEB_USER=www DESTDIR=$RPM_BUILD_ROOT
-
-#
-# Copy in the files needed again after install
-#
-mkdir -p $RPM_BUILD_ROOT/opt/rt2/postinstall/bin
-cp -rp Makefile etc tools $RPM_BUILD_ROOT/opt/rt2/postinstall
-cp -rp bin/initacls.* $RPM_BUILD_ROOT/opt/rt2/postinstall/bin
-
-# logging in /var/log/rt2
-mkdir -p $RPM_BUILD_ROOT/var/log/rt2
-chown www $RPM_BUILD_ROOT/var/log/rt2
-chgrp rt $RPM_BUILD_ROOT/var/log/rt2
-chmod ug=rwx,o= $RPM_BUILD_ROOT/var/log/rt2
-
-%clean
-if [ x$RPM_BUILD_ROOT != x ]; then
-rm -rf $RPM_BUILD_ROOT
-fi
-
-#
-# A new rt groups is required
-#
-%pre
-groupadd rt || true
-
-#
-# Show the user the site specific steps required after install
-#
-%post
-cat <<EOF
------------------------------------------------------------------------
-rt2 installation is complete. Now create the rt2 database by running:
------------------------------------------------------------------------
-
-# cd /opt/rt2/postinstall
-# make config-replace initialize.mysql insert RT_LOG_PATH=/var/log/rt2 DB_RT_PASS=new_rt_user_password
-
-Choose your own new_rt_user_password. You will need the mysql root password.
-You can try Pg or Oracle instead of mysql - untested.
-
-Review and configure your site specific details in /opt/rt2/etc/config.pm
-EOF
-
-%preun
-
-%files
-%dir /opt/rt2
-/opt/rt2/bin
-/opt/rt2/WebRT
-/opt/rt2/lib
-/opt/rt2/local
-/opt/rt2/man
-/opt/rt2/postinstall
-%dir /opt/rt2/etc
-/opt/rt2/etc/insertdata
-%config /opt/rt2/etc/config.pm
-%dir /var/log/rt2
-
-%changelog
-* Mon Sep 24 2001 Jesse Vincent <jesse@bestpractical.com>
- Switch to rt DESTDIR support
-* Fri Sep 14 2001 Cris Bailiff <c.bailiff@devsecure.com>
- Fix permissions on created /var/log/rt2 and roll in 2.0.7
-* Tue Sep 4 2001 Cris Bailiff <c.bailiff@devsecure.com>
-- created initial spec file
-* Tue Sep 4 2001 Cris Bailiff <c.bailiff@devsecure.com>
-- created initial spec file
-* Tue Sep 4 2001 Cris Bailiff <c.bailiff@devsecure.com>
-- created initial spec file
diff --git a/rt/etc/schema.Oracle b/rt/etc/schema.Oracle
deleted file mode 100644
index 693e75ae5..000000000
--- a/rt/etc/schema.Oracle
+++ /dev/null
@@ -1,399 +0,0 @@
-
-CREATE SEQUENCE ATTACHMENTS_seq;
-CREATE TABLE Attachments (
- id NUMBER(11,0)
- CONSTRAINT Attachments_Key PRIMARY KEY,
- TransactionId NUMBER(11,0) NOT NULL,
- Parent NUMBER(11,0) DEFAULT 0 NOT NULL,
- MessageId VARCHAR2(160),
- Subject VARCHAR2(255),
- Filename VARCHAR2(255),
- ContentType VARCHAR2(80),
- ContentEncoding VARCHAR2(80),
- Content CLOB,
- Headers CLOB,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE
-);
-CREATE INDEX Attachments2 ON Attachments (TransactionId);
-CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId);
-
-
-CREATE SEQUENCE QUEUES_seq;
-CREATE TABLE Queues (
- id NUMBER(11,0)
- CONSTRAINT Queues_Key PRIMARY KEY,
- Name VARCHAR2(200) CONSTRAINT Queues_Name_Unique UNIQUE NOT NULL,
- Description VARCHAR2(255),
- CorrespondAddress VARCHAR2(120),
- CommentAddress VARCHAR2(120),
- InitialPriority NUMBER(11,0) DEFAULT 0 NOT NULL,
- FinalPriority NUMBER(11,0) DEFAULT 0 NOT NULL,
- DefaultDueIn NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE,
- Disabled NUMBER(11,0) DEFAULT 0 NOT NULL
-);
- CREATE INDEX Queues1 ON Queues (LOWER(Name));
-CREATE INDEX Queues2 ON Queues (Disabled);
-
-
-CREATE SEQUENCE LINKS_seq;
-CREATE TABLE Links (
- id NUMBER(11,0)
- CONSTRAINT Links_Key PRIMARY KEY,
- Base VARCHAR2(240),
- Target VARCHAR2(240),
- Type VARCHAR2(20) NOT NULL,
- LocalTarget NUMBER(11,0) DEFAULT 0 NOT NULL,
- LocalBase NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE
-);
-CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type);
-CREATE INDEX Links2 ON Links (Base, Type);
-CREATE INDEX Links3 ON Links (Target, Type);
-CREATE INDEX Links4 ON Links(Type,LocalBase);
-
-
-CREATE SEQUENCE PRINCIPALS_seq;
-CREATE TABLE Principals (
- id NUMBER(11,0)
- CONSTRAINT Principals_Key PRIMARY KEY,
- PrincipalType VARCHAR2(16),
- ObjectId NUMBER(11,0),
- Disabled NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-CREATE UNIQUE INDEX Principals2 ON Principals (ObjectId);
-
-
-CREATE SEQUENCE GROUPS_seq;
-CREATE TABLE Groups (
- id NUMBER(11,0)
- CONSTRAINT Groups_Key PRIMARY KEY,
- Name VARCHAR2(200),
- Description VARCHAR2(255),
- Domain VARCHAR2(64),
- Type VARCHAR2(64),
- Instance NUMBER(11,0) DEFAULT 0 -- NOT NULL
--- Instance VARCHAR2(64)
-);
-CREATE INDEX Groups1 ON Groups (LOWER(Domain), Instance, LOWER(Type), id);
-CREATE INDEX Groups2 ON Groups (LOWER(Type), Instance, LOWER(Domain));
-
-
-CREATE SEQUENCE SCRIPCONDITIONS_seq;
-CREATE TABLE ScripConditions (
- id NUMBER(11, 0)
- CONSTRAINT ScripConditions_Key PRIMARY KEY,
- Name VARCHAR2(200),
- Description VARCHAR2(255),
- ExecModule VARCHAR2(60),
- Argument VARCHAR2(255),
- ApplicableTransTypes VARCHAR2(60),
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-
-CREATE SEQUENCE TRANSACTIONS_seq;
-CREATE TABLE Transactions (
- id NUMBER(11,0)
- CONSTRAINT Transactions_Key PRIMARY KEY,
- ObjectType VARCHAR2(255),
- ObjectId NUMBER(11,0) DEFAULT 0 NOT NULL,
- TimeTaken NUMBER(11,0) DEFAULT 0 NOT NULL,
- Type VARCHAR2(20),
- Field VARCHAR2(40),
- OldValue VARCHAR2(255),
- NewValue VARCHAR2(255),
- ReferenceType VARCHAR2(255),
- OldReference NUMBER(11,0),
- NewReference NUMBER(11,0),
- Data VARCHAR2(255),
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE
-);
-CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);
-
-
-CREATE SEQUENCE SCRIPS_seq;
-CREATE TABLE Scrips (
- id NUMBER(11,0)
- CONSTRAINT Scrips_Key PRIMARY KEY,
- Description VARCHAR2(255),
- ScripCondition NUMBER(11,0) DEFAULT 0 NOT NULL,
- ScripAction NUMBER(11,0) DEFAULT 0 NOT NULL,
- ConditionRules CLOB,
- ActionRules CLOB,
- CustomIsApplicableCode CLOB,
- CustomPrepareCode CLOB,
- CustomCommitCode CLOB,
- Stage VARCHAR2(32),
- Queue NUMBER(11,0) DEFAULT 0 NOT NULL,
- Template NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-
-CREATE SEQUENCE ACL_seq;
-CREATE TABLE ACL (
- id NUMBER(11,0)
- CONSTRAINT ACL_Key PRIMARY KEY,
- PrincipalType VARCHAR2(25) NOT NULL,
- PrincipalId NUMBER(11,0) NOT NULL,
- RightName VARCHAR2(25) NOT NULL,
- ObjectType VARCHAR2(25) NOT NULL,
- ObjectId NUMBER(11,0) DEFAULT 0 NOT NULL,
- DelegatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- DelegatedFrom NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-CREATE INDEX ACL1 ON ACL(RightName, ObjectType, ObjectId, PrincipalType, PrincipalId);
-
-
-CREATE SEQUENCE GROUPMEMBERS_seq;
-CREATE TABLE GroupMembers (
- id NUMBER(11,0)
- CONSTRAINT GroupMembers_Key PRIMARY KEY,
- GroupId NUMBER(11,0) DEFAULT 0 NOT NULL,
- MemberId NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers (GroupId, MemberId);
-
-
-CREATE SEQUENCE CachedGroupMembers_seq;
-CREATE TABLE CachedGroupMembers (
- id NUMBER(11,0)
- CONSTRAINT CachedGroupMembers_Key PRIMARY KEY,
- GroupId NUMBER(11,0),
- MemberId NUMBER(11,0),
- Via NUMBER(11,0),
- ImmediateParentId NUMBER(11,0),
- Disabled NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-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;
-CREATE TABLE Users (
- id NUMBER(11,0)
- CONSTRAINT Users_Key PRIMARY KEY,
- Name VARCHAR2(200) CONSTRAINT Users_Name_Unique
- unique NOT NULL,
- Password VARCHAR2(40),
- Comments CLOB,
- Signature CLOB,
- EmailAddress VARCHAR2(120),
- FreeFormContactInfo CLOB,
- Organization VARCHAR2(200),
- RealName VARCHAR2(120),
- NickName VARCHAR2(16),
- Lang VARCHAR2(16),
- EmailEncoding VARCHAR2(16),
- WebEncoding VARCHAR2(16),
- ExternalContactInfoId VARCHAR2(100),
- ContactInfoSystem VARCHAR2(30),
- ExternalAuthId VARCHAR2(100),
- AuthSystem VARCHAR2(30),
- Gecos VARCHAR2(16),
- HomePhone VARCHAR2(30),
- WorkPhone VARCHAR2(30),
- MobilePhone VARCHAR2(30),
- PagerPhone VARCHAR2(30),
- Address1 VARCHAR2(200),
- Address2 VARCHAR2(200),
- City VARCHAR2(100),
- State VARCHAR2(100),
- Zip VARCHAR2(16),
- Country VARCHAR2(50),
- Timezone VARCHAR2(50),
- PGPKey CLOB,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
--- CREATE UNIQUE INDEX Users1 ON Users (Name);
-
-CREATE INDEX Users2 ON Users( LOWER(Name));
-CREATE INDEX Users4 ON Users (LOWER(EmailAddress));
-
-
-CREATE SEQUENCE TICKETS_seq;
-CREATE TABLE Tickets (
- id NUMBER(11, 0)
- CONSTRAINT Tickets_Key PRIMARY KEY,
- EffectiveId NUMBER(11,0) DEFAULT 0 NOT NULL,
- Queue NUMBER(11,0) DEFAULT 0 NOT NULL,
- Type VARCHAR2(16),
- IssueStatement NUMBER(11,0) DEFAULT 0 NOT NULL,
- Resolution NUMBER(11,0) DEFAULT 0 NOT NULL,
- Owner NUMBER(11,0) DEFAULT 0 NOT NULL,
- Subject VARCHAR2(200) DEFAULT '[no subject]',
- InitialPriority NUMBER(11,0) DEFAULT 0 NOT NULL,
- FinalPriority NUMBER(11,0) DEFAULT 0 NOT NULL,
- Priority NUMBER(11,0) DEFAULT 0 NOT NULL,
- TimeEstimated NUMBER(11,0) DEFAULT 0 NOT NULL,
- TimeWorked NUMBER(11,0) DEFAULT 0 NOT NULL,
- Status VARCHAR2(10),
- TimeLeft NUMBER(11,0) DEFAULT 0 NOT NULL,
- Told DATE,
- Starts DATE,
- Started DATE,
- Due DATE,
- Resolved DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- Disabled NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-CREATE INDEX Tickets1 ON Tickets (Queue, Status);
-CREATE INDEX Tickets2 ON Tickets (Owner);
-CREATE INDEX Tickets4 ON Tickets (id, Status);
-CREATE INDEX Tickets5 ON Tickets (id, EffectiveId);
-CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type);
-
-
-CREATE SEQUENCE SCRIPACTIONS_seq;
-CREATE TABLE ScripActions (
- id NUMBER(11,0)
- CONSTRAINT ScripActions_Key PRIMARY KEY,
- Name VARCHAR2(200),
- Description VARCHAR2(255),
- ExecModule VARCHAR2(60),
- Argument VARCHAR2(255),
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-
-CREATE SEQUENCE TEMPLATES_seq;
-CREATE TABLE Templates (
- id NUMBER(11,0)
- CONSTRAINT Templates_Key PRIMARY KEY,
- Queue NUMBER(11,0) DEFAULT 0 NOT NULL,
- Name VARCHAR2(200) NOT NULL,
- Description VARCHAR2(255),
- Type VARCHAR2(16),
- Language VARCHAR2(16),
- TranslationOf NUMBER(11,0) DEFAULT 0 NOT NULL,
- Content CLOB,
- LastUpdated DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE
-);
-
-
-CREATE SEQUENCE OBJECTCUSTOMFIELDS_seq;
-CREATE TABLE ObjectCustomFields (
- id NUMBER(11,0)
- CONSTRAINT ObjectCustomFields_Key PRIMARY KEY,
- CustomField NUMBER(11,0) NOT NULL,
- ObjectId NUMBER(11,0) NOT NULL,
- SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-
-CREATE SEQUENCE OBJECTCUSTOMFIELDVALUES_seq;
-CREATE TABLE ObjectCustomFieldValues (
- id NUMBER(11,0)
- CONSTRAINT ObjectCustomFieldValues_Key PRIMARY KEY,
- CustomField NUMBER(11,0) NOT NULL,
- ObjectType VARCHAR2(25) NOT NULL,
- ObjectId NUMBER(11,0) DEFAULT 0 NOT NULL,
- SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
- Content VARCHAR2(255),
- LargeContent CLOB,
- ContentType VARCHAR2(80),
- ContentEncoding VARCHAR2(80),
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE,
- Disabled NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-
-CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (Content);
-CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId);
-
-CREATE SEQUENCE CUSTOMFIELDS_seq;
-CREATE TABLE CustomFields (
- id NUMBER(11,0)
- CONSTRAINT CustomFields_Key PRIMARY KEY,
- Name VARCHAR2(200),
- Type VARCHAR2(200),
- MaxValues NUMBER(11,0) DEFAULT 0 NOT NULL,
- Pattern CLOB,
- Repeated NUMBER(11,0) DEFAULT 0 NOT NULL,
- Description VARCHAR2(255),
- SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
- LookupType VARCHAR2(255),
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE,
- Disabled NUMBER(11,0) DEFAULT 0 NOT NULL
-);
-
-
-CREATE SEQUENCE CUSTOMFIELDVALUES_seq;
-CREATE TABLE CustomFieldValues (
- id NUMBER(11,0)
- CONSTRAINT CustomFieldValues_Key PRIMARY KEY,
- CustomField NUMBER(11,0),
- Name VARCHAR2(200),
- Description VARCHAR2(255),
- SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField);
-
-CREATE SEQUENCE ATTRIBUTES_seq;
-CREATE TABLE Attributes (
- id NUMBER(11,0) PRIMARY KEY,
- Name VARCHAR2(255) NOT NULL,
- Description VARCHAR2(255),
- Content CLOB,
- ContentType VARCHAR(16),
- ObjectType VARCHAR2(25) NOT NULL,
- ObjectId NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-CREATE INDEX Attributes1 on Attributes(Name);
-CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
-
-
-CREATE TABLE sessions (
- id VARCHAR2(32)
- CONSTRAINT Sessions_Key PRIMARY KEY,
- a_session CLOB,
- LastUpdated DATE
-);
-
diff --git a/rt/etc/schema.Pg b/rt/etc/schema.Pg
index 48525c8d7..e3006d073 100755
--- a/rt/etc/schema.Pg
+++ b/rt/etc/schema.Pg
@@ -539,6 +539,7 @@ CREATE TABLE CustomFields (
LastUpdatedBy integer NOT NULL DEFAULT 0 ,
LastUpdated TIMESTAMP NULL ,
Disabled integer NOT NULL DEFAULT 0 ,
+ Required integer NOT NULL DEFAULT 0 ,
PRIMARY KEY (id)
);
diff --git a/rt/etc/schema.mysql b/rt/etc/schema.mysql
deleted file mode 100755
index b7d53f884..000000000
--- a/rt/etc/schema.mysql
+++ /dev/null
@@ -1,463 +0,0 @@
-# {{{ 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);
-
-# }}}
-
-# {{{ 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 varchar(255) 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
index 172e477c1..173570219 100755
--- a/rt/etc/schema.mysql-4.1
+++ b/rt/etc/schema.mysql-4.1
@@ -386,6 +386,7 @@ CREATE TABLE CustomFields (
LastUpdatedBy integer NOT NULL DEFAULT 0 ,
LastUpdated DATETIME NULL ,
Disabled int2 NOT NULL DEFAULT 0 ,
+ Required int2 NOT NULL DEFAULT 0 ,
PRIMARY KEY (id)
) TYPE=InnoDB CHARACTER SET utf8;
diff --git a/rt/etc/upgrade/2.1.71 b/rt/etc/upgrade/2.1.71
deleted file mode 100644
index cb89a3ac3..000000000
--- a/rt/etc/upgrade/2.1.71
+++ /dev/null
@@ -1,211 +0,0 @@
-@Queues = ( {
- Name => '___Approvals',
- Description => 'A system-internal queue for the approvals system',
- Disabled => 2,
- }
-);
-
-
-
-
-
-# {{{ Templates
-@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::WebURL}Approvals/Display.html?id={$Ticket->id}
-to approve or reject this ticket, or {$RT::WebURL}Approvals/ to
-batch-process all your pending approvals.
-
--------------------------------------------------------------------------
-{$Transaction->Content()}
-'
- },
-);
-
-# }}}
-
-1;
-
-@ScripActions = (
- { Name => 'Open Tickets',
- Description => 'Open tickets on correspondence',
- ExecModule => 'AutoOpen' },
-
-);
-
- @Scrips = (
- { ScripCondition => 'On Correspond',
- ScripAction => 'Open Tickets',
- Template => 'Blank',
- Queue => '0'
- },
- { ScripCondition => 'On Create',
- ScripAction => 'AutoReply To Requestors',
- Template => 'AutoReply' },
- { ScripCondition => 'On Create',
- ScripAction => 'Notify AdminCcs',
- Template => 'Transaction' },
- { ScripCondition => 'On Correspond',
- ScripAction => 'Notify AdminCcs',
- Template => 'Admin Correspondence' },
- { ScripCondition => 'On Correspond',
- ScripAction => 'Notify Requestors And Ccs',
- Template => 'Correspondence' },
- { ScripCondition => 'On Correspond',
- ScripAction => 'Notify Other Recipients',
- Template => 'Correspondence' },
- { ScripCondition => 'On Comment',
- ScripAction => 'Notify AdminCcs As Comment',
- Template => 'Admin Comment' },
- { ScripCondition => 'On Comment',
- ScripAction => 'Notify Other Recipients As Comment',
- Template => 'Correspondence' },
- { 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 => 'On Create',
- ScripAction => 'Notify AdminCcs',
- 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',
- CustomCommitCode => q[
-# ------------------------------------------------------------------- #
-return(1) unless ( lc($self->TransactionObj->NewValue) eq "rejected" or
- lc($self->TransactionObj->NewValue) eq "deleted" );
-
-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->Correspond(
- Content => $self->loc("Your request was rejected."),
- );
- $obj->SetStatus(
- Status => 'rejected',
- Force => 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,
- );
- }
-}
-
-return 1;
-# ------------------------------------------------------------------- #
- ],
- CustomPrepareCode => '1',
- Template => 'Admin Comment',
- },
- {
- 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 => 'return(1);',
- CustomCommitCode => q[
-# ------------------------------------------------------------------- #
-return(1) unless ($self->TicketObj->Type eq 'approval');
-
-foreach my $obj ($self->TicketObj->AllDependedOnBy( Type => 'ticket' )) {
- $obj->Correspond(
- 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
- $self->TicketObj->Transactions->Last->Content,
- ),
- _reopen => 0,
- );
-}
-
-return 1;
-# ------------------------------------------------------------------- #
- ],
- Template => 'Admin Comment'
- },
- {
- 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 => 'return(1);',
- CustomCommitCode => 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;
-
-while (my $link = $links->Next) {
- my $obj = $link->BaseObj;
- next if ($obj->HasUnresolvedDependencies( Type => 'approval' ));
-
- if ($obj->Type eq 'ticket') {
- $obj->Correspond(
- Content => $self->loc("Your request has been approved."),
- _reopen => 0,
- );
- }
- elsif ($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,);
- }
- }
-}
-
-return 1;
-# ------------------------------------------------------------------- #
- ],
- Template => 'Admin Comment',
- },
-);
-
-# }}}
-
diff --git a/rt/html/Admin/CustomFields/GroupRights.html b/rt/html/Admin/CustomFields/GroupRights.html
deleted file mode 100644
index 86dd0d2dd..000000000
--- a/rt/html/Admin/CustomFields/GroupRights.html
+++ /dev/null
@@ -1,119 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-% $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 $Groups;
-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/html/Admin/CustomFields/Modify.html b/rt/html/Admin/CustomFields/Modify.html
deleted file mode 100644
index e3dfad7b2..000000000
--- a/rt/html/Admin/CustomFields/Modify.html
+++ /dev/null
@@ -1,258 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<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 => [
- '(?#Mandatory).',
- '(?#Digits)^[\d.]+$',
- '(?#Year)^[12]\d{3}$',
- ],
-&>
-</td></tr>
-</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%> /> <&|/l&>Enabled (Unchecking this box disables this custom field)</&>
-</td>
-</tr>
-<tr>
-<td class="label"><&|/l&>Link values to</&></td>
-</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>
-<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>
-
-
-
-</table>
-<br />
-% if ($CustomFieldObj->Id && $CustomFieldObj->IsSelectionType) {
-<h2><&|/l&>Values</&></h2>
-<div>
-<& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &>
-<& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &>
-</div>
-% }
-<&/Elements/Submit&>
-</form>
-
-
-
-<%INIT>
-
-
-
-my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} );
-my ( $title, @results, $EnabledChecked, $Disabled);
-$EnabledChecked = "CHECKED";
-
-if ( !$id ) {
- $title = loc("Create a CustomField");
- $id = 'new';
-}
-else {
-
- if ( $id eq 'new' ) {
- my ( $val, $msg ) = $CustomFieldObj->Create(Name => $Name,
- TypeComposite => $TypeComposite,
- LookupType => $LookupType,
- Description => $Description,
- Pattern => $Pattern,);
- $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() );
-
- my @attribs = qw( Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
- my @aresults = UpdateRecordObject( AttributesRef => \@attribs,
- Object => $CustomFieldObj,
- ARGSRef => \%ARGS );
-
- push @results, @aresults;
-
- #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 != $CustomFieldObj->Disabled) ) {
- my ($code, $msg) = $CustomFieldObj->SetDisabled($Disabled);
- push @results, loc('Enabled status: [_1]', loc_fuzzy($msg));
- }
-
- if ($CustomFieldObj->Disabled()) {
- $EnabledChecked ="";
- }
- }
-
- $id = $CustomFieldObj->id;
-}
-
-
-
-
-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+)$/);
- 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 = $paramtag.$value->Id."-".$attr;
-
- if ( $ARGS{$param} && ($value->$attr() ne $ARGS{$param})) {
- my $mutator = "Set$attr";
- my ($id, $msg) = $value->$mutator($ARGS{$param});
- push (@results, $msg);
- }
- }
-
-
-}
-
-
-
-# Add any new values
-if ($ARGS{$paramtag."new-Name"}) {
- my ($id, $msg) = $CustomFieldObj->AddValue (
- map { $_ => $ARGS{$paramtag."new-$_"} }
- qw( Name Description SortOrder Category )
- );
- push (@results, $msg);
-}
-
-my $current_tab;
-if ($ARGS{'Create'}){
- $current_tab = "Admin/CustomFields/Modify.html?Create=1";
-} else {
- $current_tab = "Admin/CustomFields/Modify.html?id=".$id;
- }
-
-
-</%INIT>
-<%ARGS>
-$id => undef
-$TypeComposite => undef
-$LookupType => undef
-$MaxValues => undef
-$SortOrder => undef
-$Description => undef
-$Pattern => undef
-$Name => undef
-$SetEnabled => undef
-$Enabled => undef
-</%ARGS>
diff --git a/rt/html/Admin/CustomFields/Objects.html b/rt/html/Admin/CustomFields/Objects.html
deleted file mode 100644
index d5a7c35d6..000000000
--- a/rt/html/Admin/CustomFields/Objects.html
+++ /dev/null
@@ -1,147 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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'});
-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/html/Admin/CustomFields/UserRights.html b/rt/html/Admin/CustomFields/UserRights.html
deleted file mode 100644
index 01158fde9..000000000
--- a/rt/html/Admin/CustomFields/UserRights.html
+++ /dev/null
@@ -1,170 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
- <% $UserObj->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>
-
- #Update the acls.
- my @results;
-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 $principal = RT::Principal->new($session{'CurrentUser'});
- $principal->Load($principal_id);
- my $obj;
-
- if ($object_type eq 'RT::CustomField') {
- $obj = RT::CustomField->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);
- }
- }
- 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::CustomField') {
- $obj = RT::CustomField->new($session{'CurrentUser'});
- $obj->Load($object_id);
- } else {
- push (@results, loc("System Error").
- loc("Rights could not be revoked for [_1]",
-$object_type));
- next;
- }
- my ($val, $msg) = $principal->RevokeRight(Object => $obj, Right =>
-$right);
- push (@results, $msg);
- }
-}
-
-
-# {{{ 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/html/Admin/CustomFields/index.html b/rt/html/Admin/CustomFields/index.html
deleted file mode 100644
index 49a56ea2f..000000000
--- a/rt/html/Admin/CustomFields/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) {
-% $CustomFieldObj->CurrentUserHasRight('AdminCustomField') or next;
-% 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::WebPath%>/Admin/CustomFields/index.html" method="get">
-<&|/l&>Only show custom fields for:</&>
-<select name="type">
-% for (@types) {
-<option value="<% $_->[1] %>"><% $_->[0] %></option>
-% }
-</select> <input type="submit" value="<%loc('Go!')%>" />
-</form>
-
-<%args>
-$type => undef
-</%args>
-<%INIT>
-my $CustomFields = RT::CustomFields->new($session{'CurrentUser'});
-$CustomFields->UnLimit();
-$CustomFields->LimitToLookupType($type) if defined $type;
-$CustomFields->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'Name' } );
-</%INIT>
diff --git a/rt/html/Admin/Elements/AddCustomFieldValue b/rt/html/Admin/Elements/AddCustomFieldValue
deleted file mode 100644
index 82a4a6e8e..000000000
--- a/rt/html/Admin/Elements/AddCustomFieldValue
+++ /dev/null
@@ -1,74 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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><&|/l&>Add Value</&></b>
-<table border="0">
-<tr><td>
-<&|/l&>Sort</&>:<br />
-<input size="3" name="CustomField-<%$CustomField->Id%>-Value-new-SortOrder" />
-</td>
-<td>
-<&|/l&>Name</&>:<br />
-<input type="text" size="30" name="CustomField-<%$CustomField->Id%>-Value-new-Name" />
-</td>
-<td>
-<&|/l&>Description</&>:<br />
-<input type="text" size="50" name="CustomField-<%$CustomField->Id%>-Value-new-Description" />
-</td>
-% if ($CustomField->Type ne 'Combobox') {
-<td>
-<&|/l&>Category</&>:<br />
-<input type="text" size="10" name="CustomField-<%$CustomField->Id%>-Value-new-Category" />
-</td>
-% }
-</tr>
-</table>
-<%init>
-</%init>
-<%args>
-$CustomField => undef
-</%args>
diff --git a/rt/html/Admin/Elements/ConfigureMyRT b/rt/html/Admin/Elements/ConfigureMyRT
deleted file mode 100644
index a111fa5e3..000000000
--- a/rt/html/Admin/Elements/ConfigureMyRT
+++ /dev/null
@@ -1,80 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-</%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,
- 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/html/Admin/Elements/CreateUserCalled b/rt/html/Admin/Elements/CreateUserCalled
deleted file mode 100644
index b7ef0bae3..000000000
--- a/rt/html/Admin/Elements/CreateUserCalled
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Admin/Elements/CustomFieldTabs b/rt/html/Admin/Elements/CustomFieldTabs
deleted file mode 100644
index 0043ebac6..000000000
--- a/rt/html/Admin/Elements/CustomFieldTabs
+++ /dev/null
@@ -1,118 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/io) {
- $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 custom field'),
- path => "Admin/CustomFields/",
- };
- $tabs->{"B"} = { title => loc('New custom field'),
- path => "Admin/CustomFields/Modify.html?Create=1",
- separator => 1,
- };
-}
-
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
-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/html/Admin/Elements/EditCustomField b/rt/html/Admin/Elements/EditCustomField
deleted file mode 100644
index e19c00bb5..000000000
--- a/rt/html/Admin/Elements/EditCustomField
+++ /dev/null
@@ -1,159 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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";
-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));
- }
- push @results, $msg;
- $CustomFieldObj->SetSortOrder($CustomFieldObj->id);
- $title = loc('Created CustomField [_1]', $CustomFieldObj->Name());
- } else {
- $CustomFieldObj->Load($CustomField) || Abort(loc('No CustomField'));
- $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/html/Admin/Elements/EditCustomFieldValues b/rt/html/Admin/Elements/EditCustomFieldValues
deleted file mode 100644
index 85927795a..000000000
--- a/rt/html/Admin/Elements/EditCustomFieldValues
+++ /dev/null
@@ -1,96 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 (!$values->Count) {
-<p><em><&|/l&>(no values)</&></em></p>
-% return;
-% }
-<i><&|/l&>(Check box to delete)</&></i>
-<table>
-<tr>
-<td>&nbsp;</td>
-<td><&|/l&>Sort</&></td>
-<td><&|/l&>Name</&></td>
-<td><&|/l&>Description</&></td>
-% if ($CustomField->Type ne 'Combobox') {
-<td><&|/l&>Category</&></td>
-% }
-</tr>
-% while (my $value = $values->Next) {
-<tr>
-<td>
-<input type="checkbox" class="checkbox" name="Delete-CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>" />
-</td>
-<td>
-<input size="3" name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-SortOrder" value="<%$value->SortOrder%>" />
-</td>
-<td>
-<input type="text" size="30" name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-Name" value="<%$value->Name%>" />
-</td>
-<td>
-<font size="-1">
-<input type="text" size="50" name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-Description" value="<%$value->Description%>" />
-</font>
-</td>
-% if ($CustomField->Type ne 'Combobox') {
-<td>
-<font size="-1">
-<input type="text" size="10" name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-Category" value="<%$value->Category%>" />
-</font>
-</td>
-% }
-</tr>
-% }
-</table>
-<%init>
-
-my $values = $CustomField->ValuesObj();
-
-</%init>
-<%args>
-$CustomField => undef
-</%args>
diff --git a/rt/html/Admin/Elements/EditCustomFields b/rt/html/Admin/Elements/EditCustomFields
deleted file mode 100644
index 77eadbd2e..000000000
--- a/rt/html/Admin/Elements/EditCustomFields
+++ /dev/null
@@ -1,205 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Admin/Elements/EditQueueWatchers b/rt/html/Admin/Elements/EditQueueWatchers
deleted file mode 100644
index 1a1f18b8a..000000000
--- a/rt/html/Admin/Elements/EditQueueWatchers
+++ /dev/null
@@ -1,78 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 {
-<i><&|/l&>(Check box to delete)</&></i><br /><br />
-<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::WebPath%>/Admin/Users/Modify.html?id=<%$watcher->MemberObj->ObjectId%>">
-% } else {
-<a href="<%$RT::WebPath%>/Admin/Groups/Modify.html?id=<%$watcher->MemberObj->ObjectId%>">
-% }
-<%$watcher->MemberObj->Object->Name%></a>
-% }
-% }
-</ul>
-
-<%INIT>
-my $Members = $Watchers->MembersObj;
-</%INIT>
-
-<%ARGS>
-$QueueObj => undef
-$Watchers => undef
-</%ARGS>
-
-
-
diff --git a/rt/html/Admin/Elements/EditScrip b/rt/html/Admin/Elements/EditScrip
deleted file mode 100644
index f3ad18b87..000000000
--- a/rt/html/Admin/Elements/EditScrip
+++ /dev/null
@@ -1,183 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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,
- Caption => loc("Be sure to save your changes"),
- 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>
-<textarea cols="80" rows="5" name="Scrip-<% $id %>-CustomIsApplicableCode"><% $ARGS{"Scrip-$id-CustomIsApplicableCode"} || $scrip->CustomIsApplicableCode %></textarea>
-</td></tr>
-
-<tr><td class="labeltop"><&|/l&>Custom action preparation code</&>:</td><td>
-<textarea cols="80" rows="5" name="Scrip-<% $id %>-CustomPrepareCode"><% $ARGS{"Scrip-$id-CustomPrepareCode"} || $scrip->CustomPrepareCode %></textarea>
-</td></tr>
-
-<tr><td class="labeltop"><&|/l&>Custom action cleanup code</&>:</td><td>
-<textarea cols="80" rows="5" name="Scrip-<% $id %>-CustomCommitCode"><% $ARGS{"Scrip-$id-CustomCommitCode"} || $scrip->CustomCommitCode %></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('Update');
-}
-
-unless ( $id ) {
- $id = 'new';
- $SubmitLabel = loc('Create');
-}
-
-</%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"},
- );
-}
-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/html/Admin/Elements/EditScrips b/rt/html/Admin/Elements/EditScrips
deleted file mode 100644
index 40a526d50..000000000
--- a/rt/html/Admin/Elements/EditScrips
+++ /dev/null
@@ -1,125 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-% if ($Scrips->Count == 0 ) {
-<p><i><&|/l&>(No scrips)</&></i></p>
-% } else {
-<table width="100%">
-<p><i><&|/l&>(Check box to delete)</&></i></p>
-
-% while (my $scrip = $Scrips->Next ) {
-<tr>
-<td>
-<input type="checkbox" class="checkbox" name="DeleteScrip-<%$scrip->Id%>" value="1" />
-</td>
-<td>
-<a href="Scrip.html?id=<%$scrip->Id%>&Queue=<%$id%>"><% $scrip->Description || "<i>(".loc('no value').")</i>" |n %></a><br />
-<small><&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name) &>[_1] [_2] with template [_3]</&></small>
-</td>
-</tr>
-% }
-
-</table>
-
-% }
-<& /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);
-}
-
-if ($QueueObj->id) {
- $Scrips->LimitToQueue($id);
-}
-else {
- $Scrips->LimitToGlobal();
-}
-
-$Scrips->OrderBy( FIELD => 'description' );
-
-
-
-# {{{ deal with modifying and deleting existing scrips
-foreach my $key (keys %ARGS) {
- # {{{ if we're trying to delete the scrip
- if ($key =~ /^DeleteScrip-(\d+)/) {
- my $id = $1;
- my $scrip = new RT::Scrip($session{'CurrentUser'});
- $scrip->Load($id);
- my ($retval, $msg) = $scrip->Delete;
- if ($retval) {
- push @actions, loc("Scrip deleted");
- }
- else {
- push @actions, $msg;
- }
- }
- # }}}
-}
-# }}}
-</%init>
-
-<%ARGS>
-$id => undef
-$title => undef
-</%ARGS>
diff --git a/rt/html/Admin/Elements/EditTemplates b/rt/html/Admin/Elements/EditTemplates
deleted file mode 100644
index 98812991d..000000000
--- a/rt/html/Admin/Elements/EditTemplates
+++ /dev/null
@@ -1,128 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>" />
-
-% if ($Templates->Count == 0 ) {
-<p><i><&|/l&>(No templates)</&></i></p>
-% } else {
-<table width="100%">
-<tr>
-<th>
-<i><&|/l&>(Check box to delete)</&></i>
-</th>
-<th>
-</th>
-</tr>
-% my $count;
-% while (my $TemplateObj = $Templates->Next) {
-<tr>
-<td>
-<input type="checkbox" class="checkbox" name="DeleteTemplate-<%$TemplateObj->Id%>" value="1" />
-</td>
-<td>
-<a href="Template.html?Queue=<%$id%>&Template=<%$TemplateObj->id()%>">
-<strong><% loc($TemplateObj->Name) %></strong></a>
-<br /><% loc($TemplateObj->Description) %>
-</td>
-</tr>
-
-% }
-</table>
-% }
-
-<& /Elements/Submit, Label => loc('Delete Template') &>
-</form>
-
-<%INIT>
-my $Templates = RT::Templates->new($session{'CurrentUser'});
-my $QueueObj = RT::Queue->new($session{'CurrentUser'});
-my @actions;
-
-if ($id) {
- $QueueObj->Load($id);
-}
-
-if ($QueueObj->id) {
- $Templates->LimitToQueue($id);
-}
-else {
- $Templates->LimitToGlobal();
-}
-
-# Now let callbacks add their extra limits
-$m->comp('/Elements/Callback', Templates => $Templates, %ARGS);
-
-# {{{ deal with deleting existing templates
-foreach my $key (keys %ARGS) {
- # {{{ if we're trying to delete the template
- if ($key =~ /^DeleteTemplate-(\d+)/) {
- my $id = $1;
- my $TemplateObj = RT::Template->new($session{'CurrentUser'});
- $TemplateObj->Load($id);
- my ($retval, $msg) = $TemplateObj->Delete;
- if ($retval) {
- push @actions, loc("Template deleted");
- }
- else {
- push @actions, $msg;
- }
- }
- # }}}
-}
-# }}}
-</%INIT>
-<%ARGS>
-$id => 0
-$title => undef
-$Move => undef
-$Source => undef
-$Template => undef
-</%ARGS>
diff --git a/rt/html/Admin/Elements/EditUserComments b/rt/html/Admin/Elements/EditUserComments
deleted file mode 100644
index 40d8b19b1..000000000
--- a/rt/html/Admin/Elements/EditUserComments
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/GlobalCustomFieldTabs b/rt/html/Admin/Elements/GlobalCustomFieldTabs
deleted file mode 100755
index ba315b03c..000000000
--- a/rt/html/Admin/Elements/GlobalCustomFieldTabs
+++ /dev/null
@@ -1,95 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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('Modify scrips which apply to all queues'),
- path => 'Admin/Global/CustomFields/Users.html',
- },
- B => { title => loc('Groups'),
- text => loc('Edit system templates'),
- path => 'Admin/Global/CustomFields/Groups.html',
- },
-
- F => { title => loc('Tickets'),
- text => loc('Modify global custom fields'),
- path => 'Admin/Global/CustomFields/Queue-Tickets.html',
- },
-
- G => { title => loc('Ticket Transactions'),
- text => loc('Modify global group rights'),
- path => 'Admin/Global/CustomFields/Queue-Transactions.html',
- },
-
-};
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
- 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/html/Admin/Elements/GroupTabs b/rt/html/Admin/Elements/GroupTabs
deleted file mode 100644
index ade02dce5..000000000
--- a/rt/html/Admin/Elements/GroupTabs
+++ /dev/null
@@ -1,102 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 group'),
- path => "Admin/Groups/", };
-$tabs->{"B"} = { title => loc('New group'),
- path => "Admin/Groups/Modify.html?Create=1",
- separator => 1, };
-
-# Now let callbacks add their extra tabs
-$m->comp( '/Elements/Callback', tabs => $tabs, %ARGS );
-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/html/Admin/Elements/Header b/rt/html/Admin/Elements/Header
deleted file mode 100644
index eeeab3070..000000000
--- a/rt/html/Admin/Elements/Header
+++ /dev/null
@@ -1,52 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/ListGlobalCustomFields b/rt/html/Admin/Elements/ListGlobalCustomFields
deleted file mode 100644
index 55d7d32db..000000000
--- a/rt/html/Admin/Elements/ListGlobalCustomFields
+++ /dev/null
@@ -1,61 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/ListGlobalScrips b/rt/html/Admin/Elements/ListGlobalScrips
deleted file mode 100644
index be819ec30..000000000
--- a/rt/html/Admin/Elements/ListGlobalScrips
+++ /dev/null
@@ -1,76 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 ($Scrips->Count == 0) {
-
-<p><i><&|/l&>(No scrips)</&></i></p>
-
-% } else {
-
-<ul>
-
-% while (my $scrip = $Scrips->Next ) {
-<li>
-<a href="<%$RT::WebPath%>/Admin/Global/Scrip.html?id=<%$scrip->Id%>&Queue=<%0%>">
-% if ($scrip->Description) {
-<% $scrip->Description %>
-% } else {
-<i>(<&|/l, $scrip->Id&>Scrip #[_1]</&>)</i>
-% }
-</a><br />
-<small><&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name) &>[_1] [_2] with template [_3]</&></small>
-</li>
-% }
-
-</ul>
-
-% }
-
-<%init>
-my $Scrips = new RT::Scrips ($session{'CurrentUser'});
-$Scrips->LimitToGlobal();
-</%INIT>
diff --git a/rt/html/Admin/Elements/ModifyQueue b/rt/html/Admin/Elements/ModifyQueue
deleted file mode 100644
index 36f9ce17f..000000000
--- a/rt/html/Admin/Elements/ModifyQueue
+++ /dev/null
@@ -1,78 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<& /Elements/TitleBoxStart, title => loc('Editing Configuration for queue [_1]', $QueueObj->Id) &>
-
-<FORM ACTION="<%$RT::WebPath%>/Admin/Queues/Modify.html" METHOD=POST>
-<INPUT TYPE=HIDDEN NAME=id VALUE="<%$QueueObj->Id%>">
-<TABLE>
-<TR><TD ALIGN=RIGHT>
-<&|/l&>Queue Name</&>:
-</TD>
-<TD><INPUT name="Name" value="<%$QueueObj->Name%>"></TD>
-</TR><TR>
-<TD ALIGN=RIGHT>
-<&|/l&>Description</&>:</TD><TD COLSPAN=3><INPUT name="Description" value="<%$QueueObj->Description%>" size=60></TD></TR>
-<TR>
-<TD ALIGN=RIGHT>
-<&|/l&>Correspondence Address</&>:
-</TD><TD>
-<INPUT name="CorrespondAddress" value="<%$QueueObj->CorrespondAddress%>">
-</TD>
-<TD ALIGN=RIGHT>
-
-<&|/l&>Comment Address</&>: </TD><TD>
-<INPUT NAME="CommentAddress" value="<%$QueueObj->CommentAddress%>">
-</TD>
-</TR><TR>
-
-<TD ALIGN=RIGHT>
-<&|/l&>Priority starts at</&>:
-</TD><TD><INPUT NAME="InitialPriority" value="<%$QueueObj->InitialPriority %>">
-</TD>
-<TD ALIGN=RIGHT>
-<&|/l&>Over time, priority moves toward</&>:
-</TD><TD><INPUT NAME="FinalPriority" value="<%$QueueObj->FinalPriority %>">
-</TD>
-</TR>
-<TR>
-<TD ALIGN=RIGHT>
-<&|/l&>Requests should be due in</&>:
-</TD><TD>
-<INPUT NAME="DefaultDueIn" VALUE="<%$QueueObj->DefaultDueIn%>"> <&|/l&>days</&>.
-</TD>
-</TR>
-</TABLE>
-<& /Elements/Submit, Label => loc('Save Changes') &>
-</form>
-<& /Elements/TitleBoxEnd &>
-
-<%INIT>
-
-</%INIT>
-
-<%ARGS>
-
-
-$QueueObj => undef
-</%ARGS>
diff --git a/rt/html/Admin/Elements/ModifyTemplate b/rt/html/Admin/Elements/ModifyTemplate
deleted file mode 100644
index 377379b16..000000000
--- a/rt/html/Admin/Elements/ModifyTemplate
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/ModifyUser b/rt/html/Admin/Elements/ModifyUser
deleted file mode 100644
index 2faefefaa..000000000
--- a/rt/html/Admin/Elements/ModifyUser
+++ /dev/null
@@ -1,99 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<& /Elements/TitleBoxStart, title => loc('Editing Configuration for user [_1]', $UserObj->Name) &>
-
-<FORM ACTION="<%$RT::WebPath%>/Admin/Users/Modify.html" METHOD=POST>
-<INPUT TYPE=HIDDEN NAME=id VALUE="<%$UserObj->Id%>">
-
-<&|/l&>Name</&>: <input name="Name" value="<%$UserObj->Name%>">
-<BR>
-<&|/l&>New Password</&>: <input type=password name="Pass1"><BR>
-<&|/l&>Retype Password</&>: <input type=password name="Pass2"><BR>
-
-<&|/l&>Comments</&>: <TEXTAREA name="Comments" COLS=80 ROWS=5 WRAP=VIRTUAL>
-<%$UserObj->Comments%></TEXTAREA>
-
-<BR>
-<&|/l&>Signature</&>: <TEXTAREA COLS=80 ROWS=5 name="Signature" WRAP=HARD>
-<%$UserObj->Signature%></TEXTAREA>
-<BR>
-<&|/l&>EmailAddress</&>: <input name="EmailAddress" value="<%$UserObj->EmailAddress%>">
-<BR>
-<&|/l&>FreeformContactInfo</&>: <input name="FreeformContactInfo" value="<%$UserObj->FreeformContactInfo%>">
-<BR>
-<&|/l&>Organization</&>: <input name="Organization" value="<%$UserObj->Organization%>">
-<BR>
-<&|/l&>RealName</&>: <input name="RealName" value="<%$UserObj->RealName%>">
-<BR>
-<&|/l&>NickName</&>: <input name="NickName" value="<%$UserObj->NickName%>">
-<BR>
-<&|/l&>Lang</&>: <input name="Lang" value="<%$UserObj->Lang%>">
-<BR>
-<&|/l&>EmailEncoding</&>: <input name="EmailEncoding" value="<%$UserObj->EmailEncoding%>">
-<BR>
-<&|/l&>WebEncoding</&>: <input name="WebEncoding" value="<%$UserObj->WebEncoding%>">
-<BR>
-<&|/l&>ExternalContactInfoId</&>: <input name="ExternalContactInfoId" value="<%$UserObj->ExternalContactInfoId%>">
-<BR>
-<&|/l&>ContactInfoSystem</&>: <input name="ContactInfoSystem" value="<%$UserObj->ContactInfoSystem%>">
-<BR>
-<&|/l&>UnixUsername</&>: <input name="Gecos" value="<%$UserObj->Gecos%>">
-<BR>
-<&|/l&>ExternalAuthId</&>: <input name="ExternalAuthId" value="<%$UserObj->ExternalAuthId%>">
-<BR>
-<&|/l&>AuthSystem</&>: <input name="AuthSystem" value="<%$UserObj->AuthSystem%>">
-<BR>
-<&|/l&>HomePhone</&>: <input name="HomePhone" value="<%$UserObj->HomePhone%>">
-<BR>
-<&|/l&>WorkPhone</&>: <input name="WorkPhone" value="<%$UserObj->WorkPhone%>">
-<BR>
-<&|/l&>MobilePhone</&>: <input name="MobilePhone" value="<%$UserObj->MobilePhone%>">
-<BR>
-<&|/l&>PagerPhone</&>: <input name="PagerPhone" value="<%$UserObj->PagerPhone%>">
-<BR>
-<&|/l&>Address1</&>: <input name="Address1" value="<%$UserObj->Address1%>">
-<BR>
-<&|/l&>Address2</&>: <input name="Address2" value="<%$UserObj->Address2%>">
-<BR>
-<&|/l&>City</&>: <input name="City" value="<%$UserObj->City%>">
-<BR>
-<&|/l&>State</&>: <input name="State" value="<%$UserObj->State%>">
-<BR>
-<&|/l&>Zip</&>: <input name="Zip" value="<%$UserObj->Zip%>">
-<BR>
-<&|/l&>Country</&>: <input name="Country" value="<%$UserObj->Country%>">
-<BR>
-<& /Elements/Submit, Label => loc('Save Changes') &>
-</form>
-<& /Elements/TitleBoxEnd &>
-
-<%INIT>
-
-</%INIT>
-
-<%ARGS>
-
-
-$UserObj => undef
-</%ARGS>
diff --git a/rt/html/Admin/Elements/ObjectCustomFields b/rt/html/Admin/Elements/ObjectCustomFields
deleted file mode 100644
index d618878a7..000000000
--- a/rt/html/Admin/Elements/ObjectCustomFields
+++ /dev/null
@@ -1,111 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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));
-
-
-
-my $Type = $1;
-my $Types = $Type.'s';
-my $ObjectTabs;
-my $Object = $ObjectType->new($session{'CurrentUser'});
-
-
-my $QualifiedType;
-my $FriendlySubTypes;
-if ($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));
- $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/html/Admin/Elements/PickCustomFields b/rt/html/Admin/Elements/PickCustomFields
deleted file mode 100644
index c3b5550b6..000000000
--- a/rt/html/Admin/Elements/PickCustomFields
+++ /dev/null
@@ -1,98 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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' : '' %>
-/>
- </td>
-% }
- <td valign="top">
- <a href="<%$RT::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::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::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/html/Admin/Elements/PickObjects b/rt/html/Admin/Elements/PickObjects
deleted file mode 100644
index b2da49519..000000000
--- a/rt/html/Admin/Elements/PickObjects
+++ /dev/null
@@ -1,81 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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' : ''%>
-/>
- </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/html/Admin/Elements/QueueRightsForUser b/rt/html/Admin/Elements/QueueRightsForUser
deleted file mode 100644
index 52bb1ff17..000000000
--- a/rt/html/Admin/Elements/QueueRightsForUser
+++ /dev/null
@@ -1,64 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/QueueTabs b/rt/html/Admin/Elements/QueueTabs
deleted file mode 100644
index 379d152a9..000000000
--- a/rt/html/Admin/Elements/QueueTabs
+++ /dev/null
@@ -1,120 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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,
- }
- }
- };
-}
-if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminQueue')) {
- $tabs->{"A"} = { title => loc('Select queue'),
- path => "Admin/Queues/",
- };
- $tabs->{"B"} = { title => loc('New queue'),
- path => "Admin/Queues/Modify.html?Create=1",
- separator => 1, };
-}
-
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-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/html/Admin/Elements/SelectCustomFieldLookupType b/rt/html/Admin/Elements/SelectCustomFieldLookupType
deleted file mode 100644
index ebd380724..000000000
--- a/rt/html/Admin/Elements/SelectCustomFieldLookupType
+++ /dev/null
@@ -1,60 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>" <%$option eq $Default && "SELECTED"%>><% $cf->FriendlyLookupType($option) %></option>
-%}
-</select>
-<%INIT>
-my $cf = RT::CustomField->new($session{'CurrentUser'});
-
-</%INIT>
-<%ARGS>
-$Default=>undef
-$Name => 'LookupType'
-</%ARGS>
diff --git a/rt/html/Admin/Elements/SelectCustomFieldType b/rt/html/Admin/Elements/SelectCustomFieldType
deleted file mode 100644
index 7dd471300..000000000
--- a/rt/html/Admin/Elements/SelectCustomFieldType
+++ /dev/null
@@ -1,60 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && "SELECTED"%>><% $cf->FriendlyTypeComposite($option) %></option>
-%}
-</select>
-<%INIT>
-my $cf = RT::CustomField->new($session{'CurrentUser'});
-
-</%INIT>
-<%ARGS>
-$Default=>undef
-$Name => 'TypeComposite'
-</%ARGS>
diff --git a/rt/html/Admin/Elements/SelectGroups b/rt/html/Admin/Elements/SelectGroups
deleted file mode 100644
index c49f8aeba..000000000
--- a/rt/html/Admin/Elements/SelectGroups
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 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/html/Admin/Elements/SelectModifyGroup b/rt/html/Admin/Elements/SelectModifyGroup
deleted file mode 100644
index 7820e9fcd..000000000
--- a/rt/html/Admin/Elements/SelectModifyGroup
+++ /dev/null
@@ -1,57 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/SelectModifyQueue b/rt/html/Admin/Elements/SelectModifyQueue
deleted file mode 100644
index af24e2706..000000000
--- a/rt/html/Admin/Elements/SelectModifyQueue
+++ /dev/null
@@ -1,57 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Elements/SelectModifyUser b/rt/html/Admin/Elements/SelectModifyUser
deleted file mode 100644
index 73b67c84b..000000000
--- a/rt/html/Admin/Elements/SelectModifyUser
+++ /dev/null
@@ -1,73 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>: <%$user->Name%></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/html/Admin/Elements/SelectNewGroupMembers b/rt/html/Admin/Elements/SelectNewGroupMembers
deleted file mode 100644
index 623572951..000000000
--- a/rt/html/Admin/Elements/SelectNewGroupMembers
+++ /dev/null
@@ -1,99 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<select multiple name="<%$Name%>Users" size="10">
-%while (my $user = $users->Next) {
-%next if $SkipUsers->{$user->id};
-<option value="User-<%$user->id%>"><%$user->Name%></option>
-%}
-</select>
-<br />
-% }
-% if ($Show ne 'Users') {
-<b><&|/l&>Groups</&></b>
-<select 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/html/Admin/Elements/SelectRights b/rt/html/Admin/Elements/SelectRights
deleted file mode 100644
index a79c0f3f5..000000000
--- a/rt/html/Admin/Elements/SelectRights
+++ /dev/null
@@ -1,118 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
-% my %current_rights;
-<h3><&|/l&>Current rights</&></h3>
-% if ($ACLObj->Count() == 0) {
-<i><&|/l&>No rights granted.</&></i> <br />
-% } else {
-<i>(<&|/l&>Check box to revoke right</&>)</i> <br />
-% while (my $right = $ACLObj->Next()) {
-% if ($right->RightName) {
-% $current_rights{$right->RightName} = 1;
-<input type="checkbox" class="checkbox" value="<%$right->Id%>" name="RevokeRight-<%$ACLDesc%>-<%$right->RightName%>" /> <% loc($right->RightName) %><br />
-% }
-% }
-% }
-</td>
-<td valign="top">
-<h3><&|/l&>New rights</&></h3>
-<select size="5" multiple name="GrantRight-<%$ACLDesc%>">
-% foreach $right (sort keys %Rights) {
-% next if $current_rights{$right};
- <option value="<%$right%>"
- ><% loc($right) %></option>
-% }
-<option value="" selected><&|/l&>(no value)</&></option>
-</select>
-</td>
-</tr>
-</table>
-<%INIT>
- my ($right, $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/html/Admin/Elements/SelectScrip b/rt/html/Admin/Elements/SelectScrip
deleted file mode 100644
index 2ce3c2ea9..000000000
--- a/rt/html/Admin/Elements/SelectScrip
+++ /dev/null
@@ -1,72 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && 'SELECTED' %>
->-</option>
-%while (my $Scrip = $Scrips->Next) {
-<option value="<% $Scrip->Id %>"
-<% $Scrip->Id == $Default && 'SELECTED' %>
-><% 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/html/Admin/Elements/SelectScripAction b/rt/html/Admin/Elements/SelectScripAction
deleted file mode 100644
index 0bc82516a..000000000
--- a/rt/html/Admin/Elements/SelectScripAction
+++ /dev/null
@@ -1,73 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && 'SELECTED' %>
->-</option>
-%while (my $ScripAction = $ScripActions->Next) {
-<option value="<%$ScripAction->Id%>"
-<% defined $Default && $ScripAction->Id == $Default && 'SELECTED' %>
-><% 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/html/Admin/Elements/SelectScripCondition b/rt/html/Admin/Elements/SelectScripCondition
deleted file mode 100644
index 6d9201efa..000000000
--- a/rt/html/Admin/Elements/SelectScripCondition
+++ /dev/null
@@ -1,72 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && 'SELECTED' %>
->-</option>
-%while (my $ScripCondition = $ScripConditions->Next) {
-<option value="<%$ScripCondition->Id%>"
-<% defined $Default && $ScripCondition->Id == $Default && '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/html/Admin/Elements/SelectSingleOrMultiple b/rt/html/Admin/Elements/SelectSingleOrMultiple
deleted file mode 100644
index 1b13a911c..000000000
--- a/rt/html/Admin/Elements/SelectSingleOrMultiple
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>><&|/l&>Single</&></option>
- <option value="0" <%$MultipleDefault%>><&|/l&>Multiple</&></option>
- </select>
-
-
-<%INIT>
-my ($SingleDefault, $MultipleDefault);
-if ($Default == 1) {
- $SingleDefault = "SELECTED";
-}
-elsif ($Default == 0 ) {
- $MultipleDefault = "SELECTED";
-}
-
-</%INIT>
-<%ARGS>
-$Name => 'Single'
-$Default => 1
-</%ARGS>
diff --git a/rt/html/Admin/Elements/SelectStage b/rt/html/Admin/Elements/SelectStage
deleted file mode 100644
index f48f6845e..000000000
--- a/rt/html/Admin/Elements/SelectStage
+++ /dev/null
@@ -1,66 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) {
-<option value="<%$stage%>"
-<% ($stage eq $Default) && 'SELECTED' %>
-><% loc($stage) %>
-</option>
-% }
-<%INIT>
-if ($Default eq '') {
- $Default = 'TransactionCreate';
-}
-my @stages = 'TransactionCreate';
-push @stages, 'TransactionBatch' if $RT::UseTransactionBatch;
-push @stages, 'Disabled';
-</%INIT>
-<%ARGS>
-$Default => 'TransactionCreate'
-$Name => 'Stage'
-</%ARGS>
diff --git a/rt/html/Admin/Elements/SelectTemplate b/rt/html/Admin/Elements/SelectTemplate
deleted file mode 100644
index e42adfe62..000000000
--- a/rt/html/Admin/Elements/SelectTemplate
+++ /dev/null
@@ -1,87 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 'none' && 'SELECTED' %>
->-</option>
-%while (my $Template = $PrimaryTemplates->Next) {
-<option value="<%$Template->Id%>"
-<% ($Template->Id == $Default) && 'SELECTED' %>
-><% loc($Template->Name) %>
-</option>
-%}
-%while (my $Template = $OtherTemplates->Next) {
-<option value="<%$Template->Id%>"
-<% ($Template->Id == $Default) && 'SELECTED'%>
-><&|/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/html/Admin/Elements/SelectUsers b/rt/html/Admin/Elements/SelectUsers
deleted file mode 100644
index 5426f42aa..000000000
--- a/rt/html/Admin/Elements/SelectUsers
+++ /dev/null
@@ -1,64 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 name="<%$Name%>" size="10">
-%while (my $user = $users->Next) {
-<option value="<%$user->id%>"><%$user->Name%>
-%}
-</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/html/Admin/Elements/SystemTabs b/rt/html/Admin/Elements/SystemTabs
deleted file mode 100644
index afd611c81..000000000
--- a/rt/html/Admin/Elements/SystemTabs
+++ /dev/null
@@ -1,97 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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',
- },
-
-};
-
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
- 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/html/Admin/Elements/Tabs b/rt/html/Admin/Elements/Tabs
deleted file mode 100644
index 1fc54efdf..000000000
--- a/rt/html/Admin/Elements/Tabs
+++ /dev/null
@@ -1,93 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
- 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/html/Admin/Elements/ToolTabs b/rt/html/Admin/Elements/ToolTabs
deleted file mode 100755
index 94d19ca2f..000000000
--- a/rt/html/Admin/Elements/ToolTabs
+++ /dev/null
@@ -1,80 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Tools/',
- current_subtab => $current_tab,
- Title => $Title &>
-
-<%INIT>
- my $tabs = {
-
- A => { title => loc('System Configuration'),
- path => 'Admin/Tools/Configuration.html',
- }
-
-};
-
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
- 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/html/Admin/Elements/UserTabs b/rt/html/Admin/Elements/UserTabs
deleted file mode 100644
index c6050c147..000000000
--- a/rt/html/Admin/Elements/UserTabs
+++ /dev/null
@@ -1,113 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
- },
-# Scrips => { title => loc('Rights'),
-# path => "Admin/Users/Rights.html?id=".$id
-# }
-
- }
-}
-}
-if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminUsers')) {
- $tabs->{"A"} = { title => loc('Select user'),
- path => "Admin/Users/",
- };
- $tabs->{"B"} = { title => loc('New user'),
- path => "Admin/Users/Modify.html?Create=1",
- separator => 1,
- };
-}
-
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
-#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/html/Admin/Global/CustomField.html b/rt/html/Admin/Global/CustomField.html
deleted file mode 100644
index 3871d8998..000000000
--- a/rt/html/Admin/Global/CustomField.html
+++ /dev/null
@@ -1,86 +0,0 @@
-%# {{{ BEGIN BPS TAGGED BLOCK
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You 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
-<& /Admin/Elements/Header, Title => $title &>
-<& /Admin/Elements/SystemTabs,
- current_tab => 'Admin/Global/CustomFields.html',
- current_subtab => $current_subtab,
- subtabs => $subtabs,
- Title => $title &>
-
-<& /Admin/Elements/EditCustomField, title => $title, %ARGS &>
-
-<%INIT>
-my ($title, $current_subtab);
-
-my $subtabs = {
- A => { title => loc('Select custom field'),
- path => "Admin/Global/CustomFields.html"
- },
- B => { title => loc('New custom field'),
- path => "Admin/Global/CustomField.html?create=1&Queue=0",
- separator => 1,
- }
- };
-if ( $ARGS{'create'} ) {
- $current_subtab = "Admin/Global/CustomField.html?create=1&Queue=0";
- $title = loc('Create a CustomField which applies to all queues');
-}
-else {
- $current_subtab =
- "Admin/Global/CustomField.html?CustomField=" . $CustomField . "&Queue=0";
- $title = loc('Modify a CustomField which applies to all queues');
- $subtabs->{"C"} = {
- title => loc( 'Custom Field #[_1]', $CustomField ),
- path => "Admin/Global/CustomField.html?CustomField=" . $CustomField . "&Queue=0"
- };
-}
-</%INIT>
-<%ARGS>
-$CustomField => undef
-</%ARGS>
-<%ATTR>
-AutoFlush => 0
-</%ATTR>
diff --git a/rt/html/Admin/Global/CustomFields.html b/rt/html/Admin/Global/CustomFields.html
deleted file mode 100644
index 593040218..000000000
--- a/rt/html/Admin/Global/CustomFields.html
+++ /dev/null
@@ -1,69 +0,0 @@
-%# {{{ BEGIN BPS TAGGED BLOCK
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You 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
-<& /Admin/Elements/Header, Title => $title &>
-<& /Admin/Elements/SystemTabs,
- current_tab => 'Admin/Global/CustomFields.html',
- current_subtab => 'Admin/Global/CustomFields.html',
- subtabs => $subtabs,
- Title => $title &>
-
-<& /Admin/Elements/EditCustomFields, title => $title, %ARGS &>
-
-<%INIT>
-my $subtabs = {
- A => { title => loc('Select custom field'),
- path => "Admin/Global/CustomFields.html"
- },
- B => { title => loc('New custom field'),
- path => "Admin/Global/CustomField.html?create=1&Queue=0",
- separator => 1,
- }
- };
-my $title = loc("Modify Custom Fields which apply to all queues");
-</%INIT>
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/Admin/Global/CustomFields/Groups.html b/rt/html/Admin/Global/CustomFields/Groups.html
deleted file mode 100644
index fe2545a6f..000000000
--- a/rt/html/Admin/Global/CustomFields/Groups.html
+++ /dev/null
@@ -1,58 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Global/CustomFields/Queue-Tickets.html b/rt/html/Admin/Global/CustomFields/Queue-Tickets.html
deleted file mode 100755
index 8ef308315..000000000
--- a/rt/html/Admin/Global/CustomFields/Queue-Tickets.html
+++ /dev/null
@@ -1,58 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Global/CustomFields/Queue-Transactions.html b/rt/html/Admin/Global/CustomFields/Queue-Transactions.html
deleted file mode 100755
index 98aee5f89..000000000
--- a/rt/html/Admin/Global/CustomFields/Queue-Transactions.html
+++ /dev/null
@@ -1,58 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Global/CustomFields/Users.html b/rt/html/Admin/Global/CustomFields/Users.html
deleted file mode 100644
index 11133a504..000000000
--- a/rt/html/Admin/Global/CustomFields/Users.html
+++ /dev/null
@@ -1,58 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Global/CustomFields/index.html b/rt/html/Admin/Global/CustomFields/index.html
deleted file mode 100644
index 3ef08f869..000000000
--- a/rt/html/Admin/Global/CustomFields/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Callback, tabs => $tabs, %ARGS &>
-<& /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',
- },
-
- 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->comp('/Elements/Callback', tabs => $tabs);
-</%INIT>
diff --git a/rt/html/Admin/Global/GroupRights.html b/rt/html/Admin/Global/GroupRights.html
deleted file mode 100644
index 3101eae75..000000000
--- a/rt/html/Admin/Global/GroupRights.html
+++ /dev/null
@@ -1,123 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Global/MyRT.html b/rt/html/Admin/Global/MyRT.html
deleted file mode 100644
index 52793f4dd..000000000
--- a/rt/html/Admin/Global/MyRT.html
+++ /dev/null
@@ -1,111 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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,
- 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/html/Admin/Global/Scrip.html b/rt/html/Admin/Global/Scrip.html
deleted file mode 100644
index d4af7d5bd..000000000
--- a/rt/html/Admin/Global/Scrip.html
+++ /dev/null
@@ -1,87 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 scrip'),
- path => "Admin/Global/Scrips.html",
- },
- B => {
- title => loc('New scrip'),
- path => "Admin/Global/Scrip.html?create=1&Queue=0",
- separator => 1,
- },
-};
-
-my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
-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/html/Admin/Global/Scrips.html b/rt/html/Admin/Global/Scrips.html
deleted file mode 100644
index 479d39bc5..000000000
--- a/rt/html/Admin/Global/Scrips.html
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 scrip'),
- path => "Admin/Global/Scrips.html",
- },
- B => { title => loc('New scrip'),
- 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/html/Admin/Global/Template.html b/rt/html/Admin/Global/Template.html
deleted file mode 100644
index b44a912cb..000000000
--- a/rt/html/Admin/Global/Template.html
+++ /dev/null
@@ -1,122 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => loc('Create'), Reset => 1 &>
-</form>
-
-
-<%INIT>
-
-my $TemplateObj = new RT::Template($session{'CurrentUser'});
-my ($title, @results, $current_subtab);
-
-my $subtabs = {
- A => { title => loc('Select template'),
- path => "Admin/Global/Templates.html"
- },
- B => { title => loc('New template'),
- 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";
-}
-
-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()));
-
-
-}
-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/html/Admin/Global/Templates.html b/rt/html/Admin/Global/Templates.html
deleted file mode 100644
index e953c0283..000000000
--- a/rt/html/Admin/Global/Templates.html
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 template'),
- path => "Admin/Global/Templates.html"
- },
- B => { title => loc('New template'),
- 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/html/Admin/Global/UserRights.html b/rt/html/Admin/Global/UserRights.html
deleted file mode 100644
index 6691e14d5..000000000
--- a/rt/html/Admin/Global/UserRights.html
+++ /dev/null
@@ -1,103 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
- <% $UserObj->Name %>
- </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/html/Admin/Global/index.html b/rt/html/Admin/Global/index.html
deleted file mode 100644
index e84fc7f80..000000000
--- a/rt/html/Admin/Global/index.html
+++ /dev/null
@@ -1,94 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Callback, tabs => $tabs, %ARGS &>
-<& /Admin/Elements/Header, Title => loc('Admin/Global configuration') &>
-<& /Admin/Elements/SystemTabs,
- Title => loc('Admin/Global configuration') &>
-
-<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 $tabs = {
-
- A => { title => loc('Scrips'),
- text => loc('Modify scrips which apply to all queues'),
- path => 'Scrips.html',
- },
- B => { title => loc('Templates'),
- text => loc('Edit system templates'),
- path => 'Templates.html',
- },
-
- F => { title => loc('Custom Fields'),
- text => loc('Modify global custom fields'),
- path => 'CustomFields/index.html',
- },
-
- G => { title => loc('Group Rights'),
- text => loc('Modify global group rights'),
- path => 'GroupRights.html',
- },
- H => { title => loc('User Rights'),
- text => loc('Modify global user rights'),
- path => 'UserRights.html',
- },
- I => { title => loc('RT at a glance'),
- text => loc('Modify the default "RT at a glance" view'),
- path => 'MyRT.html',
- },
-
-
-
-};
-</%INIT>
diff --git a/rt/html/Admin/Groups/CustomFields.html b/rt/html/Admin/Groups/CustomFields.html
deleted file mode 100644
index 3e614f0a0..000000000
--- a/rt/html/Admin/Groups/CustomFields.html
+++ /dev/null
@@ -1,48 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Groups/GroupRights.html b/rt/html/Admin/Groups/GroupRights.html
deleted file mode 100644
index bf430b761..000000000
--- a/rt/html/Admin/Groups/GroupRights.html
+++ /dev/null
@@ -1,119 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Groups/History.html b/rt/html/Admin/Groups/History.html
deleted file mode 100644
index b811181ab..000000000
--- a/rt/html/Admin/Groups/History.html
+++ /dev/null
@@ -1,68 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => undef
-</%ARGS>
diff --git a/rt/html/Admin/Groups/Members.html b/rt/html/Admin/Groups/Members.html
deleted file mode 100644
index c054b9ba3..000000000
--- a/rt/html/Admin/Groups/Members.html
+++ /dev/null
@@ -1,168 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => "RT/Admin/Edit the group ". $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::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 {
-<em><&|/l&>(Check box to delete)</&></em>
-<br />
-<br />
-<&|/l&>Users</&>
-% my $Users = $Group->UserMembersObj;
-% $Users->OrderBy( FIELD => $UserOrderBy, ORDER => $UserOrder );
-<ul>
-% while (my $user = $Users->Next()) {
-% $UsersSeen{$user->id} = 1 if $SkipSeenUsers;
-<li><input type="checkbox" class="checkbox" name="DeleteMember-<%$user->PrincipalObj->Id%>" value="1" />
-<%$user->Name%> (<%$user->RealName%>)
-% }
-</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>
-</&>
-<& /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 (@results);
-
-my $key;
-foreach $key (keys %ARGS) {
-
-if ($key =~ /^DeleteMember-(\d+)$/) {
- my $id = $1;
- my ($val,$msg) = $Group->DeleteMember($id);
- push (@results, $msg);
-}
-}
-
-# Make sure AddMembers is always an array
-my @AddMembers = (
- ((ref $AddMembersUsers eq 'ARRAY') ? @{$AddMembersUsers} : ($AddMembersUsers)),
- ((ref $AddMembersGroups eq 'ARRAY') ? @{$AddMembersGroups} : ($AddMembersGroups)),
-);
-
-foreach my $member (@AddMembers) {
- 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 %UsersSeen;
-my %GroupsSeen;
-$GroupsSeen{$Group->id} = 1; # can't be a member of ourself
-
-</%INIT>
-
-<%ARGS>
-$AddMembersUsers => undef
-$AddMembersGroups => undef
-$id => undef
-$UserOrderBy => 'Name'
-$UserOrder => 'ASC'
-$SkipSeenUsers => 1
-$SkipSeenGroups => 1
-</%ARGS>
diff --git a/rt/html/Admin/Groups/Modify.html b/rt/html/Admin/Groups/Modify.html
deleted file mode 100644
index 5fa28b3b7..000000000
--- a/rt/html/Admin/Groups/Modify.html
+++ /dev/null
@@ -1,174 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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">
-<% $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>
-<& /Elements/Callback, GroupObj => $Group, results => \@results, %ARGS &>
-</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 = '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 ($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";
-}
-
-
-</%INIT>
-
-
-<%ARGS>
-$Create => undef
-$Name => undef
-$Description => undef
-$SetEnabled => undef
-$Enabled => undef
-$id => undef
-</%ARGS>
diff --git a/rt/html/Admin/Groups/UserRights.html b/rt/html/Admin/Groups/UserRights.html
deleted file mode 100644
index 7a5342a38..000000000
--- a/rt/html/Admin/Groups/UserRights.html
+++ /dev/null
@@ -1,116 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
- <% $UserObj->Name %>
- </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/html/Admin/Groups/index.html b/rt/html/Admin/Groups/index.html
deleted file mode 100644
index 08aa21456..000000000
--- a/rt/html/Admin/Groups/index.html
+++ /dev/null
@@ -1,113 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 /> <ul>
-%if ($Groups->Count == 0) {
-<li> <em><&|/l&>No groups matching search criteria found.</&></em>
-% }
-%my @ids;
-%while ( my $Group = $Groups->Next) {
-% push @ids, $Group->Id;
-<li><a href="Modify.html?id=<%$Group->id%>"><%$Group->Name || loc('(empty)')%></a><br />
-%}
-</ul>
-%if (my $ids = join(',', @ids)) {
-<em>(<a href="<%$RT::WebPath%>/Download/Tabular/Group/<% $ids %>/Groups.tsv"><&|/l&>Download as a tab-delimited file</&></a>)</em><br />
-%}
-<br /><br />
-<form method="post" action="<% $RT::WebPath %>/Admin/Groups/index.html">
-<input type="checkbox" class="checkbox" name="FindDisabledGroups" value="1" /> <&|/l&>Include disabled groups in listing.</&>
-<br />
-<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
-</form>
-
-<br /><br />
-<form method="post" action="<% $RT::WebPath %>/Admin/Groups/index.html">
-<&|/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");
-}
-</%INIT>
-<%ARGS>
-$GroupString => undef
-$GroupOp => '='
-$GroupField => 'Name'
-$FindDisabledGroups => 0
-</%ARGS>
diff --git a/rt/html/Admin/Queues/CustomField.html b/rt/html/Admin/Queues/CustomField.html
deleted file mode 100644
index 7c5340240..000000000
--- a/rt/html/Admin/Queues/CustomField.html
+++ /dev/null
@@ -1,87 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Queues/CustomFields.html b/rt/html/Admin/Queues/CustomFields.html
deleted file mode 100644
index 679e654ff..000000000
--- a/rt/html/Admin/Queues/CustomFields.html
+++ /dev/null
@@ -1,72 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Queues/GroupRights.html b/rt/html/Admin/Queues/GroupRights.html
deleted file mode 100644
index 9b4223b34..000000000
--- a/rt/html/Admin/Queues/GroupRights.html
+++ /dev/null
@@ -1,134 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<& /Elements/Callback, QueueObj => $QueueObj, results => \@results, %ARGS &>
-% $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/html/Admin/Queues/Modify.html b/rt/html/Admin/Queues/Modify.html
deleted file mode 100644
index 7d231bdd3..000000000
--- a/rt/html/Admin/Queues/Modify.html
+++ /dev/null
@@ -1,193 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath%>/Admin/Queues/Modify.html" method="post">
-%if ($Create ) {
-<input type="hidden" class="hidden" name="id" value="new" />
-% } else {
-<input type="hidden" class="hidden" name="id" value="<%$QueueObj->Id%>" />
-% }
-
-<table>
-<tr><td align="right">
-<&|/l&>Queue Name</&>:
-</td>
-<td><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&>Reply Address</&>:
-</td><td>
-<input name="CorrespondAddress" value="<% ($Create) ? "" : $QueueObj->CorrespondAddress %>" />
-<br /><span><em><&|/l , $RT::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::CommentAddress&>(If left blank, will default to [_1])</&></em></span>
-</td>
-</tr><tr>
-
-<td align="right">
-<&|/l&>Priority starts at</&>:
-</td><td><input name="InitialPriority" value="<% ($Create) ? "" : $QueueObj->InitialPriority %>" />
-</td>
-<td align="right">
-<&|/l&>Over time, priority moves toward</&>:
-</td><td><input name="FinalPriority" value="<% ($Create) ? "" : $QueueObj->FinalPriority %>" />
-</td>
-</tr>
-<tr>
-<td align="right">
-<&|/l&>Requests should be due in</&>:
-</td><td>
-<input name="DefaultDueIn" value="<% ($Create) ? "" : $QueueObj->DefaultDueIn%>" /> <&|/l&>days</&>.
-</td>
-</tr>
-<tr>
-<td>
-</td>
-<td colspan="4"><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 queue)</&><br />
-<& /Elements/Callback, QueueObj => $QueueObj, results => \@results, %ARGS &>
-</td>
-</tr>
-
-</table>
-<& /Elements/Submit, Label => loc('Save Changes') &>
-</form>
-
-
-
-<%INIT>
-my $current_tab;
-my $QueueObj = new RT::Queue($session{'CurrentUser'});
-$QueueObj->Load($id);
-my ($title, @results, $Disabled, $EnabledChecked);
-$EnabledChecked = "CHECKED";
-
-if ($Create) {
- $current_tab = 'Admin/Queues/Modify.html?Create=1';
- $title = loc("Create a queue");
-} else {
- if ($id eq 'new') {
- my ($val, $msg) = $QueueObj->Create(Name => $Name);
- delete $session{'create_in_queues'};
- if ($val == 0 ) {
- Abort("$msg");
- }
- else {
- push @results, $msg;
- }
- }
- else {
- $QueueObj->Load($id) || $QueueObj->Load($Name) || Abort("Couldn't load queue '$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);
-
- @results = UpdateRecordObject( AttributesRef => \@attribs,
- Object => $QueueObj,
- ARGSRef => \%ARGS);
-
- #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 != $QueueObj->Disabled) ) {
- my ($code, $msg) = $QueueObj->SetDisabled($Disabled);
- push @results, loc('Enabled status: [_1]', loc_fuzzy($msg));
- }
-
- if ($QueueObj->Disabled()) {
- $EnabledChecked ="";
- }
-
- my @linkresults;
- $m->comp('/Elements/Callback', results => \@linkresults,
- RecordObj => $QueueObj, ARGSRef => \%ARGS,
- _CallbackName => 'ProcessLinks');
- push @results, @linkresults;
-}
-</%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/html/Admin/Queues/People.html b/rt/html/Admin/Queues/People.html
deleted file mode 100644
index a85fe446b..000000000
--- a/rt/html/Admin/Queues/People.html
+++ /dev/null
@@ -1,210 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &> <%$u->Name%>
-(<%$u->RealName%>)
-% }
-</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));
-# }}}
-
-# {{{ 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>
-$UserField => 'Name'
-$UserOp => '='
-$UserString => undef
-$GroupField => 'Name'
-$GroupOp => '='
-$GroupString => undef
-$Type => undef
-$id => undef
-</%ARGS>
-
diff --git a/rt/html/Admin/Queues/Scrip.html b/rt/html/Admin/Queues/Scrip.html
deleted file mode 100644
index 9e12a35b0..000000000
--- a/rt/html/Admin/Queues/Scrip.html
+++ /dev/null
@@ -1,100 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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,
- },
-};
-
-my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
-($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/html/Admin/Queues/Scrips.html b/rt/html/Admin/Queues/Scrips.html
deleted file mode 100644
index 1fc1fa011..000000000
--- a/rt/html/Admin/Queues/Scrips.html
+++ /dev/null
@@ -1,87 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-% if (!$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/html/Admin/Queues/Template.html b/rt/html/Admin/Queues/Template.html
deleted file mode 100644
index b842f9e77..000000000
--- a/rt/html/Admin/Queues/Template.html
+++ /dev/null
@@ -1,130 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => loc('Create'), Reset => 1 &>
-</form>
-
-
-<%INIT>
-
-my $TemplateObj = new RT::Template($session{'CurrentUser'});
-my ($title, @results, $current_subtab);
-
-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;
-}
-
-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()));
-
-
-}
-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 => undef
-$Template => undef
-$Create => undef
-$Name => undef
-</%ARGS>
diff --git a/rt/html/Admin/Queues/Templates.html b/rt/html/Admin/Queues/Templates.html
deleted file mode 100644
index 2da737fde..000000000
--- a/rt/html/Admin/Queues/Templates.html
+++ /dev/null
@@ -1,81 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Queues/UserRights.html b/rt/html/Admin/Queues/UserRights.html
deleted file mode 100644
index 29847745d..000000000
--- a/rt/html/Admin/Queues/UserRights.html
+++ /dev/null
@@ -1,114 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<& /Elements/Callback, QueueObj => $QueueObj, results => \@results, %ARGS &>
-% 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">
- <% $UserObj->Name %>
- </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/html/Admin/Queues/index.html b/rt/html/Admin/Queues/index.html
deleted file mode 100644
index 09d1fb363..000000000
--- a/rt/html/Admin/Queues/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<ul>
-%if ($queues->Count == 0) {
-<li><em><&|/l&>No queues matching search criteria found.</&></em></li>
-% }
-%while ( $queue = $queues->Next) {
-<li><a href="Modify.html?id=<%$queue->id%>"><%$queue->Name%></a></li>
-%}
-</ul>
-<br />
-<form method="post" action="<% $RT::WebPath %>/Admin/Queues/index.html">
-<input type="checkbox" class="checkbox" name="FindDisabledQueues" value="1" /> <&|/l&>Include disabled queues in listing.</&>
-<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
-</form>
-
-<%INIT>
-my ($queue, $caption);
-my $queues = new RT::Queues($session{'CurrentUser'});
-$queues->UnLimit();
-
-if ($FindDisabledQueues) {
- $caption = loc("All Queues");
- $queues->{'find_disabled_rows'} = 1;
-} else {
- $caption = loc("Enabled Queues");
-}
-
-</%INIT>
-<%ARGS>
-$FindDisabledQueues => 0
-</%ARGS>
diff --git a/rt/html/Admin/Tools/Configuration.html b/rt/html/Admin/Tools/Configuration.html
deleted file mode 100644
index 3576b5ce2..000000000
--- a/rt/html/Admin/Tools/Configuration.html
+++ /dev/null
@@ -1,100 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<pre>
-% my $report = Module::Versions::Report::report();
-% my @report = grep { /v\d/ } split("\n",$report);
-<%join('<br />', @report)|n%>
-
-
-</pre>
-
-<h2><&|/l&>RT Variables</&></h2>
-<table>
-%{
-%no strict qw/refs/;
-
-%foreach my $key (sort keys %{*RT::}) {
-% next unless (${'RT::'.$key} );
-% next if (ref ${'RT::'.$key} );
-<tr><td>RT::<%$key%></td>
-<td>
-% if ($key =~ /Password(?!Length)/i) {
-<em>Password not printed</em>
-% } else {
-<%${'RT::'.$key} %>
-% }
-</td>
-</tr>
-% }
-%}
-</table>
-
-<h2><&|/l&>Perl configuration</&></h2>
-% require Config;
-<pre>
-<%Config::myconfig()%>
-</pre>
diff --git a/rt/html/Admin/Tools/index.html b/rt/html/Admin/Tools/index.html
deleted file mode 100644
index 730fa7e15..000000000
--- a/rt/html/Admin/Tools/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Users/CustomFields.html b/rt/html/Admin/Users/CustomFields.html
deleted file mode 100644
index 3943cbf17..000000000
--- a/rt/html/Admin/Users/CustomFields.html
+++ /dev/null
@@ -1,71 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Admin/Users/History.html b/rt/html/Admin/Users/History.html
deleted file mode 100644
index a4782d183..000000000
--- a/rt/html/Admin/Users/History.html
+++ /dev/null
@@ -1,68 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => undef
-</%ARGS>
diff --git a/rt/html/Admin/Users/Memberships.html b/rt/html/Admin/Users/Memberships.html
deleted file mode 100644
index 4b4d1cac8..000000000
--- a/rt/html/Admin/Users/Memberships.html
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-<h2><&|/l&>Groups</&></h2>
-
-<& /Elements/ShowMemberships, UserObj => $UserObj &>
-
-<%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;
-</%INIT>
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/Admin/Users/Modify.html b/rt/html/Admin/Users/Modify.html
deleted file mode 100644
index 75a7696a5..000000000
--- a/rt/html/Admin/Users/Modify.html
+++ /dev/null
@@ -1,433 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::WebExternalAuth and !$RT::WebFallbackToInternalAuth) {
-<table>
-<tr>
-<td align="right">
-<&|/l&>New Password</&>:
-</td>
-<td align="left">
-<input type="password" name="Pass1" />
-</td>
-</tr>
-<tr><td align="right">
-<&|/l&>Retype Password</&>:
-</td>
-<td>
-<input type="password" name="Pass2" />
-</td>
-</tr>
-</table>
-% }
-</&>
-<& /Elements/Callback, _CallbackName => 'LeftColumnBottom', UserObj => $UserObj, %ARGS &>
-</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">
-<% $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>
-</&>
-<& /Elements/Callback, _CallbackName => 'RightColumnBottom', UserObj => $UserObj, %ARGS &>
-</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 ($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>
-
-<& /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 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, loc('Enabled status [_1]', loc_fuzzy($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->Disabled()) {
- $EnabledChecked ="CHECKED";
-}
-
-if ($UserObj->Privileged()) {
- $PrivilegedChecked = "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/html/Admin/Users/MyRT.html b/rt/html/Admin/Users/MyRT.html
deleted file mode 100644
index a963b66e2..000000000
--- a/rt/html/Admin/Users/MyRT.html
+++ /dev/null
@@ -1,132 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $current_tab = 'Admin/Users/MyRT.html?id='.$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}) {
- $UserObj->SetPreferences('HomepageSettings', {});
-}
-
-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::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;
-my @actions;
-
-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 ) = @_;
- $UserObj->SetPreferences( 'HomepageSettings', $conf );
- push @actions, loc( 'Preferences [_1] for user [_2] .', $pane, $UserObj->Name );
- }
-);
-
-$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1 )
- for @panes;
-
-</%init>
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/Admin/Users/Prefs.html b/rt/html/Admin/Users/Prefs.html
deleted file mode 100644
index 0bba9fadd..000000000
--- a/rt/html/Admin/Users/Prefs.html
+++ /dev/null
@@ -1,122 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<& /Elements/Header, Title => loc("User view") &>
-
-<& /Elements/ViewUser, User=>$u &>
-
-<h2 class="title"><%loc("User view")%></h2>
-
-%if ($session{CurrentUser} && ($session{CurrentUser}->Id == $id)) {
- <& /Elements/TitleBoxStart, title => loc('Signature') &>
-<form method=post>
-<input type="hidden" name="id" value=<%$id%>>
-<TEXTAREA COLS=72 ROWS=4 WRAP=HARD NAME="Signature"><% $u->Signature %></TEXTAREA><br><br>
-<input type="submit" value="<&|/l&>Update signature</&>">
-</form>
- <& /Elements/TitleBoxEnd &>
- <form method=post>
- <&|/l&>Open tickets (from listing) in another window</&>: <input type="checkbox" name="NewWindowOption" <%exists $session{NewWindowOption} && "CHECKED"%>><br>
- <&|/l&>Open tickets (from listing) in a new window</&>: <input type="checkbox" name="AlwaysNewWindowOption" <%exists $session{AlwaysNewWindowOption} && "CHECKED"%>><br>
- <input type="submit" name="NewWindowSetting" value="<&|/l&>New window setting</&>">
- </form>
-%}
-
- <& /Elements/TitleBoxStart, title => loc('Email') &>
-<form method=post>
-<input type="hidden" name="id" value="<%$id%>">
-<input name="Email" value="<% $u->EmailAddress %>"><input type="submit" value="<&|/l&>Update email</&>">
-</form>
- <& /Elements/TitleBoxEnd &>
- <& /Elements/TitleBoxStart, title => loc('Real Name') &>
-<form method=post>
-<input type="hidden" name="id" value="<%$id%>">
-<input name="RealName" value="<% $u->RealName %>"><input type="submit" value="<&|/l&>Update name</&>">
-</form>
- <& /Elements/TitleBoxEnd &>
-
- <& /Elements/TitleBoxStart, title => loc('User ID') &>
-<form method=post>
-<input type="hidden" name="id" value="<%$id%>">
-<input name="Name" value="<% $u->Name %>"><input type="submit" value="<&|/l&>Update ID</&>">
-</form>
- <& /Elements/TitleBoxEnd &>
-
-%# TODO: alternative email addresses + merging users
-
-<%ARGS>
-$id => $session{CurrentUser} ? $session{CurrentUser}->Id : 0
-$Signature => undef
-$Email => undef
-$RealName => undef
-$Name => undef
-</%ARGS>
-
-<%INIT>
-require RT::User;
-my $u=RT::User->new($session{CurrentUser});
-$u->Load($id) || die loc("Couldn't load that user ([_1])", $id);
-if ($Signature) {
-my ($val, $msg)=$u->SetSignature($Signature);
-$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg);
-}
-
-if ($Email) {
-my ($val, $msg)=$u->SetEmailAddress($Email);
-$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg);
-}
-
-if ($RealName) {
-my ($val, $msg)=$u->SetRealName($RealName);
-$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg);
-}
-
-if ($Name) {
-my ($val, $msg)=$u->SetName($Name);
-$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg);
-}
-
-if ($ARGS{NewWindowSetting}) {
-if ($ARGS{NewWindowOption}) {
-$session{NewWindowOption}=1;
-} else {
-delete $session{NewWindowOption};
-}
-if ($ARGS{AlwaysNewWindowOption}) {
-$session{NewWindowOption}=1;
-$session{AlwaysNewWindowOption}=1;
-} else {
-delete $session{AlwaysNewWindowOption};
-}
-}
-
-</%INIT>
-
-
-
-
-
-
-
-
-
diff --git a/rt/html/Admin/Users/index.html b/rt/html/Admin/Users/index.html
deleted file mode 100644
index 4d24b8f33..000000000
--- a/rt/html/Admin/Users/index.html
+++ /dev/null
@@ -1,115 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<ul>
-%if ($users->Count == 0) {
-<li><em><&|/l&>No users matching search criteria found.</&></em></li>
-% }
-%my @ids;
-%while ( $user = $users->Next) {
-% push @ids, $user->Id;
-<li><a href="Modify.html?id=<%$user->id%>"><%$user->Name || loc('(no name listed)')%></a></li>
-%}
-</ul>
-%if (my $ids = join(',', @ids)) {
-<em>(<a href="<%$RT::WebPath%>/Download/Tabular/User/<% $ids %>/Users.tsv"><&|/l&>Download as a tab-delimited file</&></a>)</em><br />
-%}
-
-<br /><br />
-<form method="post" action="<% $RT::WebPath %>/Admin/Users/index.html">
-
-<&|/l&>Find people whose</&> <& /Elements/SelectUsers &><br />
-<input type="checkbox" class="checkbox" name="FindDisabledUsers" value="1" /> <&|/l&>Include disabled users in search.</&>
-<br />
-<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
-</form>
-
-<%INIT>
-my ($user, $caption);
-my $users = new RT::Users($session{'CurrentUser'});
-
-if ($FindDisabledUsers) {
- $users->{'find_disabled_rows'} = 1;
-}
-
-if (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;
-}
-</%INIT>
-<%ARGS>
-$UserString => undef
-$UserOp => '='
-$UserField => 'Name'
-$IdLike => undef
-$EmailLike => undef
-$FindDisabledUsers => 0
-</%ARGS>
diff --git a/rt/html/Admin/autohandler b/rt/html/Admin/autohandler
deleted file mode 100644
index 28437e90d..000000000
--- a/rt/html/Admin/autohandler
+++ /dev/null
@@ -1,53 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => 'ShowConfigTab',
- Object => $RT::System,
-);
-</%init> \ No newline at end of file
diff --git a/rt/html/Admin/index.html b/rt/html/Admin/index.html
deleted file mode 100644
index ec6d0a2c3..000000000
--- a/rt/html/Admin/index.html
+++ /dev/null
@@ -1,101 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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') &>
-
-<ul>
-% foreach my $key (sort keys %$tabs) {
-<li><span><a href="<%$RT::WebPath%>/<%$tabs->{$key}->{'path'}|n %>"><%$tabs->{$key} ->{'title'}%></a></span><br />
-<%$tabs->{$key}->{description}%>
-</li>
-%}
-</ul>
-<%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->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
-
-
-
-</%init>
diff --git a/rt/html/Approvals/Display.html b/rt/html/Approvals/Display.html
deleted file mode 100644
index 3735df5c8..000000000
--- a/rt/html/Approvals/Display.html
+++ /dev/null
@@ -1,72 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Approvals/Elements/Approve b/rt/html/Approvals/Elements/Approve
deleted file mode 100644
index 65d2276b9..000000000
--- a/rt/html/Approvals/Elements/Approve
+++ /dev/null
@@ -1,94 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::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/html/Approvals/Elements/PendingMyApproval b/rt/html/Approvals/Elements/PendingMyApproval
deleted file mode 100644
index 741e638c0..000000000
--- a/rt/html/Approvals/Elements/PendingMyApproval
+++ /dev/null
@@ -1,111 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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'})
- && "checked"%> /> <&|/l&>Show pending requests</&><br />
-<input type="checkbox" class="checkbox" value="1" name="ShowResolved" <%$ARGS{'ShowResolved'} && "checked"%> /> <&|/l&>Show approved requests</&><br />
-<input type="checkbox" class="checkbox" value="1" name="ShowRejected" <%$ARGS{'ShowRejected'} && "checked"%> /> <&|/l&>Show denied requests</&><br />
-<input type="checkbox" class="checkbox" value="1" name="ShowDependent" <%$ARGS{'ShowDependent'} && "checked"%> /> <&|/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/html/Approvals/Elements/ShowDependency b/rt/html/Approvals/Elements/ShowDependency
deleted file mode 100644
index 8be815cff..000000000
--- a/rt/html/Approvals/Elements/ShowDependency
+++ /dev/null
@@ -1,109 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Approvals/index.html b/rt/html/Approvals/index.html
deleted file mode 100644
index 06f05392d..000000000
--- a/rt/html/Approvals/index.html
+++ /dev/null
@@ -1,90 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Callbacks/ActivityReports/Elements/Tabs/Default b/rt/html/Callbacks/ActivityReports/Elements/Tabs/Default
new file mode 100644
index 000000000..f85d2e010
--- /dev/null
+++ b/rt/html/Callbacks/ActivityReports/Elements/Tabs/Default
@@ -0,0 +1,7 @@
+<%init>
+if ($ARGS{current_toptab} eq "Tools/Offline.html") {
+ $ARGS{tabs}{r} ||= { path => 'Reports/Activity/index.html',
+ title => 'Reports',
+ };
+}
+</%init> \ No newline at end of file
diff --git a/rt/html/Callbacks/ActivityReports/NoAuth/webrt.css/Default b/rt/html/Callbacks/ActivityReports/NoAuth/webrt.css/Default
new file mode 100644
index 000000000..30480f7b6
--- /dev/null
+++ b/rt/html/Callbacks/ActivityReports/NoAuth/webrt.css/Default
@@ -0,0 +1,71 @@
+table.miniplot {
+ width: 100%;
+ border-collapse: collapse;
+}
+table.miniplot td {
+ margin: 0;
+ padding: 0;
+ border-bottom: 1px solid black;
+}
+table.miniplot .graph {
+ margin-left: auto;
+ margin-right: auto;
+ position: relative;
+ width: 60px;
+}
+table.miniplot .graph ul {
+ height: 100px;
+ margin: 0;
+ padding: 0;
+}
+table.miniplot .graph ul li {
+ list-style: none;
+ position: absolute;
+ bottom: 0px;
+ padding: 0 !important;
+ margin: 0 !important;
+ border-bottom: none;
+}
+table.miniplot .graph ul li .data {
+ display: none;
+}
+
+.miniplot .demoblock { margin: 0 10px; padding: 0 30px; }
+
+.miniplot .c1 { border: 2px solid #990000; background: #ff0000; }
+.miniplot .c2 { border: 2px solid #996600; background: #ff9900; }
+.miniplot .c3 { border: 2px solid #009900; background: #00ff00; }
+.miniplot .c4 { border: 2px solid #009999; background: #00ffff; }
+.miniplot .c5 { border: 2px solid #000099; background: #0000ff; }
+.miniplot .c6 { border: 2px solid #990099; background: #ff00ff; }
+graph .c5 { border: 2px solid #000099; background: #0000ff; }
+.graph .c6 { border: 2px solid #990099; background: #ff00ff; }
+
+tr.titlerow th {
+
+ border-bottom: solid black 1px;
+ margin: 0;
+ font-size:80%;
+ text-wrap: none;
+
+}
+
+tr.grandtotal td{
+ border-top: 1px solid black;
+}
+
+tr.grandtotal th{
+ border-top: 1px solid black;
+}
+
+th.label {
+ align: left;
+
+}
+
+table.miniplot th.legend {
+ font-style: normal;
+ font-size: 80%;
+
+}
+
diff --git a/rt/html/Callbacks/ActivityReports/Search/Results.html/SearchActions b/rt/html/Callbacks/ActivityReports/Search/Results.html/SearchActions
new file mode 100644
index 000000000..4775a9af3
--- /dev/null
+++ b/rt/html/Callbacks/ActivityReports/Search/Results.html/SearchActions
@@ -0,0 +1,7 @@
+<a href="<% $RT::WebPath %>/Reports/Activity/index.html?<% $QueryString %>">Generate reports</a>
+<%init>
+use YAML;
+my %args = $m->caller_args(2);
+
+my $QueryString = $m->comp('/Elements/QueryString', query => $args{Query});
+</%init> \ No newline at end of file
diff --git a/rt/html/Callbacks/RT-WebCronTool/Elements/Tabs/Default b/rt/html/Callbacks/RT-WebCronTool/Elements/Tabs/Default
new file mode 100644
index 000000000..db74ced2d
--- /dev/null
+++ b/rt/html/Callbacks/RT-WebCronTool/Elements/Tabs/Default
@@ -0,0 +1,13 @@
+%# The day after tomorrow is the third day of the rest of your life.
+<%INIT>
+if ($session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'SuperUser',
+ Object => $RT::System,
+)) {
+ $toptabs->{'ZZ-RT-WebCronTool'} = { title =>loc("Web CronTool"),
+ path => "Developer/CronTool/index.html" };
+}
+</%init>
+<%args>
+$toptabs =>undef
+</%args>
diff --git a/rt/html/Developer/CronTool/autohandler b/rt/html/Developer/CronTool/autohandler
new file mode 100644
index 000000000..7daa09e8d
--- /dev/null
+++ b/rt/html/Developer/CronTool/autohandler
@@ -0,0 +1,9 @@
+%# All theoretical chemistry is really physics;
+%# and all theoretical chemists know it.
+%# -- Richard P. Feynman
+<%INIT>
+$m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight(
+ Right => 'SuperUser',
+ Object => $RT::System,
+);
+</%INIT>
diff --git a/rt/html/Developer/CronTool/index.html b/rt/html/Developer/CronTool/index.html
new file mode 100644
index 000000000..67c9e5634
--- /dev/null
+++ b/rt/html/Developer/CronTool/index.html
@@ -0,0 +1,116 @@
+% if ($@) {
+<P><FONT Color="red"><% $@ %></FONT></P>
+% }
+% if (!$NoUI) {
+<HR>
+<FORM Action="index.html" Method="POST">
+<TABLE>
+% foreach my $class (qw( Search Condition Action )) {
+<TR><TH>
+<% loc($class) %>
+</TH><TD>
+<SELECT NAME="<% $class %>">
+% require File::Find;
+% my @modules;
+% File::Find::find(sub {
+% push @modules, $1 if /^(?!Generic|UserDefined)(\w+)\.pm$/i;
+% }, grep -d, map "$_/RT/$class", @INC);
+<OPTION <% $ARGS{$class} ? '' : 'SELECTED' %>></OPTION>
+% foreach my $module (sort @modules) {
+% my $fullname = "RT::$class\::$module";
+ <OPTION VALUE="<% $fullname %>" <% ($fullname eq $ARGS{$class}) ? 'SELECTED' : '' %>><% $module %></OPTION>
+% }
+</SELECT>
+</TD><TH>
+<&|/l&>Parameter</&>
+</TH><TD>
+<INPUT NAME="<% $class %>Arg" VALUE="<% $ARGS{$class.'Arg'} %>">
+</TD></TR>
+% }
+<TR>
+<TD COLSPAN="4" ALIGN="Right">
+<LABEL>
+<INPUT TYPE="CheckBox" NAME="Verbose" <% $Verbose ? 'CHECKED' : '' %>><&|/l&>Verbose</&>
+</LABEL>
+<INPUT TYPE="Submit" VALUE="<&|/l&>Run</&>">
+</TD>
+</TABLE>
+</FORM>
+<HR>
+% }
+<%INIT>
+$m->print("<H1>", loc("Web CronTool"), "</H1>");
+if ($Search) {
+ my $load_module = sub {
+ my $modname = $_[0];
+ $modname =~ s{::}{/}g;
+ require "$modname.pm" or die (
+ loc( "Failed to load module [_1]. ([_2])", $_[0], $@ ) . "\n"
+ );
+ };
+ $m->print(loc("Starting..."), "<UL>");
+ eval {
+ $load_module->($Search);
+ $load_module->($Action) if $Action;
+ $load_module->($Condition) if $Condition;
+
+ if ($TemplateId and !$TemplateObj) {
+ $TemplateObj = RT::Template->new($RT::Nobody);
+ $TemplateObj->LoadById($TemplateId);
+ }
+
+ my $tickets = RT::Tickets->new($RT::SystemUser);
+ my $search = $Search->new( TicketsObj => $tickets, Argument => $SearchArg );
+ $search->Prepare;
+ my $tickets_found = $search->TicketsObj;
+
+ #for each ticket we've found
+ while ( my $ticket = $tickets_found->Next ) {
+ $m->print("<LI>" . $ticket->Id . ": ") if $Verbose;
+ $m->print(loc("Checking...")) if $Verbose;
+
+ # perform some more advanced check
+ if ($Condition) {
+ my $ConditionObj = $Condition->new(
+ TicketObj => $ticket,
+ Argument => $ConditionArg
+ );
+
+ # if the condition doesn't apply, get out of here
+ next unless ( $ConditionObj->IsApplicable );
+ $m->print(loc("Condition matches...")) if $Verbose;
+ }
+
+ if ($Action) {
+ #prepare our action
+ my $ActionObj = $Action->new(
+ TicketObj => $ticket,
+ TemplateObj => $TemplateObj,
+ Argument => $ActionArg
+ );
+
+ #if our preparation, move onto the next ticket
+ next unless ( $ActionObj->Prepare );
+ $m->print(loc("Action prepared...")) if $Verbose;
+
+ #commit our action.
+ next unless ( $ActionObj->Commit );
+ $m->print(loc("Action committed.")) if $Verbose;
+ }
+ }
+ };
+ $m->print('</UL>', loc("Finished."));
+}
+</%INIT>
+<%ARGS>
+$Search => undef
+$SearchArg => undef
+$Condition => undef
+$ConditionArg => undef
+$Action => undef
+$ActionArg => undef
+$TemplateId => undef
+$TemplateObj => undef
+$Verbose => 1
+$NoUI => 0
+</%ARGS>
diff --git a/rt/html/Download/CustomFieldValue/dhandler b/rt/html/Download/CustomFieldValue/dhandler
deleted file mode 100644
index e71380703..000000000
--- a/rt/html/Download/CustomFieldValue/dhandler
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Download/Tabular/dhandler b/rt/html/Download/Tabular/dhandler
deleted file mode 100644
index 5cad79414..000000000
--- a/rt/html/Download/Tabular/dhandler
+++ /dev/null
@@ -1,76 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/BevelBoxRaisedEnd b/rt/html/Elements/BevelBoxRaisedEnd
deleted file mode 100644
index be60dfbdc..000000000
--- a/rt/html/Elements/BevelBoxRaisedEnd
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/BevelBoxRaisedStart b/rt/html/Elements/BevelBoxRaisedStart
deleted file mode 100644
index 646818750..000000000
--- a/rt/html/Elements/BevelBoxRaisedStart
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/Callback b/rt/html/Elements/Callback
deleted file mode 100644
index 04864c6b9..000000000
--- a/rt/html/Elements/Callback
+++ /dev/null
@@ -1,92 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 %cache;
-</%once>
-<%init>
-$Page = $m->callers(1)->path unless ($Page);
-
-my $CacheKey = "Callback--$Page--$_CallbackName";
-my $callbacks = $cache{$CacheKey} || $m->notes($CacheKey);
-
-if (!$callbacks) {
- my $path = "/Callbacks/*$Page/$_CallbackName";
-
- # Due to API changes after Mason 1.28, we have to check for which
- # version we're running when getting the component roots
- my @roots = map { $_->[1] }
- $HTML::Mason::VERSION <= 1.28
- ? $m->interp->resolver->comp_root_array
- : $m->interp->comp_root_array;
-
- my %seen;
-
- for my $root (@roots) {
- push @$callbacks,
- # Skip backup files, files without a leading package name,
- # and files we've already seen
- grep { !/\/\.|~$/
- and $_ ne "/Callbacks/$Page/$_CallbackName"
- and not $seen{$_}++ }
- $m->interp->resolver->glob_path($path, $root);
- }
-
- $m->notes($CacheKey => $callbacks);
- $cache{$CacheKey} = $callbacks if !$RT::DevelMode;
-}
-
-my @rv;
-foreach my $comp (sort @$callbacks) {
- push @rv, $m->comp($comp, %ARGS);
-}
-return @rv;
-</%init>
-<%args>
-$_CallbackName => 'Default'
-$Page => undef
-</%args>
diff --git a/rt/html/Elements/CreateTicket b/rt/html/Elements/CreateTicket
deleted file mode 100644
index 6fb497291..000000000
--- a/rt/html/Elements/CreateTicket
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath %>/Ticket/Create.html" name="CreateTicketInQueue">
-<&|/l, $m->scomp('/Elements/SelectNewTicketQueue')&><input type="submit" class="button" value="New ticket in" />&nbsp;[_1]</&>
-</form>
diff --git a/rt/html/Elements/EditCustomField b/rt/html/Elements/EditCustomField
deleted file mode 100644
index 85641ef1e..000000000
--- a/rt/html/Elements/EditCustomField
+++ /dev/null
@@ -1,99 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $Values;
-if ($Object and $Object->id) {
- $Values = $Object->CustomFieldValues($CustomField->id);
- $Values->Columns( qw( id CustomField ObjectType ObjectId Disabled Content ContentType ContentEncoding ) );
- $NamePrefix ||= join('-', 'Object', ref($Object), $Object->Id, 'CustomField', '');
-} elsif (not $Default) {
- my %TOP = $m->request_args;
- $Default = $TOP{ $NamePrefix .$CustomField->Id . '-Values' }
- || $TOP{ $NamePrefix .$CustomField->Id . '-Value' };
-}
-my $Type = $CustomField->Type;
-
-return unless ($Type); # if we can't see the type, all hell will break loose.
-
-my $MaxValues = $CustomField->MaxValues;
-if ($MaxValues == 1 and $Object and $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->comp('/Elements/Callback', _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
-</%ARGS>
diff --git a/rt/html/Elements/EditCustomFieldBinary b/rt/html/Elements/EditCustomFieldBinary
deleted file mode 100644
index 81368d79c..000000000
--- a/rt/html/Elements/EditCustomFieldBinary
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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" value="<% $value->Id %>" /><a href="<%$RT::WebPath%>/Download/CustomFieldValue/<% $value->Id %>/<% $value->Content %>"><% $value->Content %></a><br />
-% }
-% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
-<input type="file" name="<%$NamePrefix%><%$CustomField->Id%>-Upload" />
-% }
-<%ARGS>
-$Object => undef
-$CustomField => undef
-$NamePrefix => undef
-$Default => undef
-$Values => undef
-$MaxValues => undef
-</%ARGS>
diff --git a/rt/html/Elements/EditCustomFieldCombobox b/rt/html/Elements/EditCustomFieldCombobox
deleted file mode 100644
index 37a388c55..000000000
--- a/rt/html/Elements/EditCustomFieldCombobox
+++ /dev/null
@@ -1,68 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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" name="<%$NamePrefix%><%$CustomField->Id%>-DeleteValueIds" 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,
- 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/html/Elements/EditCustomFieldFreeform b/rt/html/Elements/EditCustomFieldFreeform
deleted file mode 100644
index 57073b0c9..000000000
--- a/rt/html/Elements/EditCustomFieldFreeform
+++ /dev/null
@@ -1,74 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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" ><%$Default%></textarea>
-% } else {
-<input name="<%$name%>" id="<%$name%>" size="<%$Cols%>" value="<%$Default ? $Default : ''%>" />
-% }
-<%INIT>
-if ($Multiple and $Values) {
- $Default = '';
- while (my $value = $Values->Next ) {
- $Default .= $value->Content."\n";
- }
-}
-elsif ( ! $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/html/Elements/EditCustomFieldImage b/rt/html/Elements/EditCustomFieldImage
deleted file mode 100644
index c9fd8ddbf..000000000
--- a/rt/html/Elements/EditCustomFieldImage
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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" value="<% $value->Id %>" /><& ShowCustomFieldImage, Object => $value &>
-<br />
-% }
-% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
-<input type="file" name="<%$NamePrefix%><%$CustomField->Id%>-Upload" />
-% }
-<%ARGS>
-$Object => undef
-$CustomField => undef
-$NamePrefix => undef
-$Default => undef
-$Values => undef
-$MaxValues => undef
-</%ARGS>
diff --git a/rt/html/Elements/EditCustomFieldSelect b/rt/html/Elements/EditCustomFieldSelect
deleted file mode 100644
index 6df55762e..000000000
--- a/rt/html/Elements/EditCustomFieldSelect
+++ /dev/null
@@ -1,128 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) {
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/cascaded.js"></script>
-%# XXX - Hide this select from w3m?
- <select onchange="filter_cascade('<% $id %>-Values', this.value)" name="<%$id%>-Category">
- <option value="" <% !$selected && 'SELECTED' %>><&|/l&>-</&></option>
-% foreach my $cat (@category) {
-% my ($depth, $name) = @$cat;
- <option value="<% $name %>"><% '&nbsp;' x $depth |n %><%$name%></option>
-% }
- </select><br />
-% }
- <select name="<%$id%>-Values" id="<%$id%>-Values"
-% if ($Multiple or !@category) {
- size="<%$Rows%>"
-% }
- <% $Multiple && 'MULTIPLE' %>>
- <option value="" <% !$selected && 'SELECTED' %>><&|/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>
-% my $selected;
-% my $CFVs = $CustomField->Values;
-% my @levels;
-% while ($CFVs and my $value = $CFVs->Next ) {
-% my $category = $value->Category;
-% if (1) { # length $category) {
-% my $level = (split(/:/, $category || ''))[0];
-% while (@levels) {
-% if ($levels[-1] eq $level) {
-% undef $level;
-% last;
-% } elsif (index($level, $levels[-1]) != 0) {
- </optgroup>
-% pop @levels;
-% } else {
-% last;
-% }
-% }
-% if ($level) {
-% push @$CategoryRef, [0+@levels, $level];
- <optgroup style="padding-left: <% @levels/2 %>em" label="<%$category%>">
-% push @levels, $level;
-% }
-% }
- <option value="<%$value->Name%>"
-% if ($Values) {
- <% ($Values->HasEntry($value->Name)||'') && ($$SelectedRef = 1) && 'SELECTED' %>
-% } elsif ($Default) {
- <% (ref $Default ? (grep {$_ eq $value->Name} @{$Default}) : ($Default eq $value->Name))
- && ($$SelectedRef = 1) && 'SELECTED' %>
-% }
- ><% $value->Name%></option>
-% }
-% for (@levels) {
- </optgroup>
-% }
-<%args>
-$CustomField => undef
-$Default => undef
-$Values => undef
-$SelectedRef => undef
-$CategoryRef => undef
-</%args>
-</%method>
diff --git a/rt/html/Elements/EditCustomFieldText b/rt/html/Elements/EditCustomFieldText
deleted file mode 100644
index b4892ec05..000000000
--- a/rt/html/Elements/EditCustomFieldText
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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"><% $value->Content %></textarea><br />
-% }
-% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
-<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$NamePrefix%><%$CustomField->Id%>-Values"><% $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/html/Elements/EditCustomFieldWikitext b/rt/html/Elements/EditCustomFieldWikitext
deleted file mode 100644
index b4892ec05..000000000
--- a/rt/html/Elements/EditCustomFieldWikitext
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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"><% $value->Content %></textarea><br />
-% }
-% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) {
-<textarea cols="<%$Cols%>" rows="<%$Rows%>" name="<%$NamePrefix%><%$CustomField->Id%>-Values"><% $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/html/Elements/EditLinks b/rt/html/Elements/EditLinks
deleted file mode 100755
index 8fd1d623d..000000000
--- a/rt/html/Elements/EditLinks
+++ /dev/null
@@ -1,177 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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></td>
- <td><i><&|/l&>(Check box to delete)</&></i></td>
- </tr>
- <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>
-</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.</&>
-<& /Elements/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>
-</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/html/Elements/EmailInput b/rt/html/Elements/EmailInput
deleted file mode 100644
index c1b275540..000000000
--- a/rt/html/Elements/EmailInput
+++ /dev/null
@@ -1,47 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
diff --git a/rt/html/Elements/Error b/rt/html/Elements/Error
deleted file mode 100644
index 666017f0c..000000000
--- a/rt/html/Elements/Error
+++ /dev/null
@@ -1,86 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Callback, %ARGS, error => $error &>
-<& /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")
-</%args>
-
-<%INIT>
-my $error = "WebRT: $Why ($Details)";
-
-# TODO: Log::Dispatch isn't UTF-8 safe. Autrijus needs to talk to dave rolsky about getting this fixed
-if ($] >= 5.007001) {
- require 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" );
- $m->abort();
-}
-</%INIT>
diff --git a/rt/html/Elements/Footer b/rt/html/Elements/Footer
deleted file mode 100644
index c3d766258..000000000
--- a/rt/html/Elements/Footer
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<& /Elements/Callback, %ARGS &>
-<div id="footer">
- <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>
-% $m->abort();
-
-<%ARGS>
-$Debug => 0
-$Menu => 1
-</%ARGS>
diff --git a/rt/html/Elements/GotoTicket b/rt/html/Elements/GotoTicket
deleted file mode 100644
index 55dacdab1..000000000
--- a/rt/html/Elements/GotoTicket
+++ /dev/null
@@ -1,48 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Elements/Header b/rt/html/Elements/Header
deleted file mode 100644
index 02450b1e0..000000000
--- a/rt/html/Elements/Header
+++ /dev/null
@@ -1,133 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 > 0) {
- <meta http-equiv="refresh" content="<%$Refresh%>" />
-% }
-
-<link rel="shortcut icon" href="<%$RT::WebImagesURL%>/favicon.png" type="image/png" />
-<link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/css/<% $RT::WebDefaultStylesheet %>/main-squished.css" type="text/css" media="all" />
-<link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/css/print.css" type="text/css" media="print" />
-
-% if ( $RSSAutoDiscovery ) {
- <link rel="alternate" href="<%$RSSAutoDiscovery%>" type="application/rss+xml" title="RSS RT Search" />
-% }
-
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/util.js"></script>
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/ahah.js"></script>
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/titlebox-state.js"></script>
-<script type="text/javascript"><!--
- onLoadHook("loadTitleBoxStates()");
-% if ( $Focus ) {
- onLoadHook("focusElementById('<% $Focus %>')");
-% }
-% if ( $onload ) {
- onLoadHook("<% $onload |n %>");
-% }
---></script>
-
-<& /Elements/Callback, _CallbackName => 'Head', %ARGS &>
-
-</head>
- <body<% $id && qq[ id="comp-$id"] |n %>>
-
-% if ($ShowBar) {
-<& /Elements/Logo &>
-
-<div id="quickbar">
- <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::WebPath%><%$Prefs%>"><&|/l&>Preferences</&></a>
-% }
-% } else {
- <&|/l&>Not logged in.</&>
-% }
- <& /Elements/Callback, %ARGS &>
-% unless (!$session{'CurrentUser'}->Name
-% or ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth)) {
- | <a href="<%$RT::WebPath%>/NoAuth/Logout.html<%$URL ? "?URL=".$URL : ''%>"><&|/l&>Logout</&></a>
-% }
- </div>
-% }
-
-<%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>
-$Prefs => '/User/Prefs.html'
-#$Focus => 'focus'
-$Focus => ''
-$Title => 'RT'
-$Code => undef
-$Refresh => 0
-$Why => undef
-$ShowBar => 1
-$URL => undef
-$RSSAutoDiscovery => undef
-$onload => undef
-</%ARGS>
diff --git a/rt/html/Elements/ListActions b/rt/html/Elements/ListActions
deleted file mode 100644
index 0d9788b66..000000000
--- a/rt/html/Elements/ListActions
+++ /dev/null
@@ -1,65 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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('Results') &>
- <ul class="action-results">
-% foreach my $action (@actions) {
-% next unless $action;
-% my $skip = 0;
-% $m->comp('/Elements/Callback', _CallbackName => 'ModifyRow', row => \$action, skip => \$skip, %ARGS);
-% next if $skip;
- <li><%$action%></li>
-% }
- </ul>
-</&>
-<%init>
-@actions = grep $_, @actions;
-return unless @actions;
-</%init>
-<%ARGS>
-@actions => undef
-</%ARGS>
diff --git a/rt/html/Elements/Login b/rt/html/Elements/Login
deleted file mode 100644
index 8cad96f12..000000000
--- a/rt/html/Elements/Login
+++ /dev/null
@@ -1,138 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath
- ;
-</%INIT>
-
-<& /Elements/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 &>
-<% $Error %>
-</&>
-% }
-
-<& /Elements/Callback, %ARGS, _CallbackName => 'BeforeForm' &>
-
-<div id="login-box">
-<&| /Widgets/TitleBox, title => loc('Login'), titleright => $RT::VERSION, hideable => 0 &>
-
-% unless ($RT::WebExternalAuth and !$RT::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" /></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
-<& /Elements/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 -->
-<& /Elements/Callback, %ARGS, _CallbackName => 'AfterForm' &>
-<& /Elements/Footer, Menu => 0 &>
-<%ARGS>
-$user => ""
-$pass => undef
-$goto => undef
-$Error => undef
-</%ARGS>
diff --git a/rt/html/Elements/Logo b/rt/html/Elements/Logo
deleted file mode 100644
index 9db76651f..000000000
--- a/rt/html/Elements/Logo
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="<%$RT::WebImagesURL%>/bplogo.gif" alt="<%loc("Best Practical Solutions, LLC corporate logo")%>" width="177" height="33" /></a>
-% if ($show_name) {
- <div class="rtname"><% loc("RT for [_1]", $RT::rtname) %></div>
-% }
- </div>
-<%args>
- $show_name => 1
-</%args>
diff --git a/rt/html/Elements/Menu b/rt/html/Elements/Menu
deleted file mode 100644
index 48fceebc0..000000000
--- a/rt/html/Elements/Menu
+++ /dev/null
@@ -1,134 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
-% my $sep = 0;
-% my $postsep = 0;
-% my $accesskey = 1;
-%
-% $count = 0;
-% $class = {};
-%
-% foreach $tab (sort keys %{$toptabs}) {
-% $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;
-%
-% $class->{li} = join ' ', @li;
-%
-% my $url = ($toptabs->{$tab}->{'path'}||'') =~ /^https?:/i
-% ? $toptabs->{$tab}->{'path'} || ''
-% : $RT::WebPath . "/" . $toptabs->{$tab}->{'path'};
-%
- <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>
-$current_toptab => ""
-$toptabs => undef
-$level => 0
-$last_level => 0
-</%ARGS>
diff --git a/rt/html/Elements/MessageBox b/rt/html/Elements/MessageBox
deleted file mode 100644
index ac9034986..000000000
--- a/rt/html/Elements/MessageBox
+++ /dev/null
@@ -1,74 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="<%$Wrap%>" name="<%$Name%>"><& /Elements/Callback, %ARGS &><% $Default %><%$message%><%$IncludeSignature ? $signature : ''%></textarea>
-<%INIT>
-
-my $message = '';
-
-if ($QuoteTransaction) {
- my $transaction=RT::Transaction->new($session{'CurrentUser'});
- $transaction->Load($QuoteTransaction);
- $message=$transaction->Content(Quote => 1);
-}
-
-my $signature = '';
-if ($IncludeSignature && $session{'CurrentUser'}->UserObj->Signature) {
- $signature = "-- \n".$session{'CurrentUser'}->UserObj->Signature;
-}
-
-</%INIT>
-<%ARGS>
-$QuoteTransaction => undef
-$Name => 'Content'
-$Default => ''
-$Width => $RT::MessageBoxWidth || 72
-$Height => $RT::MessageBoxHeight || 15
-$Wrap => $RT::MessageBoxWrap || 'HARD'
-$IncludeSignature => 1
-</%ARGS>
-
diff --git a/rt/html/Elements/MyAdminQueues b/rt/html/Elements/MyAdminQueues
deleted file mode 100644
index ddfc22cb7..000000000
--- a/rt/html/Elements/MyAdminQueues
+++ /dev/null
@@ -1,54 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/MyRT b/rt/html/Elements/MyRT
deleted file mode 100644
index f98a7c279..000000000
--- a/rt/html/Elements/MyRT
+++ /dev/null
@@ -1,100 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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" width="100%">
-<tr valign="top">
-
-<td class="boxcontainer" <% $summary? 'width="70%"': '' |n %>>
-% $show_cb->($_) foreach @$body;
-</td>
-
-% if ( $summary ) {
-<td class="boxcontainer">
-% $show_cb->($_) foreach @$summary;
-</td>
-% }
-
-</tr>
-</table>
-
-<%INIT>
-
-my $user = $session{'CurrentUser'}->UserObj;
-unless (exists $session{'my_rt_portlets'}) {
- my ($default_portlets) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
- $session{'my_rt_portlets'} = $user->Preferences(
- HomepageSettings => $default_portlets? $default_portlets->Content: {},
- );
-}
-
-my ($body, $summary) = @{$session{'my_rt_portlets'}}{qw(body summary)};
-unless( $body && @$body ) {
- $body = $summary || [];
- $summary = undef;
-}
-$summary = undef unless $summary && @$summary;
-
-my $Rows = $user->Preferences( 'SummaryRows', ( $RT::DefaultSummaryRows || 10 ) );
-
-my $show_cb = sub {
- my $entry = shift;
- my $type = $entry->{type};
- if ( $type eq 'component' ) {
- my $name = $entry->{name};
-
- # security check etc.
- $m->comp( $name, %{ $entry->{arguments} || {} } );
- } elsif ( $type eq 'system' ) {
- $m->comp( '/Elements/ShowSearch', Name => $entry->{name}, Override => { Rows => $Rows } );
- } elsif ( $type eq 'saved' ) {
- $m->comp( '/Elements/ShowSearch', SavedSearch => $entry->{name}, Override => { Rows => $Rows } );
- } else {
- $RT::Logger->error("unknown portlet type $type");
- }
-};
-
-</%INIT>
diff --git a/rt/html/Elements/MyReminders b/rt/html/Elements/MyReminders
deleted file mode 100755
index 686322557..000000000
--- a/rt/html/Elements/MyReminders
+++ /dev/null
@@ -1,73 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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>
-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") AND Due > "1970-01-01"');
-$reminders->OrderBy(FIELD => 'Due', ORDER => 'DESC');
-</%init>
diff --git a/rt/html/Elements/MyRequests b/rt/html/Elements/MyRequests
deleted file mode 100644
index 9a6d0a31d..000000000
--- a/rt/html/Elements/MyRequests
+++ /dev/null
@@ -1,49 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/MySupportQueues b/rt/html/Elements/MySupportQueues
deleted file mode 100644
index 6dec1e1cc..000000000
--- a/rt/html/Elements/MySupportQueues
+++ /dev/null
@@ -1,54 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => [ {cond => "Status = 'new'", name => loc ('new') },
- {cond => "Status = 'open'", name => loc ('open') }] &>
-</&>
diff --git a/rt/html/Elements/MyTickets b/rt/html/Elements/MyTickets
deleted file mode 100644
index 771abbd9a..000000000
--- a/rt/html/Elements/MyTickets
+++ /dev/null
@@ -1,49 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/PageLayout b/rt/html/Elements/PageLayout
deleted file mode 100644
index 6897ede1a..000000000
--- a/rt/html/Elements/PageLayout
+++ /dev/null
@@ -1,237 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
-% $m->out($topactions->{"$action"}->{'html'});
- </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>
-
-% 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>
-% if ($page_tabs) {
-% foreach my $tab (sort keys %{$page_tabs}) {
-% next if $tab =~ /^(?:current_toptab|this)$/;
-% $count++;
-%
-% 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;
-%
-% $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;
-%
-% $class->{li} = join ' ', @li;
-%
-%
- <li<% $class->{li} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && "&#183; "|n%><a href="<%$RT::WebPath%>/<%$page_tabs->{$tab}->{'path'}%>"<%$class->{a}|n%><% $class->{a} ? ' name="focus"' : ''|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>
-% $sep = 0;
-% $postsep = 0;
-% $count = 0;
-% $class = { };
-%
-% for my $type ($actions, $subactions) {
-%
-% if ($type && %$type) {
-% foreach my $action (sort keys %{$type}) {
-% $count++;
-%
-% $sep = $type->{$action}->{'separator'} ? 1 : 0;
-%
-% my @li;
-% push @li, 'first'
-% if $count == 1;
-%
-% push @li, 'pre-separator'
-% if $sep;
-%
-% push @li, 'post-separator'
-% if $postsep;
-%
-% $class->{li} = join ' ', @li;
-%
- <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::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 id="body">
-<& /Elements/Callback, _CallbackName => 'BeforeBody', %ARGS &>
-%$m->flush_buffer(); # we've got the page laid out, let's flush the buffer;
-
-<%INIT>
- foreach my $tab (sort keys %{$toptabs}) {
- if ($current_toptab && $toptabs->{$tab}->{'path'} eq $current_toptab) {
- $toptabs->{$tab}->{"subtabs"} = $tabs;
- $toptabs->{$tab}->{"current_subtab"} = $current_tab;
- }
- }
-
-if (! defined($AppName)) {
- $AppName = loc("RT for [_1]", $RT::rtname);
-}
-
-my ($menu_depth, $almost_last, $page_tabs);
-
-if ($RT::WebDefaultStylesheet ne '3.4-compat') {
- ($menu_depth, $almost_last) = @{$m->comp('.menu_recurse', data => $toptabs)};
-
- 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 => { }
- $pdata => { }
- $ppdata => { }
- $level => 0
- </%args>
- <%init>
- for my $key (keys %$data) {
- return $m->comp('.menu_recurse', data => $data->{$key}->{subtabs},
- pdata => $data->{$key},
- ppdata => $pdata,
- level => $level+1)
- if ref($data->{$key}) eq 'HASH'
- and defined $data->{$key}->{subtabs}
- and %{$data->{$key}->{subtabs}};
- }
- $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
-$AppName => undef
-$show_menu => 1
-</%ARGS>
diff --git a/rt/html/Elements/QueryString b/rt/html/Elements/QueryString
deleted file mode 100644
index bade07f79..000000000
--- a/rt/html/Elements/QueryString
+++ /dev/null
@@ -1,63 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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;
-while ( my ($key, $value) = each %ARGS ){
- if( UNIVERSAL::isa( $value, 'ARRAY' ) ) {
- push @params, map $key."=".$m->interp->apply_escapes($_,'u'), @$value;
- } else {
- if (ref $value eq "ARRAY") {
- push @params, $key."=".$m->interp->apply_escapes($_, 'u')
- for @{$value};
- } else {
- push @params, $key."=".$m->interp->apply_escapes($value||"",'u');
- }
- }
-}
-return(join('&',@params));
-</%init>
diff --git a/rt/html/Elements/QueueSummary b/rt/html/Elements/QueueSummary
deleted file mode 100644
index 8ad371a9f..000000000
--- a/rt/html/Elements/QueueSummary
+++ /dev/null
@@ -1,92 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%">
-<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 $queue_cond = "Queue = '$queue->{Name}' AND ";
-% my $all_q = $queue_cond . "(Status = 'open' OR Status = 'new' OR Status = 'stalled')";
-<tr class="<% $i%2 ? 'oddline' : 'evenline'%>" >
-<td><a href="<% $RT::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::WebPath%>/Search/Results.html?Query=<% $queue_cond.$condition->{cond} |u,n %>"><% $Tickets->Count %></a></td>
-% }
-</tr>
-% }
-</table>
-<%INIT>
-my @queues;
-
-if ($cache && exists $session{$cache}) {
- @queues = @{$session{$cache}};
-}
-else {
- my $Queues = RT::Queues->new($session{'CurrentUser'});
- $Queues->UnLimit();
- @queues = map {
- { Name => $_->Name, Description => $_->Description,
- id => $_->Id } }
- grep $queue_filter->($_), @{$Queues->ItemsArrayRef};
-
- $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/html/Elements/QuickCreate b/rt/html/Elements/QuickCreate
deleted file mode 100644
index 5669a4544..000000000
--- a/rt/html/Elements/QuickCreate
+++ /dev/null
@@ -1,71 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath%>/index.html">
-<input type="hidden" class="hidden" name="QuickCreate" value="1" />
-<table>
-<tr><td>
-<&|/l&>Subject</&>:<br /><input size="15" name="Subject" />
-</td><td>
-<&|/l&>Queue</&>:<br /><& /Elements/SelectNewTicketQueue, Name => 'Queue', ShowNullOption => 0 &>
-</td><td>
-<&|/l&>Owner</&>:<br />
-<select type="select" name="Owner">
-<option value="<%$session{'CurrentUser'}->id%>" selected><%$session{'CurrentUser'}->Name %></option>
-<option value="<%$RT::Nobody->id%>"><%loc('Nobody')%></option>
-</select>
-</td>
-</tr>
-%#<tr><td colspan="3"><textarea cols="50" rows="3"></textarea></td></tr>
-</table>
-<div align="right"><input type="submit" class="button" value="<%loc('Create')%>" /></div>
-</form>
-</&>
-</div>
-
diff --git a/rt/html/Elements/Quicksearch b/rt/html/Elements/Quicksearch
deleted file mode 100644
index eb21b3ba1..000000000
--- a/rt/html/Elements/Quicksearch
+++ /dev/null
@@ -1,61 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath.'/Prefs/Quicksearch.html' &>
-<& /Elements/QueueSummary,
- cache => 'quick_search_queues',
- queue_filter => sub { $_->CurrentUserHasRight('ShowTicket') && !exists $unwanted->{$_->Name} },
- conditions => [ {cond => "Status = 'new'", name => loc ('new') },
- {cond => "Status = 'open'", name => loc ('open') },
- {cond => "Status = 'stalled'", name => loc ('stalled') }] &>
-</&>
-</div>
-<%INIT>
-my $unwanted = $session{'CurrentUser'}->UserObj->Preferences('QuickSearch', {});
-</%INIT>
diff --git a/rt/html/Elements/RT__Ticket/ColumnMap b/rt/html/Elements/RT__Ticket/ColumnMap
deleted file mode 100644
index ae962263c..000000000
--- a/rt/html/Elements/RT__Ticket/ColumnMap
+++ /dev/null
@@ -1,319 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-our ( $COLUMN_MAP );
-
-my $ColumnMap = sub {
- my $name = shift;
- my $attr = shift;
-
- # First deal with the simple things from the map
- if ( $COLUMN_MAP->{$name} ) {
- return ( $COLUMN_MAP->{$name}->{$attr} );
- }
-
- # now, let's deal with harder things, like Custom Fields
-
- elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) {
- my $field = $1;
-
- if ( $attr eq 'attribute' ) {
- return ("CF.{$field}");
- }
- elsif ( $attr eq 'title' ) {
- return ( $field );
- }
- elsif ( $attr eq 'value' ) {
- # Display custom field contents, separated by newlines.
- # For Image custom fields we also show a thumbnail here.
- return sub {
- my $values = $_[0]->CustomFieldValues($field);
- my @values = map {
- (
- ($_->CustomFieldObj->Type eq 'Image')
- ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ ))
- : $_->Content
- ),
- \'<br />',
- } @{ $values->ItemsArrayRef };
- pop @values; # Remove that last <br />
- return @values;
- };
- }
- }
-};
-
-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',
- value => sub { return $_[0]->Queue }
- },
- QueueName => {
- attribute => 'Queue',
- title => 'Queue',
- value => sub { return $_[0]->QueueObj->Name }
- },
- OwnerName => {
- title => 'Owner',
- attribute => 'Owner',
- value => sub { return $_[0]->OwnerObj->Name }
- },
- id => {
- attribute => 'id',
- align => 'right',
- value => sub { return $_[0]->id }
- },
- Status => {
- attribute => 'Status',
- value => sub { return loc($_[0]->Status) }
- },
- Subject => {
- attribute => 'Subject',
- value => sub { return $_[0]->Subject || "(" . loc('No subject') . ")" }
- },
- ExtendedStatus => {
- title => 'Status',
- attribute => 'Status',
- value => sub {
- my $Ticket = shift;
-
- if ( $Ticket->HasUnresolvedDependencies ) {
- if ( $Ticket->HasUnresolvedDependencies( Type => 'approval' )
- or $Ticket->HasUnresolvedDependencies( Type => 'code' ) )
- {
- return \'<em>', loc('(pending approval)'), \'</em>';
- }
- else {
- return \'<em>', loc('(pending other Collection)'), \'</em>';
- }
- }
- else {
- return loc( $Ticket->Status );
- }
-
- }
- },
- Priority => {
- attribute => 'Priority',
- value => sub { return $_[0]->Priority }
- },
- InitialPriority => {
- attribute => 'InitialPriority',
- name => 'Initial Priority',
- value => sub { return $_[0]->InitialPriority }
- },
- FinalPriority => {
- attribute => 'FinalPriority',
- name => 'Final Priority',
- value => sub { return $_[0]->FinalPriority }
- },
- EffectiveId => {
- attribute => 'EffectiveId',
- value => sub { return $_[0]->EffectiveId }
- },
- Type => {
- attribute => 'Type',
- value => sub { return $_[0]->Type }
- },
- TimeWorked => {
- attribute => 'TimeWorked',
- title => 'Time Worked',
- value => sub { return $_[0]->TimeWorked }
- },
- TimeLeft => {
- attribute => 'TimeLeft',
- title => 'Time Left',
- value => sub { return $_[0]->TimeLeft }
- },
- TimeEstimated => {
- attribute => 'TimeEstimated',
- title => 'Time Estimated',
- value => sub { return $_[0]->TimeEstimated }
- },
- Requestors => {
- attribute => 'Requestor.EmailAddress',
- value => sub { return $_[0]->Requestors->MemberEmailAddressesAsString }
- },
- Cc => {
- attribute => 'Cc.EmailAddress',
- value => sub { return $_[0]->Cc->MemberEmailAddressesAsString }
- },
- AdminCc => {
- attribute => 'AdminCc.EmailAddress',
- value => sub { return $_[0]->AdminCc->MemberEmailAddressesAsString }
- },
- StartsRelative => {
- title => 'Starts',
- attribute => 'Starts',
- value => sub { return $_[0]->StartsObj->AgeAsString }
- },
- StartedRelative => {
- title => 'Started',
- attribute => 'Started',
- value => sub { return $_[0]->StartedObj->AgeAsString }
- },
- CreatedRelative => {
- title => 'Created',
- attribute => 'Created',
- value => sub { return $_[0]->CreatedObj->AgeAsString }
- },
- LastUpdatedRelative => {
- title => 'Last Updated',
- attribute => 'LastUpdated',
- value => sub { return $_[0]->LastUpdatedObj->AgeAsString }
- },
- ToldRelative => {
- title => 'Told',
- attribute => 'Told',
- value => sub { return $_[0]->ToldObj->AgeAsString }
- },
- DueRelative => {
- title => 'Due',
- attribute => 'Due',
- value => sub {
- my $date = $_[0]->DueObj;
- if ($date && $date->Unix > 0 && $date->Unix < time()) {
- return (\'<span class="overdue">' , $date->AgeAsString , \'</span>');
- } else {
- return $date->AgeAsString;
- }
- }
- },
- ResolvedRelative => {
- title => 'Resolved',
- attribute => 'Resolved',
- value => sub { return $_[0]->ResolvedObj->AgeAsString }
- },
- Starts => {
- attribute => 'Starts',
- value => sub { return $_[0]->StartsObj->AsString }
- },
- Started => {
- attribute => 'Started',
- value => sub { return $_[0]->StartedObj->AsString }
- },
- Created => {
- attribute => 'Created',
- value => sub { return $_[0]->CreatedObj->AsString }
- },
- CreatedBy => {
- attribute => 'Creator',
- title => 'Created By',
- value => sub { return $_[0]->CreatorObj->Name }
- },
- LastUpdated => {
- attribute => 'LastUpdated',
- title => 'Last Updated',
- value => sub { return $_[0]->LastUpdatedObj->AsString }
- },
- LastUpdatedBy => {
- attribute => 'LastUpdatedBy',
- title => 'Last Updated By',
- value => sub { return $_[0]->LastUpdatedByObj->Name }
- },
- Told => {
- attribute => 'Told',
- value => sub { return $_[0]->ToldObj->AsString }
- },
- Due => {
- attribute => 'Due',
- value => sub { return $_[0]->DueObj->AsString }
- },
- Resolved => {
- attribute => 'Resolved',
- value => sub { return $_[0]->ResolvedObj->AsString }
- },
-
- # Everything from LINKTYPEMAP
- (map {
- $_ => { value => $LinkCallback->( $_ ) }
- } keys %RT::Ticket::LINKTYPEMAP),
-
- '_CLASS' => {
- value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' }
- },
- '_CHECKBOX' => {
- attribute => 'checkbox',
- title => loc('Update'),
- align => 'right',
- value => sub { return \('<input type="checkbox" class="checkbox" name="UpdateTicket'.$_[0]->id.'" value="1" checked />') }
- },
-
-};
-</%ONCE>
-<%init>
-$m->comp( '/Elements/Callback', COLUMN_MAP => $COLUMN_MAP, _CallbackName => 'ColumnMap');
-return $ColumnMap->( $Name, $Attr );
-</%init>
diff --git a/rt/html/Elements/Refresh b/rt/html/Elements/Refresh
deleted file mode 100644
index 91ad0420a..000000000
--- a/rt/html/Elements/Refresh
+++ /dev/null
@@ -1,69 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-%}
-><&|/l&>Don't refresh this page.</&></option>
-%foreach my $value (@refreshevery) {
-<option value="<%$value%>"
-% if ( $Default && ($value == $Default)) {
-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/html/Elements/RefreshHomepage b/rt/html/Elements/RefreshHomepage
deleted file mode 100644
index daed6b747..000000000
--- a/rt/html/Elements/RefreshHomepage
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath%>/index.html">
-<& /Elements/Refresh, Name => 'HomeRefreshInterval', Default => $session {'home_refresh_interval'} &>
-<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
-</form>
diff --git a/rt/html/Elements/ScrubHTML b/rt/html/Elements/ScrubHTML
deleted file mode 100644
index 10d5f90d2..000000000
--- a/rt/html/Elements/ScrubHTML
+++ /dev/null
@@ -1,73 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $scrubber = HTML::Scrubber->new();
-
-$scrubber->default(
- 0,
- {
- '*' => 0,
- id => 1,
- class => 1,
- # Match http, ftp and relative urls
- href => qr{^(?:http:|ftp:|https:|/|__Web(?:Path|BaseURL|URL)__)}i,
- face => 1,
- size => 1,
- target => 1
- }
-);
-
-$scrubber->deny(qw[*]);
-$scrubber->allow(
- qw[A B U P BR I HR BR SMALL EM FONT SPAN DIV UL OL LI DL DT DD PRE]);
-$scrubber->comment(0);
-return ( $scrubber->scrub($Content) );
-</%init>
-<%args>
-$Content => undef
-</%args>
diff --git a/rt/html/Elements/Section b/rt/html/Elements/Section
deleted file mode 100644
index cbccde1d4..000000000
--- a/rt/html/Elements/Section
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/SelectAttachmentField b/rt/html/Elements/SelectAttachmentField
deleted file mode 100644
index d0d080ef6..000000000
--- a/rt/html/Elements/SelectAttachmentField
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/SelectBoolean b/rt/html/Elements/SelectBoolean
deleted file mode 100644
index 77d27a2c6..000000000
--- a/rt/html/Elements/SelectBoolean
+++ /dev/null
@@ -1,71 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>><%$True%></option>
-<option value="<%$FalseVal%>" <%$FalseDefault%>><%$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";
-}
-else {
- $TrueDefault = "SELECTED";
-}
-</%INIT>
diff --git a/rt/html/Elements/SelectCustomFieldOperator b/rt/html/Elements/SelectCustomFieldOperator
deleted file mode 100644
index ba1909550..000000000
--- a/rt/html/Elements/SelectCustomFieldOperator
+++ /dev/null
@@ -1,64 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-% }
-><%$option%></option>
-% }
-</select>
-
-<%ARGS>
-$Name => undef
-@Options => ( loc('contains'), loc("doesn't contain"), loc('is'), loc("isn't"), loc('less than'), loc('greater than'))
-@Values => ('LIKE', 'NOT LIKE', '=', '!=', '<', '>')
-$Default => ''
-</%ARGS>
diff --git a/rt/html/Elements/SelectCustomFieldValue b/rt/html/Elements/SelectCustomFieldValue
deleted file mode 100644
index 73897c046..000000000
--- a/rt/html/Elements/SelectCustomFieldValue
+++ /dev/null
@@ -1,65 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Callback, %ARGS &>
-% if ($CustomField->Type =~ /Select/i) {
-% my $values = $CustomField->Values;
-<select name="<%$Name%>">
-<option value="" 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/html/Elements/SelectDate b/rt/html/Elements/SelectDate
deleted file mode 100644
index 5767074fb..000000000
--- a/rt/html/Elements/SelectDate
+++ /dev/null
@@ -1,75 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="<% $Default %>" 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);
-}
-
-unless ($Name) {
- $Name = $menu_prefix. "_Date";
-}
-</%init>
-
-<%args>
-
-$ShowTime => undef
-$menu_prefix=>''
-$current=>time
-$Default => ''
-$Name => undef
-$Size => 16
-</%args>
diff --git a/rt/html/Elements/SelectDateRelation b/rt/html/Elements/SelectDateRelation
deleted file mode 100644
index 056ad48ac..000000000
--- a/rt/html/Elements/SelectDateRelation
+++ /dev/null
@@ -1,60 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/SelectDateType b/rt/html/Elements/SelectDateType
deleted file mode 100644
index ff0154359..000000000
--- a/rt/html/Elements/SelectDateType
+++ /dev/null
@@ -1,60 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/SelectEqualityOperator b/rt/html/Elements/SelectEqualityOperator
deleted file mode 100644
index 85c103110..000000000
--- a/rt/html/Elements/SelectEqualityOperator
+++ /dev/null
@@ -1,64 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-% }
-><%$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/html/Elements/SelectGroups b/rt/html/Elements/SelectGroups
deleted file mode 100644
index 8b6e4850c..000000000
--- a/rt/html/Elements/SelectGroups
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 value="<% $col->[0] %>"><% loc($col->[1]) %></option>
-% }
-% while (my $CF = $CFs->Next) {
-<option value="CustomField-<% $CF->Id %>"><&|/l&>CustomField</&>: <% $CF->Name %></option>
-% }
-</select>
-<& /Elements/SelectMatch, Name=> 'GroupOp' &>
-<input size="8" name="GroupString" />
-<%INIT>
-my $CFs = RT::CustomFields->new($session{'CurrentUser'});
-$CFs->LimitToChildType('RT::Group');
-$CFs->OrderBy( FIELD => 'Name' );
-</%INIT>
diff --git a/rt/html/Elements/SelectLang b/rt/html/Elements/SelectLang
deleted file mode 100644
index 490307f4a..000000000
--- a/rt/html/Elements/SelectLang
+++ /dev/null
@@ -1,80 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>" <%($Default && ($lang eq $Default)) && 'SELECTED'%>><% $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)/;
- $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/html/Elements/SelectLinkType b/rt/html/Elements/SelectLinkType
deleted file mode 100644
index 3d2c27cf8..000000000
--- a/rt/html/Elements/SelectLinkType
+++ /dev/null
@@ -1,61 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="MemberOf"><&|/l&>Member of</&></option>
-<option value="DependsOn"><&|/l&>Depends on</&></option>
-<option value="RefersTo"><&|/l&>Refers to</&></option>
-</select>
-
-<%ARGS>
-$Name => "LinkType"
-$Default => undef
-</%ARGS>
-
-<%INIT>
-# TODO handle Default
-</%INIT>
diff --git a/rt/html/Elements/SelectMatch b/rt/html/Elements/SelectMatch
deleted file mode 100644
index 828d304aa..000000000
--- a/rt/html/Elements/SelectMatch
+++ /dev/null
@@ -1,82 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>><%$Like%></option>
-<option value="NOT LIKE" <%$NotLikeDefault%>><%$NotLike%></option>
-<option value="=" <%$TrueDefault%>><%$True%></option>
-<option value="!=" <%$FalseDefault%>><%$False%></option>
-</select>
-
-<%ARGS>
-$Name => undef
-$Like => loc('contains')
-$NotLike => loc("doesn't contain")
-$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 = "SELECTED";
-}
-elsif ($Default && $Default =~ /true/i) {
- $TrueDefault = "SELECTED";
-}
-elsif ($Default && $Default =~ /notlike/i) {
- $NotLikeDefault = "SELECTED";
-}
-else {
- $LikeDefault = "SELECTED";
-}
-</%INIT>
diff --git a/rt/html/Elements/SelectNewTicketQueue b/rt/html/Elements/SelectNewTicketQueue
deleted file mode 100644
index 528a37d95..000000000
--- a/rt/html/Elements/SelectNewTicketQueue
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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', %ARGS, ShowNullOption => 0, ShowAllQueues => 0 &>
-</label>
diff --git a/rt/html/Elements/SelectOwner b/rt/html/Elements/SelectOwner
deleted file mode 100644
index dbe2f8cc0..000000000
--- a/rt/html/Elements/SelectOwner
+++ /dev/null
@@ -1,110 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 <% !$Default ? "SELECTED" : '' %> value=""><%$DefaultLabel%></option>
-%}
-%foreach my $User ( @users) {
-<option <% ($User->Id == $Default) ? "SELECTED" : ''%>
-%if ($ValueAttribute eq 'id') {
- value="<%$User->id%>"
-%} elsif ($ValueAttribute eq 'Name') {
- value="<%$User->Name%>"
-%}
-><%$User->Name()%></option>
-%}
-</select>
-<%INIT>
-my @objects;
-my @users;
-
-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;
-
-
-foreach my $object (@objects) {
- my $Users = RT::Users->new($session{CurrentUser});
- $Users->WhoHaveRight(Right => 'OwnTicket', Object => $object, IncludeSystemRights => 1, IncludeSuperusers => 0);
- 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;
- }
-}
-
-@users = sort { uc($a->Name) cmp uc($b->Name) } values %user_uniq_hash;
-unshift(@users, $RT::Nobody);
-
-
-
-</%INIT>
-
-<%ARGS>
-$QueueObj => undef
-$Name => undef
-$Default => 0
-$User => undef
-$TicketObj => undef
-$DefaultValue => 1
-$DefaultLabel => "-"
-$ValueAttribute => 'id'
-$cfqueues => undef
-</%ARGS>
diff --git a/rt/html/Elements/SelectQueue b/rt/html/Elements/SelectQueue
deleted file mode 100644
index 21d379db6..000000000
--- a/rt/html/Elements/SelectQueue
+++ /dev/null
@@ -1,97 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%>" />
-% }
-% else {
-<select name="<%$Name%>">
-% if ($ShowNullOption) {
- <option value="">-</option>
-% }
-% for my $queue (@{$session{$cache_key}}) {
- <option value="<% ($NamedValues ? $queue->{Name} : $queue->{Id}) %>" <% ($queue->{Id} eq $Default ? 'selected="selected"' : '') |n %>>
- <%$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
-</%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/html/Elements/SelectSortOrder b/rt/html/Elements/SelectSortOrder
deleted file mode 100644
index 4d2423ab1..000000000
--- a/rt/html/Elements/SelectSortOrder
+++ /dev/null
@@ -1,65 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && 'SELECTED' %>>
-<% 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/html/Elements/SelectStatus b/rt/html/Elements/SelectStatus
deleted file mode 100644
index 9250e7336..000000000
--- a/rt/html/Elements/SelectStatus
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 <% !$Default && "SELECTED" %> value=""><%$DefaultLabel%></option>
-%}
-%foreach my $status (@status) {
-%next if ($SkipDeleted && $status eq 'deleted');
-<option <% ($status eq $Default) && "SELECTED" %> value="<%$status%>"><%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/html/Elements/SelectTicketSortBy b/rt/html/Elements/SelectTicketSortBy
deleted file mode 100644
index 1ae7f83bb..000000000
--- a/rt/html/Elements/SelectTicketSortBy
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && 'SELECTED'%>><% 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/html/Elements/SelectTicketTypes b/rt/html/Elements/SelectTicketTypes
deleted file mode 100644
index dba61e86a..000000000
--- a/rt/html/Elements/SelectTicketTypes
+++ /dev/null
@@ -1,58 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) && "SELECTED" %>><&|/l&><% $_ %></&>
-%}
-</select>
-
-<%ARGS>
-$Name => 'TickType'
-$Default => undef
-@Types => qw(Approval Ticket)
-</%ARGS>
diff --git a/rt/html/Elements/SelectTimeUnits b/rt/html/Elements/SelectTimeUnits
deleted file mode 100755
index c218d8ab1..000000000
--- a/rt/html/Elements/SelectTimeUnits
+++ /dev/null
@@ -1,57 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="minutes" selected><% loc('Minutes') %></option>
-<option value="hours"><% loc('Hours') %></option>
-</select>
-<%INIT>
-$Name .= '-TimeUnits' unless $Name =~ /-TimeUnits$/io;
-</%INIT>
-<%ARGS>
-$Name => ''
-</%ARGS>
diff --git a/rt/html/Elements/SelectUsers b/rt/html/Elements/SelectUsers
deleted file mode 100644
index 8535cabb9..000000000
--- a/rt/html/Elements/SelectUsers
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 value="<% $col->[0] %>"><% loc($col->[1]) %></option>
-% }
-% while (my $CF = $CFs->Next) {
-<option value="CustomField-<% $CF->Id %>"><&|/l&>CustomField</&>: <% $CF->Name %></option>
-% }
-</select>
-<& /Elements/SelectMatch, Name=> 'UserOp' &>
-<input size="8" name="UserString" />
-<%INIT>
-my $CFs = RT::CustomFields->new($session{'CurrentUser'});
-$CFs->LimitToChildType('RT::User');
-$CFs->OrderBy( FIELD => 'Name' );
-</%INIT>
diff --git a/rt/html/Elements/SelectWatcherType b/rt/html/Elements/SelectWatcherType
deleted file mode 100644
index 8f15276b6..000000000
--- a/rt/html/Elements/SelectWatcherType
+++ /dev/null
@@ -1,71 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && "SELECTED"%>><%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/html/Elements/SetupSessionCookie b/rt/html/Elements/SetupSessionCookie
deleted file mode 100644
index 3225c0d8c..000000000
--- a/rt/html/Elements/SetupSessionCookie
+++ /dev/null
@@ -1,133 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-
-my %cookies = CGI::Cookie->fetch();
-my $cookiename = "RT_SID_" . $RT::rtname . "." . $ENV{'SERVER_PORT'};
-$SessionCookie = $cookies{$cookiename} ? $cookies{$cookiename}->value : undef;
-
-my %backends = (
- mysql => 'Apache::Session::MySQL',
- Pg => 'Apache::Session::Postgres',
-
- # Oracle => 'Apache::Session::Oracle',
-);
-
-my $session_class = $RT::WebSessionClass
- || $backends{$RT::DatabaseType}
- || 'Apache::Session::File';
-my $pm = "$session_class.pm";
-$pm =~ s|::|/|g;
-require $pm;
-
-# morning bug avoidance attempt -- pdh 20030815
-unless ( $RT::Handle->dbh && $RT::Handle->dbh->ping ) {
- $RT::Handle->Connect();
-}
-
-my $session_properties;
-if ( $session_class eq 'Apache::Session::File' ) {
- $session_properties = {
- Directory => $RT::MasonSessionDir,
- LockDirectory => $RT::MasonSessionDir,
- Transaction => 1
- };
-} else {
- $session_properties = {
- Handle => $RT::Handle->dbh,
- LockHandle => $RT::Handle->dbh,
- Transaction => 1
- };
-}
-
-eval {
- tie %session, $session_class, $SessionCookie, $session_properties
-};
-if ($@) {
-
- # If the session is invalid, create a new session.
- eval {
- tie %session, $session_class, undef, $session_properties;
- undef $cookies{$cookiename};
- };
-}
-elsif ( !($session{'CurrentUser'} && $session{'CurrentUser'}->id) ) {
- eval {
- undef $cookies{$cookiename};
- tied(%session)->delete;
- tie %session, $session_class, undef, $session_properties;
- }
-}
-
-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"
- . $@;
-}
-
-if ( !$cookies{$cookiename} ) {
- my $cookie = new CGI::Cookie(
- -name => $cookiename,
- -value => $session{_session_id},
- -path => $RT::WebPath,
- -secure => ($RT::WebSecureCookies ? 1 :0)
- );
- $r->headers_out->{'Set-Cookie'} = $cookie->as_string;
-
-}
-
-return ();
-</%init>
-<%args>
-$SessionCookie => undef
-</%args>
diff --git a/rt/html/Elements/ShadedBox b/rt/html/Elements/ShadedBox
deleted file mode 100644
index 36b9cae7c..000000000
--- a/rt/html/Elements/ShadedBox
+++ /dev/null
@@ -1,33 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<table>
- <tr>
- <td class="label"><%$title |n %>:</td>
- <td class="value"><%$content |n %></td>
- </tr>
-</table>
-<%ARGS>
-$title => undef
-$content => "&nbsp;"
-</%ARGS>
diff --git a/rt/html/Elements/ShadedInputRow b/rt/html/Elements/ShadedInputRow
deleted file mode 100644
index e9fb69e5f..000000000
--- a/rt/html/Elements/ShadedInputRow
+++ /dev/null
@@ -1,35 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<tr>
- <td class="label"><%$title |n %>:</td>
- <td class="value">
- <input name=<%$name%> value="<%$content|h%>" SIZE=<%$size%>>
- </td>
-</tr>
-<%ARGS>
-$title => undef
-$content => "&nbsp;"
-$name => undef
-$size => undef
-</%ARGS>
diff --git a/rt/html/Elements/ShadedRow b/rt/html/Elements/ShadedRow
deleted file mode 100644
index 8947fcd82..000000000
--- a/rt/html/Elements/ShadedRow
+++ /dev/null
@@ -1,31 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<tr>
- <td class="label"><%$title |n %>:</td>
- <td class="value"><%$content |n %></td>
-</tr>
-<%ARGS>
-$title => undef
-$content => "&nbsp;"
-</%ARGS>
diff --git a/rt/html/Elements/ShowCustomFieldBinary b/rt/html/Elements/ShowCustomFieldBinary
deleted file mode 100644
index e8fb2e77c..000000000
--- a/rt/html/Elements/ShowCustomFieldBinary
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath%>/Download/CustomFieldValue/<% $Object->Id %>/<% $Object->Content %>"><% $Object->Content %></a>
-<%ARGS>
-$Object => undef
-</%ARGS>
diff --git a/rt/html/Elements/ShowCustomFieldImage b/rt/html/Elements/ShowCustomFieldImage
deleted file mode 100644
index ee93f546f..000000000
--- a/rt/html/Elements/ShowCustomFieldImage
+++ /dev/null
@@ -1,53 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Elements/ShowCustomFieldWikitext b/rt/html/Elements/ShowCustomFieldWikitext
deleted file mode 100644
index c4393ae8b..000000000
--- a/rt/html/Elements/ShowCustomFieldWikitext
+++ /dev/null
@@ -1,58 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WikiImplicitLinks, prefix => $base} );
-<%$wiki_content|n%>
-<%init>
-use Text::WikiFormat;
-</%init>
-<%ARGS>
-$Object
-</%ARGS>
diff --git a/rt/html/Elements/ShowCustomFields b/rt/html/Elements/ShowCustomFields
deleted file mode 100644
index cf6127e89..000000000
--- a/rt/html/Elements/ShowCustomFields
+++ /dev/null
@@ -1,115 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-% 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>
-% }
-</table>
-<%INIT>
-my $CustomFields = $Object->CustomFields;
-$m->comp('/Elements/Callback', _CallbackName => 'MassageCustomFields',
- 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->comp('/Elements/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
-</%ARGS>
diff --git a/rt/html/Elements/ShowLink b/rt/html/Elements/ShowLink
deleted file mode 100644
index 1b615c0ad..000000000
--- a/rt/html/Elements/ShowLink
+++ /dev/null
@@ -1,64 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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")) {
-<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<% loc($member->Status) %>]
-% } 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/html/Elements/ShowLinks b/rt/html/Elements/ShowLinks
deleted file mode 100755
index 8160c8581..000000000
--- a/rt/html/Elements/ShowLinks
+++ /dev/null
@@ -1,112 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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</&>:</td>
- <td class="value">
-<ul>
-% while (my $Link = $Ticket->DependsOn->Next) {
-<li><& ShowLink, URI => $Link->TargetURI &></li>
-% }
-</ul>
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Depended on by</&>:</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</&>:</td>
- <td class="value">
-<ul>
-% while (my $Link = $Ticket->MemberOf->Next) {
-<li><& ShowLink, URI => $Link->TargetURI &></li>
-% }
-</ul>
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Children</&>:</td>
- <td class="value"><& /Ticket/Elements/ShowMembers, Ticket => $Ticket &></td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Refers to</&>:</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</&>:</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->comp('/Elements/Callback', %ARGS );
-
-</table>
-
-<%ARGS>
-$Ticket => undef
-</%ARGS>
diff --git a/rt/html/Elements/ShowMemberships b/rt/html/Elements/ShowMemberships
deleted file mode 100644
index a0c83ad6e..000000000
--- a/rt/html/Elements/ShowMemberships
+++ /dev/null
@@ -1,88 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/Elements/ShowSearch b/rt/html/Elements/ShowSearch
deleted file mode 100644
index e940121fe..000000000
--- a/rt/html/Elements/ShowSearch
+++ /dev/null
@@ -1,125 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-<& $query_display_component, %$ProcessedSearchArg, ShowNavigation => 0 &>
-</&>
-<%init>
-my $search;
-my $user = $session{'CurrentUser'}->UserObj;
-my $SearchArg;
-my $customize;
-my $query_display_component = '/Elements/TicketList';
-my $query_link_url = 'Search/Results.html';
-
-if ($SavedSearch) {
- my ( $container_object, $search_id ) = _parse_saved_search($SavedSearch);
- $search = $container_object->Attributes->WithId($search_id);
- unless ( $search->Id && ref( $SearchArg = $search->Content ) eq 'HASH' ) {
- $m->out("Saved Search $SavedSearch not found");
- 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 = "Search/$SearchArg->{SearchType}.html";
- } else {
- $customize = $RT::WebPath . '/Search/Build.html?'
- . $m->comp( '/Elements/QueryString',
- LoadSavedSearch => $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 );
- $customize = $RT::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->comp(
- '/Elements/Callback', %ARGS,
- _CallbackName => 'ModifySearch',
- OriginalSearch => $SearchArg,
- Search => $ProcessedSearchArg,
-);
-
-foreach ( $SearchArg, $ProcessedSearchArg ) {
- $_->{'Format'} =~ s/__WebPath__/$RT::WebPath/g;
- $_->{'Format'} =~ s/__loc\(["']?(\w+)["']?\)__/loc("$1")/ge;
-}
-
-my $QueryString = '?' . $m->comp( '/Elements/QueryString', %$SearchArg );
-
-</%init>
-<%ARGS>
-$Name => undef
-$SavedSearch => undef
-%Override => ()
-</%ARGS>
diff --git a/rt/html/Elements/SimpleSearch b/rt/html/Elements/SimpleSearch
deleted file mode 100644
index 2876a2957..000000000
--- a/rt/html/Elements/SimpleSearch
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath %>/Search/Simple.html">
- <input size="12" name="q" autocomplete="off" accesskey="0" class="field" />
- <input type="submit" class="button" value="<&|/l&>Search</&>" />
-</form>
diff --git a/rt/html/Elements/Submit b/rt/html/Elements/Submit
deleted file mode 100644
index e2dd377df..000000000
--- a/rt/html/Elements/Submit
+++ /dev/null
@@ -1,86 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
- <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 ($AlternateLabel) {
- <span class="caption"><%$AlternateCaption%></span>
- <input type="submit" <% $Name && qq[ name="$Name"] | n %> value="<%$AlternateLabel%>" class="button" />
-% } else {
- <span class="caption"><%$Caption%></span>
- <input type="submit" <% $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 => ''
-$Reset => undef
-$ResetLabel => loc('Reset')
-</%ARGS>
diff --git a/rt/html/Elements/Tabs b/rt/html/Elements/Tabs
deleted file mode 100644
index 3b0f3da6d..000000000
--- a/rt/html/Elements/Tabs
+++ /dev/null
@@ -1,122 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => '',
- },
- 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'
- },
- P => { title => loc('Approval'),
- path => 'Approvals/'
- },
- };
-
-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 => 'User/Prefs.html'
- };
-}
-
-if (!defined $toptabs) {
- $toptabs = $basetabs;
-}
-if (!defined $topactions) {
- $topactions = $basetopactions;
-}
-
- # Now let callbacks add their extra tabs
- $m->comp('/Elements/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/html/Elements/TicketList b/rt/html/Elements/TicketList
deleted file mode 100644
index 81e265d93..000000000
--- a/rt/html/Elements/TicketList
+++ /dev/null
@@ -1,178 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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%">
-
-% if ($ShowHeader) {
-<& /Elements/CollectionAsTable/Header,
- Format => \@Format,
- FormatString => $Format,
- AllowSorting => $AllowSorting,
- Order => $Order,
- Query => $Query,
- Rows => $Rows,
- Page => $Page,
- OrderBy => $OrderBy ,
- BaseURL => $BaseURL,
- maxitems => $maxitems &>
-% }
-
-% my $i;
-% while (my $record = $Collection->Next) {
-% $i++;
-% # Every ten rows, flush the buffer and put something on the page.
-% $m->flush_buffer() unless ($i % 10);
-<& /Elements/CollectionAsTable/Row, Format => \@Format, i => $i, record => $record, maxitems => $maxitems &>
-% }
-
-</table>
-
-% if ($Rows && $ShowNavigation) {
-<hr>
-% my $oddRows;
-% if (($TotalFound % $Rows) == 0) {
-% $oddRows = 0;
-% } else { $oddRows = 1; }
-% my $pages = int($TotalFound/$Rows)+$oddRows;
-% $pages = 1 if $pages < 1;
-<&|/l, $Page, $pages &>Page [_1] of [_2]</&>
-
-<%perl>
-my $prev = $m->comp(
- '/Elements/QueryString',
- Query => $Query,
- Format => $Format,
- Rows => $Rows,
- OrderBy => $OrderBy,
- Order => $Order,
- Page => ( $Page - 1 )
-);
-my $next = $m->comp(
- '/Elements/QueryString',
- Query => $Query,
- Format => $Format,
- Rows => $Rows,
- OrderBy => $OrderBy,
- Order => $Order,
- Page => ( $Page + 1 )
-);
-</%perl>
-% if ($Page > 1) {
-<a href="<%$BaseURL%><%$prev%>"><&|/l&>Previous Page</&></a>
-% }
-% if (($Page * $Rows) < $TotalFound) {
-<a href="<%$BaseURL%><%$next%>"><&|/l&>Next Page</&></a>
-% }
-% }
-<%INIT>
-my $maxitems = 0;
-
-$Format ||= $RT::DefaultSearchResultFormat;
-
-# 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);
-
-
-unless ($Collection) {
- $Collection = RT::Tickets->new($session{'CurrentUser'});
- $Collection->FromSQL($Query);
-}
-
-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 $item = 0;
-foreach my $col (@Format) {
- $item++;
- if ( $col->{title} && ($col->{title} eq 'NEWLINE') ) {
- $item = 0;
- }
- else {
- $maxitems = $item if $item > $maxitems;
- }
-}
-
-if ($OrderBy =~ /\|/) {
- # Multiple Sorts
- my @OrderBy = split /\|/,$OrderBy;
- my @Order = split /\|/,$Order;
- $Collection->OrderByCols(
- map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0
- .. $#OrderBy ) );;
-} else {
- $Collection->OrderBy(FIELD => $OrderBy, ORDER => $Order);
-}
-
-$Collection->RowsPerPage($Rows) if ($Rows);
-$Page = 1 unless $Page > 0; # workaround problems with Page = '' or undef
-$Collection->GotoPage( $Page - 1 ); # SB uses page 0 as the first page
-my $TotalFound = $Collection->CountAll();
-
-</%INIT>
-<%ARGS>
-$Query => undef
-$Rows => 50
-$Page => 1
-$Title => 'Ticket Search'
-$Collection => undef
-$AllowSorting => undef
-$Order => undef
-$OrderBy => undef
-$BaseURL => undef
-$Format => $RT::DefaultSearchResultFormat
-$DisplayFormat => undef
-$ShowNavigation => 1
-$ShowHeader => 1
-</%ARGS>
diff --git a/rt/html/Elements/TitleBox b/rt/html/Elements/TitleBox
deleted file mode 100644
index 659732372..000000000
--- a/rt/html/Elements/TitleBox
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/TitleBoxEnd b/rt/html/Elements/TitleBoxEnd
deleted file mode 100644
index 42626ffb3..000000000
--- a/rt/html/Elements/TitleBoxEnd
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/TitleBoxStart b/rt/html/Elements/TitleBoxStart
deleted file mode 100644
index da04f8b7d..000000000
--- a/rt/html/Elements/TitleBoxStart
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Elements/ValidateCustomFields b/rt/html/Elements/ValidateCustomFields
deleted file mode 100644
index c043d4013..000000000
--- a/rt/html/Elements/ValidateCustomFields
+++ /dev/null
@@ -1,81 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 = 1;
-$CustomFields->GotoFirstItem;
-while (my $CF = $CustomFields->Next) {
- my $pattern = $CF->Pattern;
- 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);
- next if $CF->MatchPattern($value);
- $m->notes(
- ('InvalidField-' . $CF->Id)
- => (loc("Input must match [_1]", $CF->FriendlyPattern))
- );
- $valid = 0;
-}
-$m->notes('ValidFields', $valid);
-return $valid;
-</%INIT>
-<%ARGS>
-$CustomFields
-$ARGSRef
-$NamePrefix => "Object-RT::Ticket--CustomField-"
-</%ARGS>
diff --git a/rt/html/Elements/ViewUser b/rt/html/Elements/ViewUser
deleted file mode 100644
index 657272496..000000000
--- a/rt/html/Elements/ViewUser
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<& /Elements/TitleBoxStart,
- title => "<a class='inverse' href=\"$RT::WebPath/Search/Listing.html?LimitRequestorById=1&IdOfRequestor=".$User->id."\">".loc("Tickets from [_1]", $name)."</a>",
- titleright=> "<a class='inverse' href=\"$RT::WebPath/EditUserComments.html?id=".$User->id."\">".loc("Comments about [_1]", $name)."</a>" &>
-<TABLE WIDTH="100%">
-<tr>
-<td halign=left valign=top>
-%while (my $w=$tickets->Next) {
-<%$w->Id%>: <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$w->id%>"><%$w->Subject%></a> (<%$w->Status%>)<BR>
-%}
-</td>
-<td align=right valign=top>
- <% ($User->Comments || loc("No comment entered about this user")) %>
-</tr>
-</table>
-<& /Elements/TitleBoxEnd &>
-
-<%ARGS>
-$User=>undef
-</%ARGS>
-
-<%INIT>
-my $name=$User->RealName || $User->EmailAddress;
-
-my $tickets = new RT::Tickets($session{'CurrentUser'});
-$tickets->LimitWatcher(TYPE => 'Requestor', VALUE => $User->EmailAddress);
-
-
-</%INIT>
diff --git a/rt/html/Helpers/CalPopup.html b/rt/html/Helpers/CalPopup.html
deleted file mode 100644
index dc5acf73c..000000000
--- a/rt/html/Helpers/CalPopup.html
+++ /dev/null
@@ -1,129 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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);
- <a 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/html/Helpers/EmailAutocomplete b/rt/html/Helpers/EmailAutocomplete
deleted file mode 100644
index c1b275540..000000000
--- a/rt/html/Helpers/EmailAutocomplete
+++ /dev/null
@@ -1,47 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
diff --git a/rt/html/NoAuth/Logout.html b/rt/html/NoAuth/Logout.html
deleted file mode 100644
index 9af4a933b..000000000
--- a/rt/html/NoAuth/Logout.html
+++ /dev/null
@@ -1,74 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<html>
-<head>
-<title>RT: Logout</title>
- <meta HTTP-EQUIV="Refresh" content="0;URL=<%$URL%>">
-</head>
-<body>
-<p><&|/l&>You have been logged out of RT.</&>
-
-<br />
-<br />
-<a href="<%$URL%>"><&|/l&>You're welcome to login again</&></a>.
-
-% $m->abort();
-
-<%INIT>
-$m->comp('/Elements/Callback', _CallbackName => 'BeforeSessionDelete', %ARGS);
-
-if (defined %session) {
- tied(%session)->delete;
-}
-
-$m->comp('/Elements/Callback', _CallbackName => 'AfterSessionDelete', %ARGS);
-</%INIT>
-
-<%ARGS>
-$URL => $RT::WebPath."/"
-</%ARGS>
diff --git a/rt/html/NoAuth/Reminder.html b/rt/html/NoAuth/Reminder.html
deleted file mode 100644
index 18bde44a5..000000000
--- a/rt/html/NoAuth/Reminder.html
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.4-compat/body.css b/rt/html/NoAuth/css/3.4-compat/body.css
deleted file mode 100644
index 81442f6dc..000000000
--- a/rt/html/NoAuth/css/3.4-compat/body.css
+++ /dev/null
@@ -1,75 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.4-compat/forms.css b/rt/html/NoAuth/css/3.4-compat/forms.css
deleted file mode 100644
index 539952b19..000000000
--- a/rt/html/NoAuth/css/3.4-compat/forms.css
+++ /dev/null
@@ -1,104 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 {
- 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;
-}
-
diff --git a/rt/html/NoAuth/css/3.4-compat/header.css b/rt/html/NoAuth/css/3.4-compat/header.css
deleted file mode 100644
index 30ce6f119..000000000
--- a/rt/html/NoAuth/css/3.4-compat/header.css
+++ /dev/null
@@ -1,88 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.4-compat/main.css b/rt/html/NoAuth/css/3.4-compat/main.css
deleted file mode 100644
index b376b3c30..000000000
--- a/rt/html/NoAuth/css/3.4-compat/main.css
+++ /dev/null
@@ -1,69 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-%# 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";
-
-%# ...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";
-
diff --git a/rt/html/NoAuth/css/3.4-compat/misc.css b/rt/html/NoAuth/css/3.4-compat/misc.css
deleted file mode 100644
index c75b4d894..000000000
--- a/rt/html/NoAuth/css/3.4-compat/misc.css
+++ /dev/null
@@ -1,49 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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; }
diff --git a/rt/html/NoAuth/css/3.4-compat/nav.css b/rt/html/NoAuth/css/3.4-compat/nav.css
deleted file mode 100644
index b170c29c8..000000000
--- a/rt/html/NoAuth/css/3.4-compat/nav.css
+++ /dev/null
@@ -1,106 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::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/html/NoAuth/css/3.4-compat/titlebox.css b/rt/html/NoAuth/css/3.4-compat/titlebox.css
deleted file mode 100644
index d48704e26..000000000
--- a/rt/html/NoAuth/css/3.4-compat/titlebox.css
+++ /dev/null
@@ -1,103 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.4-compat/transactions.css b/rt/html/NoAuth/css/3.4-compat/transactions.css
deleted file mode 100644
index 1331bfadd..000000000
--- a/rt/html/NoAuth/css/3.4-compat/transactions.css
+++ /dev/null
@@ -1,83 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.5-default/approvals.css b/rt/html/NoAuth/css/3.5-default/approvals.css
deleted file mode 100644
index 60629cd19..000000000
--- a/rt/html/NoAuth/css/3.5-default/approvals.css
+++ /dev/null
@@ -1,97 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.5-default/body.css b/rt/html/NoAuth/css/3.5-default/body.css
deleted file mode 100755
index dc02d017b..000000000
--- a/rt/html/NoAuth/css/3.5-default/body.css
+++ /dev/null
@@ -1,81 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.5-default/footer.css b/rt/html/NoAuth/css/3.5-default/footer.css
deleted file mode 100644
index fd8c8f3c4..000000000
--- a/rt/html/NoAuth/css/3.5-default/footer.css
+++ /dev/null
@@ -1,91 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::WebImagesURL%>/css/cbr-b2g.gif) no-repeat bottom right;
-}
-
-#footer #bpscredits {
- background: #ccc url(<%$RT::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::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/html/NoAuth/css/3.5-default/header.css b/rt/html/NoAuth/css/3.5-default/header.css
deleted file mode 100644
index 4e0ce6d68..000000000
--- a/rt/html/NoAuth/css/3.5-default/header.css
+++ /dev/null
@@ -1,152 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::WebImagesURL%>/css/cb.gif) no-repeat bottom left; }
-#page-menu div div { background: url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
-#page-menu div div div {
- background: url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right;
- padding: 0.2em 1em 0.4em 1em;
-}
-
-#page-menu.actions-present div div { background: url(<%$RT::WebImagesURL%>/css/cbr-b2lb.gif) no-repeat bottom right; }
-#page-menu.actions-present div div div { background: url(<%$RT::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::WebImagesURL%>/css/cb.gif) no-repeat bottom left; }*/
-#actions-menu div div { background: url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
-#actions-menu div div div {
- background: url(<%$RT::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/html/NoAuth/css/3.5-default/login.css b/rt/html/NoAuth/css/3.5-default/login.css
deleted file mode 100644
index 5aec376cd..000000000
--- a/rt/html/NoAuth/css/3.5-default/login.css
+++ /dev/null
@@ -1,85 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.5-default/misc.css b/rt/html/NoAuth/css/3.5-default/misc.css
deleted file mode 100755
index 038e65def..000000000
--- a/rt/html/NoAuth/css/3.5-default/misc.css
+++ /dev/null
@@ -1,91 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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;
-}
-
-#comp-Search-Build .titlebox-content {
- padding-left: 0.7em;
- padding-right: 0.3em;
-}
-
diff --git a/rt/html/NoAuth/css/3.5-default/nav.css b/rt/html/NoAuth/css/3.5-default/nav.css
deleted file mode 100644
index d63628d31..000000000
--- a/rt/html/NoAuth/css/3.5-default/nav.css
+++ /dev/null
@@ -1,163 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::WebImagesURL%>/css/light-arrow.png) no-repeat bottom center;
-}
-
-/*
-#nav ul { background: #069 url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
-#nav ul div { background: transparent url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
-#nav ul.odd { background: #08c url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
-#nav ul.odd div { background: transparent url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
-*/
-
-
-#nav ul div.wrapper { background: transparent url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
-#nav ul div { background: #069 url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
-#nav ul.odd div.wrapper { background: transparent url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
-#nav ul div.odd { background: #08c url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
-
diff --git a/rt/html/NoAuth/css/3.5-default/quickbar.css b/rt/html/NoAuth/css/3.5-default/quickbar.css
deleted file mode 100644
index 3637695fd..000000000
--- a/rt/html/NoAuth/css/3.5-default/quickbar.css
+++ /dev/null
@@ -1,98 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/3.5-default/titlebox.css b/rt/html/NoAuth/css/3.5-default/titlebox.css
deleted file mode 100644
index 3bd4e97cf..000000000
--- a/rt/html/NoAuth/css/3.5-default/titlebox.css
+++ /dev/null
@@ -1,179 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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.
-
-% for (qw(index
-% Search-Build
-% User-Prefs
-% Approvals
-% Admin-Users-Modify
-% SelfService
-% SelfService-Closed
-% ))
-% {
-#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;
- padding-top: 1em;
- width: 20px;
-
- background: url(<%$RT::WebImagesURL%>/css/rollup-arrow.gif) no-repeat center center;
-
- margin: 0;
- text-indent: -9999px;
-
- position: absolute;
- top: 0.4em;
- left: 0.75em;
- float: left;
-
-%# Basically IE5 will see those crazy backslashes and prematurely end the rule.
-%# This allows values for IE 5's broken box model to be set before the hack and
-%# the real values to be set after. We also set voice-family back to whatever it
-%# would have been on the off chance it's actually used.
- /* WIN IE5 hack */
- height: 7px;
- voice-family: "\"}\"";
- voice-family: inherit;
- height: 0;
- overflow: hidden;
-}
-
-%# IE also doesn't support the child selector ">", so we can use it to set values
-%# that only other browsers will see (in this case, playing nice with Opera, which
-%# also suffers from the backslash hack above.)
-html>body .titlebox .titlebox-title .widget a {
- height: 0;
- overflow: hidden;
-}
-
-%# Compensates for IE's bad box model by hiding this rule from other browsers
-* html .titlebox .titlebox-title .widget a {
- background-position: center 0.3em;
- left: -3.5em;
-}
-
-.titlebox.rolled-up .titlebox-title .widget a {
- background-image: url(<%$RT::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;
-}
diff --git a/rt/html/NoAuth/css/3.5-default/transactions.css b/rt/html/NoAuth/css/3.5-default/transactions.css
deleted file mode 100755
index fdf8ea824..000000000
--- a/rt/html/NoAuth/css/3.5-default/transactions.css
+++ /dev/null
@@ -1,146 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/css/autohandler b/rt/html/NoAuth/css/autohandler
deleted file mode 100644
index a4eda4efc..000000000
--- a/rt/html/NoAuth/css/autohandler
+++ /dev/null
@@ -1,53 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<%init>
-RT::Interface::Web::StaticFileHeaders();
-$r->content_type('text/css');
-$m->call_next();
-return();
-</%init>
diff --git a/rt/html/NoAuth/css/dhandler b/rt/html/NoAuth/css/dhandler
deleted file mode 100644
index 6f1f5e9a7..000000000
--- a/rt/html/NoAuth/css/dhandler
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/NoAuth/images/autohandler b/rt/html/NoAuth/images/autohandler
deleted file mode 100644
index 720979830..000000000
--- a/rt/html/NoAuth/images/autohandler
+++ /dev/null
@@ -1,28 +0,0 @@
-<%INIT>
-&RT::Interface::Web::StaticFileHeaders();
-
-# 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;
-
-
-my $type = "application/octet-stream";
-if ($file =~ /\.(gif|png|jpe?g)$/i) {
- $type = "image/$1";
- $type =~ s/jpg/jpeg/gi;
-}
-
-die "file not found" unless -f $file && -r _;
-
-$r->content_type($type);
-open my $fh, "<$file" or die "couldn't open file: $!";
-binmode($fh);
-{
- local $/ = \16384;
- $m->out($_) while (<$fh>);
- $m->flush_buffer;
-}
-close $fh;
-$m->abort;
-</%INIT>
diff --git a/rt/html/NoAuth/images/back_home.gif b/rt/html/NoAuth/images/back_home.gif
deleted file mode 100644
index 40b19c153..000000000
--- a/rt/html/NoAuth/images/back_home.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/bplogo.gif b/rt/html/NoAuth/images/bplogo.gif
deleted file mode 100644
index 1bb0adfb4..000000000
--- a/rt/html/NoAuth/images/bplogo.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cb-light.gif b/rt/html/NoAuth/images/css/cb-light.gif
deleted file mode 100644
index d5e3059b0..000000000
--- a/rt/html/NoAuth/images/css/cb-light.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cb.gif b/rt/html/NoAuth/images/css/cb.gif
deleted file mode 100644
index 53bb2aec2..000000000
--- a/rt/html/NoAuth/images/css/cb.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cbr-b2g.gif b/rt/html/NoAuth/images/css/cbr-b2g.gif
deleted file mode 100644
index 6bca03d10..000000000
--- a/rt/html/NoAuth/images/css/cbr-b2g.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cbr-b2lb.gif b/rt/html/NoAuth/images/css/cbr-b2lb.gif
deleted file mode 100644
index d207f846b..000000000
--- a/rt/html/NoAuth/images/css/cbr-b2lb.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cbr-gray.gif b/rt/html/NoAuth/images/css/cbr-gray.gif
deleted file mode 100644
index d7327103a..000000000
--- a/rt/html/NoAuth/images/css/cbr-gray.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cbr-trans.gif b/rt/html/NoAuth/images/css/cbr-trans.gif
deleted file mode 100644
index dc272ee5d..000000000
--- a/rt/html/NoAuth/images/css/cbr-trans.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/cbr.gif b/rt/html/NoAuth/images/css/cbr.gif
deleted file mode 100644
index 754cee19b..000000000
--- a/rt/html/NoAuth/images/css/cbr.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ct-light.gif b/rt/html/NoAuth/images/css/ct-light.gif
deleted file mode 100644
index 55125b0fa..000000000
--- a/rt/html/NoAuth/images/css/ct-light.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ct.gif b/rt/html/NoAuth/images/css/ct.gif
deleted file mode 100644
index d16a5c57f..000000000
--- a/rt/html/NoAuth/images/css/ct.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ctr-b2g.gif b/rt/html/NoAuth/images/css/ctr-b2g.gif
deleted file mode 100644
index 540e6d0ef..000000000
--- a/rt/html/NoAuth/images/css/ctr-b2g.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ctr-b2lb.gif b/rt/html/NoAuth/images/css/ctr-b2lb.gif
deleted file mode 100644
index c98b18c9d..000000000
--- a/rt/html/NoAuth/images/css/ctr-b2lb.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ctr-gray.gif b/rt/html/NoAuth/images/css/ctr-gray.gif
deleted file mode 100644
index 8d5e5dd32..000000000
--- a/rt/html/NoAuth/images/css/ctr-gray.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ctr-trans.gif b/rt/html/NoAuth/images/css/ctr-trans.gif
deleted file mode 100644
index bb316cf04..000000000
--- a/rt/html/NoAuth/images/css/ctr-trans.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/ctr.gif b/rt/html/NoAuth/images/css/ctr.gif
deleted file mode 100644
index 9754e1567..000000000
--- a/rt/html/NoAuth/images/css/ctr.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/dark-arrow-up.png b/rt/html/NoAuth/images/css/dark-arrow-up.png
deleted file mode 100644
index 443096aa5..000000000
--- a/rt/html/NoAuth/images/css/dark-arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/dark-arrow.png b/rt/html/NoAuth/images/css/dark-arrow.png
deleted file mode 100644
index a83500aad..000000000
--- a/rt/html/NoAuth/images/css/dark-arrow.png
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/fieldbg-autocomplete.gif b/rt/html/NoAuth/images/css/fieldbg-autocomplete.gif
deleted file mode 100644
index aa7eed061..000000000
--- a/rt/html/NoAuth/images/css/fieldbg-autocomplete.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/light-arrow-up.png b/rt/html/NoAuth/images/css/light-arrow-up.png
deleted file mode 100644
index c209d4335..000000000
--- a/rt/html/NoAuth/images/css/light-arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/light-arrow.png b/rt/html/NoAuth/images/css/light-arrow.png
deleted file mode 100644
index 575d4e5ec..000000000
--- a/rt/html/NoAuth/images/css/light-arrow.png
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/rolldown-arrow.gif b/rt/html/NoAuth/images/css/rolldown-arrow.gif
deleted file mode 100644
index 3c296dcae..000000000
--- a/rt/html/NoAuth/images/css/rolldown-arrow.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/rolldown-arrow.png b/rt/html/NoAuth/images/css/rolldown-arrow.png
deleted file mode 100644
index 33d8ab1e2..000000000
--- a/rt/html/NoAuth/images/css/rolldown-arrow.png
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/css/rollup-arrow.gif b/rt/html/NoAuth/images/css/rollup-arrow.gif
deleted file mode 100644
index f009ff4c6..000000000
--- a/rt/html/NoAuth/images/css/rollup-arrow.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/favicon.png b/rt/html/NoAuth/images/favicon.png
deleted file mode 100644
index ed1ee37ff..000000000
--- a/rt/html/NoAuth/images/favicon.png
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/head_requestracker.gif b/rt/html/NoAuth/images/head_requestracker.gif
deleted file mode 100644
index 73315e918..000000000
--- a/rt/html/NoAuth/images/head_requestracker.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/rt.jpg b/rt/html/NoAuth/images/rt.jpg
deleted file mode 100644
index a137a932b..000000000
--- a/rt/html/NoAuth/images/rt.jpg
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/space.gif b/rt/html/NoAuth/images/space.gif
deleted file mode 100644
index 1d11fa9ad..000000000
--- a/rt/html/NoAuth/images/space.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/spacer.gif b/rt/html/NoAuth/images/spacer.gif
deleted file mode 100644
index 5bfd67a2d..000000000
--- a/rt/html/NoAuth/images/spacer.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/images/squares_blue.gif b/rt/html/NoAuth/images/squares_blue.gif
deleted file mode 100644
index a28da5ce1..000000000
--- a/rt/html/NoAuth/images/squares_blue.gif
+++ /dev/null
Binary files differ
diff --git a/rt/html/NoAuth/js/ahah.js b/rt/html/NoAuth/js/ahah.js
deleted file mode 100644
index e54a2c60f..000000000
--- a/rt/html/NoAuth/js/ahah.js
+++ /dev/null
@@ -1,80 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-/*
-% $r->content_type('application/x-javascript');
-*/
-// Fetched from http://www.opendarwin.org/~drernie/src/ahah.js
-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");
- }
- if (req != undefined) {
- req.onreadystatechange = function() {ahahDone(url, target, delay);};
- req.open("GET", 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/html/NoAuth/js/autohandler b/rt/html/NoAuth/js/autohandler
deleted file mode 100644
index 8fab38d8f..000000000
--- a/rt/html/NoAuth/js/autohandler
+++ /dev/null
@@ -1,53 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<%init>
-&RT::Interface::Web::StaticFileHeaders();
-$r->content_type('application/x-javascript');
-$m->call_next();
-return();
-</%init>
diff --git a/rt/html/NoAuth/js/cascaded.js b/rt/html/NoAuth/js/cascaded.js
deleted file mode 100644
index 34b99b50d..000000000
--- a/rt/html/NoAuth/js/cascaded.js
+++ /dev/null
@@ -1,66 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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);
- if (!select) { return };
- var i;
- var children = select.childNodes;
- for (i in children) {
- var style = children[i].style;
- if (!style) { continue };
- if (val == '') {
- style.display = 'block';
- continue;
- }
- if (children[i].label.substr(0, val.length) == val) {
- style.display = 'block';
- continue;
- }
- style.display = 'none';
- }
-}
diff --git a/rt/html/NoAuth/js/class.js b/rt/html/NoAuth/js/class.js
deleted file mode 100644
index ee8e30c5c..000000000
--- a/rt/html/NoAuth/js/class.js
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-/* 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/html/NoAuth/js/combobox.js b/rt/html/NoAuth/js/combobox.js
deleted file mode 100644
index 443dd9dd7..000000000
--- a/rt/html/NoAuth/js/combobox.js
+++ /dev/null
@@ -1,265 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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.innerHTML = "\u25BC";
- 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); };
- text.style.width = ( list.offsetWidth ) + "px";
-
- 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.width = ( this.Container.offsetWidth ) + "px";
- this.style.top = ( this.Container.offsetHeight + ComboBox_RecursiveOffsetTop(this.Container,true) ) + "px";
- this.style.left = ( 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/html/NoAuth/js/list.js b/rt/html/NoAuth/js/list.js
deleted file mode 100644
index 85a2ec2f8..000000000
--- a/rt/html/NoAuth/js/list.js
+++ /dev/null
@@ -1,159 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-/* 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/html/NoAuth/js/scriptaculous/controls.js b/rt/html/NoAuth/js/scriptaculous/controls.js
deleted file mode 100644
index e69de29bb..000000000
--- a/rt/html/NoAuth/js/scriptaculous/controls.js
+++ /dev/null
diff --git a/rt/html/NoAuth/js/scriptaculous/effects.js b/rt/html/NoAuth/js/scriptaculous/effects.js
deleted file mode 100644
index e69de29bb..000000000
--- a/rt/html/NoAuth/js/scriptaculous/effects.js
+++ /dev/null
diff --git a/rt/html/NoAuth/js/scriptaculous/prototype.js b/rt/html/NoAuth/js/scriptaculous/prototype.js
deleted file mode 100644
index e69de29bb..000000000
--- a/rt/html/NoAuth/js/scriptaculous/prototype.js
+++ /dev/null
diff --git a/rt/html/NoAuth/js/scriptaculous/scriptaculous.js b/rt/html/NoAuth/js/scriptaculous/scriptaculous.js
deleted file mode 100644
index e69de29bb..000000000
--- a/rt/html/NoAuth/js/scriptaculous/scriptaculous.js
+++ /dev/null
diff --git a/rt/html/NoAuth/js/titlebox-state.js b/rt/html/NoAuth/js/titlebox-state.js
deleted file mode 100644
index 024cfd5e1..000000000
--- a/rt/html/NoAuth/js/titlebox-state.js
+++ /dev/null
@@ -1,83 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath%>" ? "<%$RT::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/html/NoAuth/js/util.js b/rt/html/NoAuth/js/util.js
deleted file mode 100644
index eac77e15f..000000000
--- a/rt/html/NoAuth/js/util.js
+++ /dev/null
@@ -1,250 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 */
-
-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;
-
-/* calendar functions */
-
-function openCalWindow(field) {
- var objWindow = window.open('<%$RT::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', '#');
-
- clickevent = function clickevent(e) { openCalWindow(input); return false; };
- if (! addEvent(link, "click", clickevent)) {
- return false;
- }
-
- var text = document.createTextNode('<% loc("Choose a date") %>');
- 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 addEvent(obj, sType, fn) {
- if (obj.addEventListener) {
- obj.addEventListener(sType, fn, false);
- } else if (obj.attachEvent) {
- var r = obj.attachEvent("on"+sType, fn);
- } else {
- return false;
- }
- return true;
-}
-
-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;
- }
-}
-
diff --git a/rt/html/NoAuth/printrt.css b/rt/html/NoAuth/printrt.css
deleted file mode 100644
index 72e7e8b7e..000000000
--- a/rt/html/NoAuth/printrt.css
+++ /dev/null
@@ -1,77 +0,0 @@
-%# {{{ BEGIN BPS TAGGED BLOCK
-%#
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You 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
-%#
-%# Special stylesheet for printing tickets
-%# Koos van den Hout koos@cs.uu.nl 2005-11-21
-%#
-
-SPAN.nav { display: none !important; }
-.nav2 { display: none !important; }
-.nav { display: none !important; }
-.topnav { display: none !important; }
-.blue { display: none !important; }
-.darkblue { display: none !important; }
-.blueright { display: none !important; }
-.currentnav { display: none !important; }
-th.titlebox { border-top: none; border-bottom: none; }
-th.titleboxright { display:none !important; border-top: none; border-bottom: none; }
-.titlebox { border-top: none; border-bottom: none; }
-
-div.downloadattachment, div.downloadcontenttype {
- display: none !important;
-}
-
-
-a[href$="Respond"], a[href$="Comment"], a[href*="ShowEmailRecord"] {
- display: none !important;
-}
-
-
-%# Provide a callback for adding/modifying the style sheet.
-%# http://www.w3.org/TR/REC-CSS1 - section 3.2, says:
-%# "latter specified rule wins"
-<& /Elements/Callback &>
-<%flags>
-inherit => undef
-</%flags>
-<%init>
-$r->content_type('text/css');
-$r->headers_out->{'Expires'} = '+30m';
-</%init>
diff --git a/rt/html/NoAuth/webrt.css b/rt/html/NoAuth/webrt.css
deleted file mode 100644
index 7fa2f83f8..000000000
--- a/rt/html/NoAuth/webrt.css
+++ /dev/null
@@ -1,628 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You 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 }}}
-SPAN.nav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-.nav2 { font-size: 10px;
- white-space: nowrap}
-.nav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-.currentnav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 13px;
- font-weight: bold;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-.topnav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 16px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-
-%# .topnav is the original RT class for the sidebar navigation tabs.
-%# Font-sizing by level depth was originally hard-coded into Elements/Menu.
-%# This modification sets a different class name for each level, allowing
-%# style sheet control over the formats.
-
-a.topnav-0 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 16px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-a.topnav-1 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 14px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-a.topnav-2 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-a.topnav-3 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-a.topnav-4 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-a.topnav-5 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-li.topnav-0-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.topnav-1-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.topnav-2-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.topnav-3-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.topnav-4-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.topnav-5-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.topnav-0-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.topnav-1-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.topnav-2-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.topnav-3-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.topnav-4-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.topnav-5-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-
-.currenttopnav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 16px;
- font-weight: bold;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-
-%# .currenttopnav is the original RT class for the sidebar navigation tabs.
-%# Font-sizing by level depth was originally hard-coded into Elements/Menu.
-%# This modification sets a different class name for each level, allowing
-%# style sheet control over the formats
-
-a.currenttopnav-0 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 16px;
- font-weight: bold;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-a.currenttopnav-1 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 14px;
- font-weight: bold;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-a.currenttopnav-2 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- font-weight: normal;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-a.currenttopnav-3 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-a.currenttopnav-4 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-a.currenttopnav-5 { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-li.currenttopnav-0-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.currenttopnav-1-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.currenttopnav-2-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.currenttopnav-3-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.currenttopnav-4-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.currenttopnav-5-minor {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-li.currenttopnav-0-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.currenttopnav-1-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.currenttopnav-2-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.currenttopnav-3-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.currenttopnav-4-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-li.currenttopnav-5-major {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-
-.topactions { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-.subnav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: normal;
- color: #FFFFFF;
- text-decoration: none;
- white-space: nowrap}
-.currentsubnav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: bold;
- color: #FFFF66;
- text-decoration: none;
- white-space: nowrap}
-.error { background-color: #ff0000;
- background-position: left top;
- vertical-align: top;
- text-align: left;
- }
-.oldblue { background-color: #0066CC;
- background-position: left top;
- vertical-align: top;
- text-align: left;
- }
-.blue { background-color: #4682B4;
- background-position: left top;
- vertical-align: top;
- text-align: left;
- }
-%# Actually the "topactions" section
-.blueright { background-color: #4682B4;
- background-position: left top;
- vertical-align: top;
- text-align: right;
- padding-right: 1em;
- }
-.olddarkblue { background-color: #003399;
- background-position: left top;
- vertical-align: top;
- text-align: left;
- }
-.darkblue { background-color: #000080;
- background-position: left top;
- vertical-align: top;
- text-align: left;
- }
-.darkblueright { background-color: #000080;
- background-position: left top;
- vertical-align: top;
- text-align: right;
- }
-.overdue {
- color: red;
-}
-
-div.messagebody {
- padding: 2em;
-
-}
-
-
-div.downloadattachment {
- font-size: 10px;
- text-align: right;
-
-}
-
-
-td { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- background-position: left top;
- }
-.black { background-color: #000000;
- background-position: left top;
- }
-span.rtname { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 18px;
- font-weight: normal;
- color: #ffffff}
-span.title { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 20px;
- font-weight: bold;
- color: #ffffff}
-.header { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- font-weight: bold;
- color: #0066CC}
-.subheader { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- font-weight: bold;
- color: #0066CC }
-.value { font-weight: bold; }
-.entry { font-weight: normal; }
-.label { font-weight: normal;
- text-align: right; }
-.labeltop { font-weight: normal;
- text-align: right;
- vertical-align: top }
-.productnav { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- color: #000000;
- text-align: center;
- vertical-align: middle;
- text-decoration: none}
-.rtblue { background-color: #3399FF;
- margin-top: 0.2em;
- background-position: left top;
- vertical-align: top }
-
-
-.currenttab { margin: 0.2em; background: #336699; }
-.othertab { margin: 0.2em; background: #efefef; }
-.oddline { background-color : #ccccee; }
-
-UL.topnav LI :focus { text-decoration: underline; }
-
-TD.mainbody {
- padding-top: 0.5em;
- padding-left: 1em;
- padding-right: 1em;
- margin-left: 1em;
- margin-right: 1em;
-}
-
-td.boxcontainer + td.boxcontainer {
- margin-left: 1em;
- padding-left: 1em;
- border-collapse: collapse;
-}
-
-th.ticketheader { font-size: 80%;
- font-weight: bold;
- color: #336699;
- background: #cccccc;
-}
-
-th.titlebox {
- text-align: left;
- padding-left: 0.5em;
- padding-right: 0.5em;
- margin-left: 0.5em;
- margin-right: 0.5em;
- border-top: solid black 1px;
- border-bottom: solid black 1px;
-}
-th.titleboxright {
- text-align: right;
- padding-left: 0.5em;
- padding-right: 0.5em;
- margin-left: 0.5em;
- margin-right: 0.5em;
- border-top: solid black 1px;
- border-bottom: solid black 1px;
-}
-
-TD.titlebox {
- padding-left: 1em;
- padding-right: 1em;
- padding-top: 1em;
- padding-bottom: 1em;
-}
-
-SPAN.message {
- font-size: 100%;
- font-family: Verdana, Arial, Helvetica, sans-serif;
-}
-
-
-BODY {
- color: #000;
- background: #FFFFFF;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-left: 0px;
- margin-right: 0px;
- border-top: 0px;
- border-bottom: 0px;
- border-left: 0px;
- border-right: 0px;
-}
-
-
-TR.oddline {
- background-color : #ffffff;
-}
-
-TR.evenline {
- background-color : #ccccee;
-}
-
-H1, H2, H3 {
- margin-top: 0.2em;
- color: #336699;
- font-family: Verdana, Arial, Helvetica, sans-serif;
-
- clear: both;
-}
-
-
-DIV.endmatter { margin-left: -7% }
-.bpscredits {margin-top: 1em;
- text-align: right;
- color: #666666;
- }
-
-
-A { font-weight: bold; color: #000000;
- }
-
-.currenttab { color: #ffffff;}
-.othertab { color: #336699; }
-
-.inverse { color: #ffffff; }
-
-
-
-A:link IMG, A:visited IMG { border-style: none }
-a:focus {text-decoration: underline }
-A IMG { color: white } /* The only way to hide the border in NS 4.x */
-
-a:link { text-decoration: none}
-a:visited { text-decoration: none}
-a:hover { text-decoration: underline}
-/* a:focus { background-color: #ccccee } */
-
-.hide {
- display: none;
- color: white;
-}
-
-SPAN.date { font-size: 0.8em }
-
-span.title { font-size: 1.6em;
- vertical-align: middle;
- color: #ffffff;}
-span.productname { font-size: 2em;
- color: #0066cc;}
-SPAN.titleboxtitle, SPAN.titleboxclose {
- font-size: 80%;
- color: #ffffff;
- vertical-align: middle;
- text-align: left;
- }
-SPAN.titleboxtitle a {
- color: #ffffff;
-}
-SPAN.titleboxtitle a:after {
- content: "...";
-}
-
-SPAN.titleboxright {
- font-size: 0.8em;
- color: #ffffff;
- vertical-align: middle;
- text-align: right;
- }
-
-SPAN.attribution {
- font-weight: bold;
-}
-
-SPAN.label { font-size: 0.8em;
-}
-
-DIV.page-stats { font-size: 0.8em;
- color: #cccccc;
- text-align: right;
- }
-
-
-BLOCKQUOTE {
- font-style: italic;
-}
-
-.emphasized {
- font-weight: bold
-}
-
-
-.oddline {
- background-color : #ccccee;
-}
-
-ul.topnav {
- list-style: none;
- margin-left: 0;
- margin-right: 0.25em;
- padding-left: 0.25em;
- padding-bottom: 0;
- padding-top:0;
- margin-top: 0;
- margin-bottom:0;
-}
-
-.menu-major-separator {
- border-bottom: solid white 1px;
- padding-top: .25em;
- padding-bottom: .5em;
-}
-
-.menu-minor-separator {
- border-top: solid #999999 1px;
- padding-top: .1em;
- margin-top: .5em;
-}
-
-TH.collection-as-table { text-align: center;
- font-size: 0.8em;
- padding-left: .5em;
- padding-right: .5em;
- color: #333333;
- background-color: #cccccc;
- white-space: nowrap;
- }
-
-TD.collection-as-table { text-align: left;
- padding-left: .5em;
- padding-right: .5em;
- }
-
-textarea.signature {
- width: 100%;
-}
-textarea.comments {
- width: 100%;
-}
-
-textarea.messagebox {
- width: 100%;
-}
-
-%# Provide a callback for adding/modifying the style sheet.
-%# http://www.w3.org/TR/REC-CSS1 - section 3.2, says:
-%# "latter specified rule wins"
-<& /Elements/Callback &>
-<%flags>
-inherit => undef
-</%flags>
-<%init>
-$r->content_type('text/css');
-#$r->headers_out->{'Expires'} = '+30m';
-</%init>
diff --git a/rt/html/Prefs/Elements/Tabs b/rt/html/Prefs/Elements/Tabs
deleted file mode 100644
index 8765e74e3..000000000
--- a/rt/html/Prefs/Elements/Tabs
+++ /dev/null
@@ -1,72 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/MyRT.html',
- current_subtab => $current_subtab,
- Title => $Title &>
-
-<%INIT>
-my $tabs;
-unless ($Searches) {
- $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/html/Prefs/MyRT.html b/rt/html/Prefs/MyRT.html
deleted file mode 100644
index e69a0cf40..000000000
--- a/rt/html/Prefs/MyRT.html
+++ /dev/null
@@ -1,151 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-&>
-
-<& /Widgets/SelectionBox:header, nojs => 1 &>
-
-<& /Elements/ListActions, actions => \@actions &>
-<br />
-
-<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 &></&>
-<br />
-% }
-<&|/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" value="<%loc('Save')%>" />
-</form>
-</&>
-<%INIT>
-my @actions;
-
-my $title = loc("Customize").' '.loc("RT at a glance");
-my $user = $session{'CurrentUser'}->UserObj;
-
-if ($ARGS{Reset}) {
- $user->SetPreferences('HomepageSettings', {});
- 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);
-}
-if ($ARGS{SummaryRows}) {
- $user->SetPreferences('SummaryRows', $ARGS{SummaryRows});
- push @actions, loc ('Preferences saved for [_1].', loc('summary rows'));
-}
-else {
- $ARGS{SummaryRows} = $user->Preferences('SummaryRows', $RT::DefaultSummaryRows);
-}
-
-
-my $portlets = $session{'my_rt_portlets'};
-
-my %allowed_components = map {$_ => 1} @{$RT::HomepageComponents};
-my @items;
-
-push @items, map {["component-$_", $_]} sort keys %allowed_components;
-
-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 ) = @_;
- $user->SetPreferences( 'HomepageSettings', $conf );
- push @actions, loc( 'Preferences saved for [_1].', $pane );
- delete $session{'my_rt_portlets'};
- }
-);
-
-$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1 )
- for @panes;
-
-</%INIT>
diff --git a/rt/html/Prefs/Quicksearch.html b/rt/html/Prefs/Quicksearch.html
deleted file mode 100644
index 8372c0329..000000000
--- a/rt/html/Prefs/Quicksearch.html
+++ /dev/null
@@ -1,96 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-% }
-/><%$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};
- }
- }
-
- $user->SetPreferences('QuickSearch', $unwanted);
- push @actions, loc ('Preferences saved.');
- # Let QueueSummary rebuild the cache
- delete $session{'quick_search_queues'};
-}
-
-</%INIT>
diff --git a/rt/html/Prefs/Search.html b/rt/html/Prefs/Search.html
deleted file mode 100644
index 673a074d5..000000000
--- a/rt/html/Prefs/Search.html
+++ /dev/null
@@ -1,108 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath.'/Search/Build.html?'.
- $m->comp('/Elements/QueryString',
- LoadSavedSearch => '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"), Label => loc('Save'), Name => 'Save'&>
-
-</form>
-
-<%INIT>
-my @actions;
-my $title = loc("Customize").' ';
-
-my @fields = qw(Format Order OrderBy RowsPerPage);
-my ($class, $id) = ( $ARGS{name} =~ m/^(.*)-(\d+)$/ );
-
-Abort('No search specified')
- unless $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);
-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 $pref = $user->SetPreferences ($search, $hash);
- push @actions, loc ('Preferences saved.');
-}
-
-</%INIT>
diff --git a/rt/html/Prefs/SearchOptions.html b/rt/html/Prefs/SearchOptions.html
deleted file mode 100644
index 655d6ec39..000000000
--- a/rt/html/Prefs/SearchOptions.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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")
-&>
-
-<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>
-
-# {{{ 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;
-
-if ($ARGS{'SavePreferences'}) {
- $session{'CurrentUser'}->UserObj->SetPreferences("SearchDisplay",
- {
- Format => $Format,
- Order => $Order,
- OrderBy => $OrderBy,
- RowsPerPage => $RowsPerPage,
- });
-}
-
-# }}}
-
-
-
-
-
-
-
-# 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/html/REST/1.0/Forms/queue/default b/rt/html/REST/1.0/Forms/queue/default
deleted file mode 100644
index ca9cf69ec..000000000
--- a/rt/html/REST/1.0/Forms/queue/default
+++ /dev/null
@@ -1,170 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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'
-$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 (%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 %data == 0;
- }
-}
-
-if (%data == 0) {
- my @data;
-
- push @data, [ id => "queue/".$queue->Id ];
- foreach my $key (@fields) {
- push @data, [ $key => $queue->$key ];
- }
-
- 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/html/REST/1.0/Forms/queue/ns b/rt/html/REST/1.0/Forms/queue/ns
deleted file mode 100644
index 0cb594b73..000000000
--- a/rt/html/REST/1.0/Forms/queue/ns
+++ /dev/null
@@ -1,62 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/Forms/ticket/attachments b/rt/html/REST/1.0/Forms/ticket/attachments
deleted file mode 100644
index f1d209dae..000000000
--- a/rt/html/REST/1.0/Forms/ticket/attachments
+++ /dev/null
@@ -1,135 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 ($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." (".$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/html/REST/1.0/Forms/ticket/comment b/rt/html/REST/1.0/Forms/ticket/comment
deleted file mode 100755
index dd033d11c..000000000
--- a/rt/html/REST/1.0/Forms/ticket/comment
+++ /dev/null
@@ -1,152 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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();
-
- 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/html/REST/1.0/Forms/ticket/default b/rt/html/REST/1.0/Forms/ticket/default
deleted file mode 100644
index 918f36062..000000000
--- a/rt/html/REST/1.0/Forms/ticket/default
+++ /dev/null
@@ -1,345 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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;
-
-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) {
- if (exists $create{lc $k}) {
- $v{$create{lc $k}} = delete $data{$k};
- }
- # Set custom field
- elsif ($k =~ /^CF-/i) {
- my $cf = RT::CustomField->new( $RT::SystemUser );
- my $cfk = $k;
- $cfk =~ s/^CF-//i;
- 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->QueueObj->TicketCustomFields();
- while (my $cf = $CustomFields->Next()) {
- next unless (!%$fields || (exists $fields->{"cf-".lc $cf->Name}));
- my $vals = $ticket->CustomFieldValues($cf->Id());
- my @out = ();
- while (my $v = $vals->Next()) {
- push @out, $v->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};
- $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);
- ($n, $s) = $ticket->$set($val);
- }
- 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-/i) {
- my $cf = RT::CustomField->new( $RT::SystemUser );
- $key =~ s/^CF-//i;
- if (not $cf->LoadByName( Name => $key )) {
- $n = 0;
- $s = "Unknown custom field.";
- }
- else {
- ($n, $s) = $ticket->AddCustomFieldValue(
- Field => $cf, Value => $val );
- $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) {
- my %o = keys %$changes;
- delete $o{id};
- @$o = ("id", keys %o);
- $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/html/REST/1.0/Forms/ticket/history b/rt/html/REST/1.0/Forms/ticket/history
deleted file mode 100644
index b5ae1875b..000000000
--- a/rt/html/REST/1.0/Forms/ticket/history
+++ /dev/null
@@ -1,200 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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();
-
-chomp $args;
-my @arglist = split('/', $args);
-my ($type, $tid);
-
-if ($arglist[0] eq 'type') {
- $type = $arglist[1];
-} elsif ($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/html/REST/1.0/Forms/ticket/links b/rt/html/REST/1.0/Forms/ticket/links
deleted file mode 100644
index 12e1b1fac..000000000
--- a/rt/html/REST/1.0/Forms/ticket/links
+++ /dev/null
@@ -1,172 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && $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/html/REST/1.0/Forms/ticket/merge b/rt/html/REST/1.0/Forms/ticket/merge
deleted file mode 100755
index 3921da72c..000000000
--- a/rt/html/REST/1.0/Forms/ticket/merge
+++ /dev/null
@@ -1,96 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/Forms/ticket/take b/rt/html/REST/1.0/Forms/ticket/take
deleted file mode 100755
index f8d1457e5..000000000
--- a/rt/html/REST/1.0/Forms/ticket/take
+++ /dev/null
@@ -1,135 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/Forms/transaction/default b/rt/html/REST/1.0/Forms/transaction/default
deleted file mode 100644
index 053f65e37..000000000
--- a/rt/html/REST/1.0/Forms/transaction/default
+++ /dev/null
@@ -1,143 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/Forms/user/default b/rt/html/REST/1.0/Forms/user/default
deleted file mode 100644
index dd383f9cf..000000000
--- a/rt/html/REST/1.0/Forms/user/default
+++ /dev/null
@@ -1,188 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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);
-my %fields = map { lc $_ => $_ } @fields;
-
-if ($id ne 'new') {
- $user->Load($id);
- if (!$user->Id) {
- return [ "# User $id does not exist.", [], {}, 1 ];
- }
-}
-else {
- if (%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 %data == 0;
- }
-}
-
-if (%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 ($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/html/REST/1.0/Forms/user/ns b/rt/html/REST/1.0/Forms/user/ns
deleted file mode 100644
index 4bbcbd74a..000000000
--- a/rt/html/REST/1.0/Forms/user/ns
+++ /dev/null
@@ -1,65 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/NoAuth/mail-gateway b/rt/html/REST/1.0/NoAuth/mail-gateway
deleted file mode 100644
index 25dc5daa4..000000000
--- a/rt/html/REST/1.0/NoAuth/mail-gateway
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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->comp('/Elements/Callback', _CallbackName => 'Pre', %ARGS);
-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->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/html/REST/1.0/autohandler b/rt/html/REST/1.0/autohandler
deleted file mode 100644
index 1b4b070b4..000000000
--- a/rt/html/REST/1.0/autohandler
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/dhandler b/rt/html/REST/1.0/dhandler
deleted file mode 100644
index bb6b2627d..000000000
--- a/rt/html/REST/1.0/dhandler
+++ /dev/null
@@ -1,316 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 = '[a-zA-Z](?:[a-zA-Z0-9_-]|\s+)*';
-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))
- {
- foreach my $oid (expand_list($oids)) {
- if ($extra =~ m{^(?:/($name)(?:/(.*))?)?$}o) {
- my ($attr, $args) = ($1, $2);
- # expand transaction and attachment range specifications
- # (if applicable)
- my $tids;
- if ($attr eq 'history' && $args =~ m#id/(\d.*)#o) {
- $tids = $1;
- }
- 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 = exists $k->{type} ? $k->{type} : $utype;
- $type =~ s|^(?:$utype)?|$utype/| if $utype;
- $type =~ s|/$||;
-
- 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} = ();
- }
-}
-
-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/html/REST/1.0/logout b/rt/html/REST/1.0/logout
deleted file mode 100644
index bb5359e6a..000000000
--- a/rt/html/REST/1.0/logout
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/search/dhandler b/rt/html/REST/1.0/search/dhandler
deleted file mode 100644
index 1a43bf864..000000000
--- a/rt/html/REST/1.0/search/dhandler
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/search/ticket b/rt/html/REST/1.0/search/ticket
deleted file mode 100644
index bd3d63fe7..000000000
--- a/rt/html/REST/1.0/search/ticket
+++ /dev/null
@@ -1,158 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-my $output = "";
-my $status = "200 Ok";
-my $tickets = new RT::Tickets $session{CurrentUser};
-
-# Parse and validate any field specifications.
-my $field = '[a-zA-Z](?:[a-zA-Z0-9_-]|\s+)*';
-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/html/REST/1.0/ticket/comment b/rt/html/REST/1.0/ticket/comment
deleted file mode 100644
index 72a9b83f0..000000000
--- a/rt/html/REST/1.0/ticket/comment
+++ /dev/null
@@ -1,177 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/ticket/link b/rt/html/REST/1.0/ticket/link
deleted file mode 100644
index 7b0654632..000000000
--- a/rt/html/REST/1.0/ticket/link
+++ /dev/null
@@ -1,123 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/REST/1.0/ticket/merge b/rt/html/REST/1.0/ticket/merge
deleted file mode 100644
index 18d671b6e..000000000
--- a/rt/html/REST/1.0/ticket/merge
+++ /dev/null
@@ -1,102 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Reports/Activity/ActivityDetail.html b/rt/html/Reports/Activity/ActivityDetail.html
new file mode 100644
index 000000000..ef0d830f7
--- /dev/null
+++ b/rt/html/Reports/Activity/ActivityDetail.html
@@ -0,0 +1,83 @@
+<&|Elements/Wrapper, %ARGS, title => loc("Activity detail"),
+ path => "Reports/Activity/ActivityDetail.html",
+ &>
+
+<& Elements/MiniPlot, data => \%counts &>
+
+<table style="width: 100%">
+<tr class="titlerow">
+<th>Queue</th><th>Activity</th><th>Date</th><th>Time</th><th>Ticket #</th><th>User</th><th>Short description</th>
+</tr>
+% for my $item (@items) {
+<tr>
+<td><% $item->{queue} %></td>
+<td><% $item->{status} %></td>
+<td><% $item->{date} %></td>
+<td><% $item->{time} %></td>
+<td><% $item->{id} %></td>
+<td><% $item->{actor} %></td>
+<td><% $item->{notes} %></td>
+</tr>
+% }
+</table>
+
+</&>
+<%args>
+$query => 'id > 0'
+$start => "2005/01/01"
+$end => "2006/01/01"
+</%args>
+<%init>
+
+
+my $summary_tickets = RT::Tickets->new($session{'CurrentUser'});
+$summary_tickets->FromSQL($query . " AND ( Updated >= '$start' AND Updated <= '$end')");
+my %counts;
+while (my $ticket = $summary_tickets->Next) {
+ my $txns = $ticket->Transactions;
+ $txns->Limit(FIELD => 'Created', OPERATOR => '>=', VALUE => $start);
+ $txns->Limit(FIELD => 'Created', OPERATOR => '<=', VALUE => $end);
+ # I think they really don't just want status changes
+ $txns->Limit(FIELD => 'Type', VALUE => 'Status', ENTRYAGGREGATOR => 'OR');
+ $txns->Limit(FIELD => 'Type', VALUE => 'Create');
+
+ while (my $txn = $txns->Next){
+ my $date = substr($txn->Created, 0, 10);
+ # we don't have data on the status of a new ticket, default to 'new'
+ $counts{$date}{$txn->NewValue || 'new'}++;
+ }
+}
+
+
+my $tickets = RT::Tickets->new($session{'CurrentUser'});
+$tickets->FromSQL($query);
+my @items;
+while (my $ticket = $tickets->Next) {
+ my $txns = $ticket->Transactions;
+ $txns->Limit(FIELD => 'Created', OPERATOR => '>=', VALUE => $start);
+ $txns->Limit(FIELD => 'Created', OPERATOR => '<=', VALUE => $end);
+ # I think they really don't just want status changes
+ $txns->Limit(FIELD => 'Type', VALUE => 'Status', ENTRYAGGREGATOR => 'OR');
+ $txns->Limit(FIELD => 'Type', VALUE => 'Create');
+
+ while (my $txn = $txns->Next) {
+ push @items, { queue => $txn->TicketObj->QueueObj->Name,
+ id => $txn->TicketObj->id,
+ date => (split ' ', $txn->CreatedObj->ISO)[0],
+ time => (split ' ', $txn->CreatedObj->ISO)[1],
+ status => $txn->NewValue || 'new',
+ actor => $txn->CreatorObj->Name,
+ notes => ($txn->Content ne 'This transaction appears to have no content' ? substr($txn->Content, 0, 60) : $txn->BriefDescription)
+ };
+ }
+}
+
+@items = sort {
+ $a->{queue} cmp $b->{'queue'}
+ || $a->{'status'} cmp $b->{'status'}
+ || $a->{'id'} <=> $b->{'id'}
+ || $a->{'actor'} cmp $b->{'actor'}
+ || $a->{'notes'} <=> $b->{'notes'}
+} @items;
+
+</%init>
diff --git a/rt/html/Reports/Activity/ActivitySummary.html b/rt/html/Reports/Activity/ActivitySummary.html
new file mode 100644
index 000000000..7bb756fbc
--- /dev/null
+++ b/rt/html/Reports/Activity/ActivitySummary.html
@@ -0,0 +1,61 @@
+<&|Elements/Wrapper, %ARGS, title => loc("Activity summary"),
+ path => "Reports/Activity/ActivitySummary.html",
+ &>
+
+<& Elements/MiniPlot, data => \%queues &>
+
+<table style="width: 100%">
+<tr class="titlerow">
+<th>Queue</th>
+% for my $status (sort keys %status) {
+<th><% $status %></th>
+% }
+<th>Total</th>
+</tr>
+% for my $queue (sort keys %queues) {
+<th class="label"><% $queue %></th>
+% for my $status (sort keys %status) {
+<td><% $queues{$queue}{$status} || 0 %>
+% }
+<td><% $total{$queue} %></td>
+</tr>
+% }
+<tr class="grandtotal">
+<th class="label" >Grand Total</th>
+% for my $status (sort keys %status) {
+<td><% $status{$status} %></td>
+% }
+<td><% $total %></td>
+</table>
+</&>
+<%args>
+$query => 'id > 0'
+$start => "2005/01/01"
+$end => "2006/01/01"
+</%args>
+<%init>
+
+my $tickets = RT::Tickets->new($session{'CurrentUser'});
+$tickets->FromSQL($query . " AND ( Updated >= '$start' AND Updated <= '$end')");
+
+my %queues;
+my %status;
+my %total;
+my $total;
+while (my $ticket = $tickets->Next) {
+ my $txns = $ticket->Transactions;
+ $txns->Limit(FIELD => 'Created', OPERATOR => '>=', VALUE => $start);
+ $txns->Limit(FIELD => 'Created', OPERATOR => '<=', VALUE => $end);
+ $txns->Limit(FIELD => 'Type', VALUE => 'Status', ENTRYAGGREGATOR => 'OR');
+ $txns->Limit(FIELD => 'Type', VALUE => 'Create');
+
+ while (my $txn = $txns->Next) {
+ $queues{$txn->TicketObj->QueueObj->Name}{$txn->NewValue || 'new'}++;
+ $status{$txn->NewValue || 'new'}++;
+ $total{$txn->TicketObj->QueueObj->Name}++;
+ $total++;
+ }
+}
+
+
+</%init>
diff --git a/rt/html/Reports/Activity/Elements/LimitReport b/rt/html/Reports/Activity/Elements/LimitReport
new file mode 100644
index 000000000..7c4aac73b
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/LimitReport
@@ -0,0 +1,23 @@
+<form action="index.html" method="POST" enctype="multipart/form-data">
+Query:
+<textarea name="query" rows="5" cols="80"><% $query %></textarea><br />
+
+Report type: <select name="type">
+<option value="ActivityDetail" <% $ARGS{path} =~ /ActivityDetail/ ? 'selected' : '' %>>Activity detail</option>
+<option value="ActivitySummary" <% $ARGS{path} =~ /ActivitySummary/ ? 'selected' : '' %>>Activity summary</option>
+<option value="ResolutionComments" <% $ARGS{path} =~ /ResolutionComments/ ? 'selected' : '' %>>Resolution comments</option>
+<option value="ResolutionStatistics" <% $ARGS{path} =~ /ResolutionStatistics/ ? 'selected' : '' %>>Resolution statistics</option>
+</select><br />
+
+Start date: <input type="text" name="start" value="<% $start %>" /><br />
+End date: <input type="text" name="end" value="<% $end %>" /><br />
+<& /Elements/Submit, Label => loc('Report') &>
+</form>
+<%args>
+$type => undef
+$start => undef
+$end => undef
+$query => undef
+</%args>
+<%init>
+</%init>
diff --git a/rt/html/Reports/Activity/Elements/MiniPlot b/rt/html/Reports/Activity/Elements/MiniPlot
new file mode 100644
index 000000000..f92032818
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/MiniPlot
@@ -0,0 +1,57 @@
+<table class="miniplot"><tr>
+% for my $major (@major) {
+<td><div class="graph">
+ <ul>
+% my $i = 0;
+% for my $minor (@minor) {
+% my $percent = int( 100 * ($data->{$major}{$minor} || 0) / $max );
+ <li class="c<% ($i % 6) + 1%>" style="width: <% $barwidth %>%;
+ left: <% $baroffset + $each * $i %>%;
+ height: <% $percent %>%;"><div class="data"><% $minor %>: <% $percent %>%</div></li>
+% $i++;
+% }
+ </ul>
+</div></td>
+% }
+</tr><tr>
+% for my $major (@major) {
+<th class="legend"><% $major %></th>
+% }
+</tr>
+</table>
+
+<table class="miniplot"><tr>
+% my $i = 0;
+% for my $minor (@minor) {
+<th><span class="demoblock c<% ($i++ % 6) + 1 %>"></span> <% $minor %></th>
+% }
+</tr>
+</table>
+
+<%args>
+$data
+$major => undef
+$minor => undef
+</%args>
+<%init>
+
+my $max = 1;
+
+my %minor;
+for my $major (keys %{$data}) {
+ for (keys %{$data->{$major}}) {
+ $minor{$_}++;
+ $max = $data->{$major}{$_} if $data->{$major}{$_} > $max;
+ }
+}
+
+my @major = $major ? @{$major} : sort keys %{$data};
+my @minor = $minor ? @{$minor} : sort keys %minor;
+
+return unless @minor and @major;
+
+my $each = int( (100 / @minor) );
+my $barwidth = int( (100 / @minor) * (3/4) );
+my $baroffset = int( (100 / @minor) * (1/8) );
+
+</%init>
diff --git a/rt/html/Reports/Activity/Elements/PrintFooter b/rt/html/Reports/Activity/Elements/PrintFooter
new file mode 100644
index 000000000..fa9f47582
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/PrintFooter
@@ -0,0 +1,7 @@
+<hr/>
+<div style="text-align: center;">
+<%$RT::ReportFooterMessage || 'Proprietary and Confidential' %>
+</div>
+</body>
+</html>
+%$m->abort();
diff --git a/rt/html/Reports/Activity/Elements/PrintHeader b/rt/html/Reports/Activity/Elements/PrintHeader
new file mode 100644
index 000000000..b7c4b3419
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/PrintHeader
@@ -0,0 +1,32 @@
+<%args>
+$title => undef
+$path => undef
+$query => undef
+</%args>
+<HTML>
+<HEAD>
+<TITLE><%$title%></TITLE>
+<link rel="shortcut icon" href="<%$RT::WebImagesURL%>/favicon.png" type="image/png" />
+<link media="all" rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/webrt.css" type="text/css" />
+<link media="print" rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/printrt.css" type="text/css" />
+%# XXX TODO THIS SHOULD NOT BE A TABLE
+<body>
+<table width="100%">
+<tr>
+<td align="left">
+<div id="username">User: <%$session{'CurrentUser'}->Name%></div>
+<div id="reportdate">
+%my $d= RT::Date->new($session{'CurrentUser'}); $d->SetToNow;
+<%$d->AsString%></div>
+</td>
+<td align="center">
+<h1><%$title%></h1>
+</td>
+<td align="right">
+<img src="<%$RT::LogoURL%>" alt="RT Logo"/>
+</td>
+</tr>
+</table>
+<hr/>
+<&|/l&>Report criteria:</&> <%$query%>
+<hr />
diff --git a/rt/html/Reports/Activity/Elements/ScreenFooter b/rt/html/Reports/Activity/Elements/ScreenFooter
new file mode 100644
index 000000000..235b7b306
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/ScreenFooter
@@ -0,0 +1,13 @@
+<& LimitReport, %ARGS &>
+% if ($show_print_link) {
+<div align="right">
+% my %printable_args = %ARGS;
+% delete $printable_args{$_} for (qw/path title mode/);
+% $printable_args{'mode'} = 'print';
+% my $url = $ARGS{'path'} .'?'. join(';', map { $_."=".$printable_args{$_} } keys %printable_args);
+<a href="<%$RT::WebPath|n%>/<%$url|n%>"><&|/l&>Printable version</&></a>
+</div>
+% }
+<%args>
+$show_print_link => 1
+</%args>
diff --git a/rt/html/Reports/Activity/Elements/ScreenHeader b/rt/html/Reports/Activity/Elements/ScreenHeader
new file mode 100644
index 000000000..080efc0dd
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/ScreenHeader
@@ -0,0 +1,8 @@
+<%args>
+$title => undef
+$path => undef
+</%args>
+<& /Elements/Header, Title => $title &>
+<& Tabs,
+ current_subtab => $path,
+ Title => $title &>
diff --git a/rt/html/Reports/Activity/Elements/Tabs b/rt/html/Reports/Activity/Elements/Tabs
new file mode 100644
index 000000000..a9498209e
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/Tabs
@@ -0,0 +1,52 @@
+<& /Elements/Tabs,
+ tabs => $tabs,
+ subtabs => $subtabs,
+ current_toptab => 'Tools/Offline.html',
+ current_tab => 'Reports/Activity/index.html'.$args,
+ Title => $Title &>
+
+<%INIT>
+my $subtabs = {};
+
+my $top = $m->caller_args(-1);
+my $args = "?" . $m->comp( '/Elements/QueryString',
+ query => $top->{query},
+ start => $top->{start},
+ end => $top->{end});
+if ($m->caller_args(-1)->{'query'}) {
+ $current_subtab .= $args;
+ $subtabs = {
+ a => { title => 'Activity detail',
+ path => 'Reports/Activity/ActivityDetail.html'.$args,
+ },
+ b => { title => 'Activity summary',
+ path => 'Reports/Activity/ActivitySummary.html'.$args,
+ },
+ c => { title => 'Resolution comments',
+ path => 'Reports/Activity/ResolutionComments.html'.$args,
+ },
+ d => { title => 'Resolution statistics',
+ path => 'Reports/Activity/ResolutionStatistics.html'.$args,
+ },
+ };
+}
+
+my $tabs = {
+ a => { title => loc('Offline'),
+ path => 'Tools/Offline.html',
+ },
+ r => { title => loc('Reports'),
+ path => 'Reports/Activity/index.html'.$args,
+ subtabs => $subtabs,
+ current_subtab => $current_subtab,
+ }
+ };
+
+</%INIT>
+
+
+<%ARGS>
+$current_tab => undef
+$current_subtab => undef
+$Title => undef
+</%ARGS>
diff --git a/rt/html/Reports/Activity/Elements/Wrapper b/rt/html/Reports/Activity/Elements/Wrapper
new file mode 100644
index 000000000..6f81f5f50
--- /dev/null
+++ b/rt/html/Reports/Activity/Elements/Wrapper
@@ -0,0 +1,16 @@
+<%args>
+$mode => 'screen'
+</%args>
+
+% if ($mode eq 'print') {
+<& PrintHeader, %ARGS &>
+%} else {
+<& ScreenHeader, %ARGS &>
+% }
+<%$m->content |n%>
+% if ($mode eq 'print') {
+<& PrintFooter, %ARGS &>
+%} else {
+<& ScreenFooter, %ARGS &>
+% }
+
diff --git a/rt/html/Reports/Activity/ResolutionComments.html b/rt/html/Reports/Activity/ResolutionComments.html
new file mode 100644
index 000000000..81ca301cc
--- /dev/null
+++ b/rt/html/Reports/Activity/ResolutionComments.html
@@ -0,0 +1,62 @@
+<&|Elements/Wrapper, %ARGS, title => loc("Resolution Comments"),
+ path => "Reports/Activity/ResolutionComments.html",
+ &>
+
+<table style="width: 100%">
+<tr>
+<th>Queue</th><th>Ticket #</th><th>Created</th><th>Resolved</th><th>Time to resolve</th>
+</tr>
+<tr>
+<th colspan="5">Resolution comments</th>
+</tr>
+% for my $item (@items) {
+<tr class="titlerow">
+<td><% $item->{queue} %></td>
+<td><% $item->{id} %></td>
+<td><% $item->{created} %></td>
+<td><% $item->{resolved} %></td>
+<td><% $item->{duration} %></td>
+</tr>
+<tr>
+<td colspan="5"><% $item->{whiteboard} %></td>
+</tr>
+% }
+</table>
+</&>
+
+<%args>
+$query => 'id > 0'
+$start => "2005/01/01"
+$end => "2006/01/01"
+</%args>
+<%init>
+
+use Time::Duration;
+
+my $summary_tickets = RT::Tickets->new( $session{'CurrentUser'} );
+$summary_tickets->FromSQL(
+ $query . " AND (Status = 'resolved') AND ( Updated >= '$start' AND Updated <= '$end')" );
+
+my @items;
+while ( my $ticket = $summary_tickets->Next ) {
+ push @items, {
+ queue => $ticket->QueueObj->Name,
+ id => $ticket->id,
+ created => $ticket->CreatedObj->AsString,
+ resolved => $ticket->ResolvedObj->AsString,
+ duration => Time::Duration::concise(
+ Time::Duration::duration(
+ $ticket->ResolvedObj->Unix - $ticket->CreatedObj->Unix
+ )
+ ),
+ whiteboard => $ticket->FirstCustomFieldValue('Whiteboard')
+ };
+}
+
+@items = sort { $a->{queue} cmp $b->{queue} || $a->{id} <=> $b->{id} } @items;
+
+
+
+
+
+</%init>
diff --git a/rt/html/Reports/Activity/ResolutionStatistics.html b/rt/html/Reports/Activity/ResolutionStatistics.html
new file mode 100644
index 000000000..4ecde2c82
--- /dev/null
+++ b/rt/html/Reports/Activity/ResolutionStatistics.html
@@ -0,0 +1,95 @@
+<&|Elements/Wrapper, %ARGS, title => loc("Resolution statistics"),
+ path => "Reports/Activity/ResolutionStatistics.html",
+ &>
+
+<& Elements/MiniPlot,
+ data => \%plot,
+ major => ['Date range','Last 30 days','Last 60 days','Last 90 days','Ever'],
+ minor => [(sort keys %queues), "Average"]
+ &>
+
+<table style="width: 100%">
+<tr>
+<td></td><th colspan="4">Number of tickets closed / Average resolution time per ticket</th>
+</tr>
+<tr class="titlerow">
+<th>Queue</th>
+<th>Date range</th>
+<th>Last 30 days</th>
+<th>Last 60 days</th>
+<th>Last 90 days</th>
+<th>Ever</th>
+</tr>
+% for my $queue (sort keys %queues) {
+<tr>
+<th><% $queue %></th>
+% for my $period ('Date range','Last 30 days','Last 60 days','Last 90 days','Ever') {
+<td><% scalar @{$closed{$period}{$queue}} %> / <% $average_resolve_times{$period}{$queue} %></td>
+% }
+</tr>
+% }
+<tr class="grandtotal">
+<th>Ticket average</th>
+% for my $period ('Date range','Last 30 days','Last 60 days','Last 90 days','Ever') {
+<td><% $average_resolve_times{$period}{_all_count} %> / <% $average_resolve_times{$period}{_all} %></td>
+% }
+</tr>
+</table>
+
+</&>
+<%args>
+$query => 'id > 0'
+$start => "2005/01/01"
+$end => "2006/01/01"
+</%args>
+<%init>
+
+my $in_30_days = RT::Date->new($session{'CurrentUser'});
+$in_30_days->Set(Format => 'Unix', Value => ( time - (86400*30)));
+my $in_60_days = RT::Date->new($session{'CurrentUser'});
+$in_60_days->Set(Format => 'Unix', Value => ( time - (86400*60)));
+my $in_90_days = RT::Date->new($session{'CurrentUser'});
+$in_90_days->Set(Format => 'Unix', Value => ( time - (86400*90)));
+
+my %queries;
+$queries{'Date range'} = "(Resolved >= '$start' AND Resolved <= '$end')";
+$queries{'Last 30 days'} = "(Resolved >= '".$in_30_days->ISO."')";
+$queries{'Last 60 days'} = "(Resolved >= '".$in_60_days->ISO."')";
+$queries{'Last 90 days'} = "(Resolved >= '".$in_90_days->ISO."')";
+$queries{'Ever'} = "(Status = 'resolved' OR Status = 'rejected')";
+
+
+my %closed;
+my %queues;
+foreach my $period (keys %queries) {
+ my $tix = RT::Tickets->new($session{'CurrentUser'});
+ $tix->FromSQL($query . " AND " .$queries{$period});
+
+ while (my $ticket = $tix->Next) {
+ push @{ $closed{$period}{$ticket->QueueObj->Name}}, $ticket;
+ $queues{$ticket->QueueObj->Name}++;
+ }
+}
+
+my %restimes;
+my %average_resolve_times;
+my %plot;
+use Time::Duration;
+foreach my $period ( keys %closed ) {
+ foreach my $queue ( keys %{$closed{$period}} ) {
+ foreach my $ticket (@{$closed{$period}{$queue}} ) {
+ push @{$restimes{$period}{$queue}}, ( $ticket->ResolvedObj->Unix - $ticket->CreatedObj->Unix);
+ }
+
+ my $total_time = 0;
+ $total_time+= $_ for @{$restimes{$period}{$queue}};
+ $average_resolve_times{$period}{'_all_time'} += $total_time;
+ $average_resolve_times{$period}{'_all_count'} += @{$restimes{$period}{$queue}};
+ $plot{$period}{$queue} = $total_time / @{$restimes{$period}{$queue}};
+ $average_resolve_times{$period}{$queue} = Time::Duration::concise(Time::Duration::duration($plot{$period}{$queue}));
+ }
+ $plot{$period}{Average} = $average_resolve_times{$period}{'_all_time'} / $average_resolve_times{$period}{'_all_count'};
+ $average_resolve_times{$period}{'_all'} = Time::Duration::concise(Time::Duration::duration($plot{$period}{Average}));
+}
+
+</%init>
diff --git a/rt/html/Reports/Activity/index.html b/rt/html/Reports/Activity/index.html
new file mode 100644
index 000000000..1f6ddb0d5
--- /dev/null
+++ b/rt/html/Reports/Activity/index.html
@@ -0,0 +1,29 @@
+<&| Elements/Wrapper, %ARGS, title => loc("Activity reports"), show_print_link => 0 &>
+
+
+</&>
+
+<%args>
+$type => undef
+$start => undef
+$end => undef
+$query => "Status = 'resolved'"
+</%args>
+<%init>
+
+unless ($start) {
+ my $then = RT::Date->new($session{'CurrentUser'});
+ $then->Set(Format => 'Unix', Value => time - (86400*7));
+ $ARGS{start} = substr($then->ISO,0,10);
+}
+
+unless ($end) {
+ my $now = RT::Date->new($session{'CurrentUser'});
+ $now->SetToNow();
+ $ARGS{end} = substr($now->ISO,0,10);
+}
+
+if ($type) {
+ $m->redirect($type . ".html?" . $m->comp('/Elements/QueryString', query => $query, start => $start, end => $end));
+}
+</%init>
diff --git a/rt/html/Search/Build.html b/rt/html/Search/Build.html
deleted file mode 100644
index fa84f42a7..000000000
--- a/rt/html/Search/Build.html
+++ /dev/null
@@ -1,832 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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,
- Format => $Format,
- Query => $Query,
- Order => $Order,
- OrderBy => $OrderBy,
- Rows => $RowsPerPage
-&>
-
-<form method="post" action="Build.html" name="BuildQuery">
-<input type="hidden" class="hidden" name="SearchId" value="<%$SearchId%>" />
-<input type="hidden" class="hidden" name="Query" value="<%$Query%>" />
-<input type="hidden" class="hidden" name="Format" value="<%$Format%>" />
-<table width="100%" border="0" cellpadding="5">
-<tr valign="top">
-<td class="boxcontainer" rowspan="2" width="65%">
-<& Elements/PickCriteria, query => $Query, cfqueues => $queues &>
-<& /Elements/Submit, Caption => loc('Add these terms to your search'), Label => loc('Add'), Name => 'AddClause'&>
-</td>
-
-<td>
-<& Elements/EditQuery,
- %ARGS,
- actions => \@actions,
- optionlist => $optionlist,
- Description => $Description &>
-<& /Elements/Submit, Label => loc('Add and Search'), Name => 'DoSearch'&>
-</td>
-</tr>
-
-<tr valign="top">
-<td>
-<& Elements/EditSearches, CurrentSearch => $search_hash, Dirty => $dirty, SearchId => $SearchId &>
-</td>
-</tr>
-
-<tr>
-<td colspan="2" class="boxcontainer">
-
-<& Elements/DisplayOptions, %ARGS, Format=> $Format,
-AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat, RowsPerPage => $RowsPerPage, OrderBy => $OrderBy, Order => $Order &>
-<& /Elements/Submit, Label => loc('Add and Search'), Name => 'DoSearch'&>
-</td>
-</tr>
-</table>
-</form>
-
-<%INIT>
-use RT::Interface::Web::QueryBuilder;
-use RT::Interface::Web::QueryBuilder::Tree;
-
-my $search_hash = {};
-my $search;
-my $title = loc("Query Builder");
-
-# {{{ Clear out unwanted data
-if ( $NewQuery or $ARGS{'Delete'} ) {
-
- # Wipe all data-carrying variables clear if we want a new
- # search, or we're deleting an old one..
- $Query = '';
- $Format = '';
- $Description = '';
- $SearchId = '';
- $Order = '';
- $OrderBy = '';
- $RowsPerPage = undef;
-
- # ($search hasn't been set yet; no need to clear)
-
- # ..then wipe the session out..
- undef $session{'CurrentSearchHash'};
-
- # ..and the search results.
- $session{'tickets'}->CleanSlate() if defined $session{'tickets'};
-}
-
-# }}}
-
-if (ref $OrderBy eq "ARRAY") {
- $OrderBy = join("|", @$OrderBy);
-}
-if (ref $Order eq "ARRAY") {
- $Order = join("|", @$Order);
-}
-
-# {{{ Attempt to load what we can from the session, set defaults
-
-# We don't read or write to the session again until the end
-$search_hash = $session{'CurrentSearchHash'};
-
-# 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.
-$Query ||= $search_hash->{'Query'};
-$Format ||= $search_hash->{'Format'} || $prefs->{'Format'};
-$Description ||= $search_hash->{'Description'};
-$SearchId ||= $search_hash->{'SearchId'} || 'new';
-$Order ||= $search_hash->{'Order'} || $prefs->{'Order'} || 'ASC';
-$OrderBy ||= $search_hash->{'OrderBy'} || $prefs->{'OrderBy'} || 'id';
-
-unless ( defined $RowsPerPage ) {
- if ( defined $search_hash->{'RowsPerPage'} ) {
- $RowsPerPage = $search_hash->{'RowsPerPage'};
- }
- elsif ( defined $prefs->{'RowsPerPage'} ) {
- $RowsPerPage = $prefs->{'RowsPerPage'};
- }
- else {
- $RowsPerPage = 50;
- }
-}
-
- $search ||= $search_hash->{'Object'};
-
-# }}}
-
-my @actions = ();
-
-# Clean unwanted junk from the format
-$Format = $m->comp( '/Elements/ScrubHTML', Content => $Format ) if ($Format);
-
-# {{{ If we're asked to delete the current search, make it go away and reset the search parameters
-if ( $ARGS{'Delete'} ) {
-
- # We set $SearchId to 'new' above already, so peek into the %ARGS
- my ($container_object, $search_id) = _parse_saved_search ($ARGS{'SearchId'});
- if ($container_object && $container_object->id) {
- # We have the object the entry is an attribute on; delete the
- # entry..
- $container_object->Attributes->DeleteEntry(
- Name => 'SavedSearch',
- id => $search_id
- );
- }
-}
-
-# }}}
-
-# {{{ If the user wants to copy a search, uncouple from the one that this was based on, but don't erase the $Query or $Format
-if ( $ARGS{'CopySearch'} ) {
- $SearchId = 'new';
- $search = undef;
- $Description = loc( "[_1] copy", $Description );
-}
-
-# }}}
-
-# {{{ if we're asked to revert the current search, we just want to load it
-if ( $ARGS{'Revert'} ) {
- $ARGS{'LoadSavedSearch'} = $SearchId;
-}
-
-# }}}
-
-# {{{ if we're asked to load a search, load it.
-
-if ( my ($container_object, $search_id ) = _parse_saved_search ($ARGS{'LoadSavedSearch'})) {
- $search = $container_object->Attributes->WithId($search_id);
-
- # We have a $search and now; import the others
- $SearchId = $ARGS{'LoadSavedSearch'};
- $Description = $search->Description;
- $Format = $search->SubValue('Format');
- $Query = $search->SubValue('Query');
- $Order = $search->SubValue('Order');
- $OrderBy = $search->SubValue('OrderBy');
- $RowsPerPage = $search->SubValue('RowsPerPage');
-}
-
-# }}}
-
-# {{{ if we're asked to save the current search, save it
-if ( $ARGS{'Save'} ) {
- if ( $search && $search->id ) {
- # permission check
- if ($search->Object->isa('RT::System')) {
- unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {
- Abort("No permission to save system-wide searches");
- }
- }
-
- # This search is based on a previously loaded search -- so
- # just update the current search object with new values
- $search->SetSubValues(
- Format => $Format,
- Query => $Query,
- Order => $Order,
- OrderBy => $OrderBy,
- RowsPerPage => $RowsPerPage,
- );
- $search->SetDescription($Description);
-
- }
- elsif ( $SearchId eq 'new' ) {
- my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} );
- my ( $ok, $search_msg ) = $saved_search->Save(
- Privacy => $ARGS{'Owner'},
- Name => $Description,
- SearchParams => {
- Format => $Format,
- Query => $Query,
- Order => $Order,
- OrderBy => $OrderBy,
- RowsPerPage => $RowsPerPage } );
-
- if ($ok) {
- $search = $session{'CurrentUser'}->UserObj->Attributes->WithId($saved_search->Id);
- # Build new SearchId
- $SearchId =
- ref( $session{'CurrentUser'}->UserObj ) . '-'
- . $session{'CurrentUser'}->UserObj->Id
- . '-SavedSearch-'
- . $search->Id;
- }
- else {
- push @actions, [ loc("Can't find a saved search to work with").': '.loc($search_msg), 0 ];
- }
- }
- else {
- push @actions, [ loc("Can't save this search"), 0 ];
- }
-
-}
-
-# }}}
-
-
-# {{{ Parse the query
-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;
-
-my $_match = sub {
-
- # 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;
-};
-
-my $ParseQuery = sub {
- my $string = shift;
- my $tree = shift;
- my $actions = shift;
- my $want = KEYWORD | PAREN;
- my $last = undef;
-
- my $depth = 1;
-
- # make a tree root
- $$tree = RT::Interface::Web::QueryBuilder::Tree->new;
- my $root = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $$tree );
- my $parentnode = $root;
-
- # on new searches, we're passed undef but still need to construct the
- # RT::Interface::Web::QueryBuilder::Tree. Quiet warning
- return unless defined $string;
-
- # get the FIELDS from Tickets_Overlay
- my $tickets = new RT::Tickets( $session{'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,
- [
- loc("Error near ->[_1]<- expecting a [_2] in '[_3]'",
- $val, $token, $string ),
- -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();
- }
-
- $want = KEYWORD | PAREN | AGGREG;
- }
- elsif ( $current & AGGREG ) {
- $ea = $val;
- $parentnode->setNodeValue($ea);
- $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;
-
- my ($key_base, $subkey) = split(/\./,$key,2);
- $key_base =~ s/\..*$//; # Strip off .EmailAddress, for example
-
- if ( exists $lcfields{lc $key_base } ) {
- $key = $lcfields{lc $key_base } . (defined $subkey ? '.'.$subkey : '');
- $class = $FIELDS{$key_base}->[0];
- }
- elsif ( $key =~ /^C(?:ustom)?F(?:ield)?\.{(.*)}$/i ) {
- $class = $FIELDS{'CF'}->[0];
- }
-
- if ( $class ne 'INT' ) {
- $val = "'$val'";
- }
-
- push @$actions, [ loc("Unknown field: [_1]", $key), -1 ] unless $class;
-
- $want = PAREN | AGGREG;
- }
- else {
- push @$actions, [ 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
- RT::Interface::Web::QueryBuilder::Tree->new( $clause, $parentnode );
-
- ( $ea, $key, $op, $value ) = ( "", "", "", "" );
-
- }
-
- $last = $current;
- } # while
-
- push @$actions, [ loc("Incomplete query"), -1 ]
- unless ( ( $want | PAREN ) || ( $want | KEYWORD ) );
-
- push @$actions, [ loc("Incomplete Query"), -1 ]
- unless ( $last && ( $last | PAREN ) || ( $last || VALUE ) );
-
- # This will never happen, because the parser will complain
- push @$actions, [ loc("Mismatched parentheses"), -1 ]
- unless $depth == 1;
-};
-
-my $tree;
-{
- my @parsing_errors;
- $ParseQuery->( $Query, \$tree, \@parsing_errors );
-
- # if parsing went poorly, send them to the edit page
- # to fix it
- if ( @parsing_errors ) {
- return $m->comp(
- "Edit.html",
- Query => $Query,
- actions => \@parsing_errors
- );
- }
-}
-
-$Query = "";
-
-my @options = $tree->GetDisplayedNodes;
-
-my @current_values = grep { defined } @options[@clauses];
-
-# {{{ Move things around
-if ( $ARGS{"Up"} ) {
- if (@current_values) {
- foreach my $value (@current_values) {
- my $index = $value->getIndex();
- if ( $value->getIndex() > 0 ) {
- my $parent = $value->getParent();
- $parent->removeChild($index);
- $parent->insertChild( $index - 1, $value );
- $value = $parent->getChild( $index - 1 );
- }
- else {
- push( @actions, [ loc("error: can't move up"), -1 ] );
- }
- }
- }
- else {
- push( @actions, [ loc("error: nothing to move"), -1 ] );
- }
-}
-elsif ( $ARGS{"Down"} ) {
- if (@current_values) {
- foreach my $value (@current_values) {
- my $index = $value->getIndex();
- my $parent = $value->getParent();
- if ( $value->getIndex() < ( $parent->getChildCount - 1 ) ) {
- $parent->removeChild($index);
- $parent->insertChild( $index + 1, $value );
- $value = $parent->getChild( $index + 1 );
- }
- else {
- push( @actions, [ loc("error: can't move down"), -1 ] );
- }
- }
- }
- else {
- push( @actions, [ loc("error: nothing to move"), -1 ] );
- }
-}
-elsif ( $ARGS{"Left"} ) {
- if (@current_values) {
- foreach my $value (@current_values) {
- my $parent = $value->getParent();
- my $grandparent = $parent->getParent();
- if ( !$grandparent->isRoot ) {
- my $index = $parent->getIndex();
- $parent->removeChild($value);
- $grandparent->insertChild( $index, $value );
- if ( $parent->isLeaf() ) {
- $grandparent->removeChild($parent);
- }
- }
- else {
- push( @actions, [ loc("error: can't move left"), -1 ] );
- }
- }
- }
- else {
- push( @actions, [ loc("error: nothing to move"), -1 ] );
- }
-}
-elsif ( $ARGS{"Right"} ) {
- if (@current_values) {
- foreach my $value (@current_values) {
- my $parent = $value->getParent();
- my $index = $value->getIndex();
- my $newparent;
- if ( $index > 0 ) {
- my $sibling = $parent->getChild( $index - 1 );
- if ( ref( $sibling->getNodeValue ) ) {
- $parent->removeChild($value);
- my $newtree = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $parent );
- $newtree->addChild($value);
- }
- else {
- $parent->removeChild($index);
- $sibling->addChild($value);
- }
- }
- else {
- $parent->removeChild($value);
- $newparent = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $parent );
- $newparent->addChild($value);
- }
- }
- }
- else {
- push( @actions, [ loc("error: nothing to move"), -1 ] );
- }
-}
-elsif ( $ARGS{"DeleteClause"} ) {
- if (@current_values) {
- $_->getParent()->removeChild($_) for @current_values;
- @current_values = ();
- }
- else {
- push( @actions, [ loc("error: nothing to delete"), -1 ] );
- }
-}
-elsif ( $ARGS{"Toggle"} ) {
- my $ea;
- if (@current_values) {
- foreach my $value (@current_values) {
- my $parent = $value->getParent();
-
- if ( $parent->getNodeValue eq 'AND' ) {
- $parent->setNodeValue('OR');
- }
- else {
- $parent->setNodeValue('AND');
- }
- }
- }
- else {
- push( @actions, [ loc("error: nothing to toggle"), -1 ] );
- }
-}
-
-# {{{ Try to find if we're adding a clause
-foreach my $arg ( keys %ARGS ) {
- if (
- $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 ( $keyword, $op, $value );
-
- #figure out if it's a grouping
- if ( $ARGS{ $field . "Field" } ) {
- $keyword = $ARGS{ $field . "Field" };
- }
- else {
- $keyword = $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 .. @ops - 1 ) {
- my ( $op, $value ) = ( $ops[$i], $values[$i] );
- next if $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 = "'$value'";
- }
-
- my $clause = {
- Key => $keyword,
- Op => $op,
- Value => $value
- };
-
- my $newnode = RT::Interface::Web::QueryBuilder::Tree->new($clause);
- if (@current_values) {
- foreach my $value (@current_values) {
- my $newindex = $value->getIndex() + 1;
- $value->insertSibling( $newindex, $newnode );
- $value = $newnode;
- }
- }
- else {
- $tree->getChild(0)->addChild($newnode);
- @current_values = $newnode;
- }
- $newnode->getParent()->setNodeValue( $ARGS{'AndOr'} );
- }
- }
-}
-
-# }}}
-
-$tree->PruneChildlessAggregators;
-
-# }}}
-
-# {{{ Rebuild $Query based on the additions / movements
-$Query = "";
-my $optionlist_arrayref;
-
-($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 );
-( $Format, $AvailableColumns, $CurrentFormat ) = $m->comp(
- 'Elements/BuildFormatString',
- cfqueues => $queues,
- %ARGS, Format => $Format
-);
-
-# }}}
-
-# {{{ If we're modifying an old query, check if it has changed
-my $dirty = 0;
-$dirty = 1
- if defined $search
- and ($search->SubValue('Format') ne $Format
- or $search->SubValue('Query') ne $Query
- or $search->SubValue('Order') ne $Order
- or $search->SubValue('OrderBy') ne $OrderBy
- or $search->SubValue('RowsPerPage') ne $RowsPerPage );
-
-# }}}
-
-# {{{ Push the updates into the session so we don't loose 'em
-$search_hash->{'SearchId'} = $SearchId;
-$search_hash->{'Format'} = $Format;
-$search_hash->{'Query'} = $Query;
-$search_hash->{'Description'} = $Description;
-$search_hash->{'Object'} = $search;
-$search_hash->{'Order'} = $Order;
-$search_hash->{'OrderBy'} = $OrderBy;
-$search_hash->{'RowsPerPage'} = $RowsPerPage;
-
-$session{'CurrentSearchHash'} = $search_hash;
-
-# }}}
-
-# {{{ Show the results, if we were asked.
-if ( $ARGS{"DoSearch"}) {
- $m->comp(
- "Results.html",
- Query => $Query,
- Format => $Format,
- Order => $Order,
- OrderBy => $OrderBy,
- Rows => $RowsPerPage
- );
- $m->comp('/Elements/Footer');
- $m->abort();
-}
-
-# }}}
-
-# {{{ Build a querystring for the tabs
-
-my $QueryString;
-if ($NewQuery) {
- $QueryString = '?NewQuery=1';
-}
-else {
- $QueryString = '?'
- . $m->comp(
- '/Elements/QueryString',
- Query => $Query,
- Format => $Format,
- Order => $Order,
- OrderBy => $OrderBy,
- Rows => $RowsPerPage
- )
- if ($Query);
-}
-
-# }}}
-
-</%INIT>
-
-<%ARGS>
-$NewQuery => 0
-$SearchId => undef
-$Query => undef
-$Format => undef
-$Description => undef
-$Order => undef
-$OrderBy => undef
-$RowsPerPage => undef
-$HideResults => 0
-@clauses => ()
-</%ARGS>
-
diff --git a/rt/html/Search/Bulk.html b/rt/html/Search/Bulk.html
deleted file mode 100644
index 69ffba8eb..000000000
--- a/rt/html/Search/Bulk.html
+++ /dev/null
@@ -1,397 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-<& /Elements/ListActions, actions => \@results &>
-<form method="post" action="<%$RT::WebPath%>/Search/Bulk.html" enctype="multipart/form-data">
-% foreach my $var qw(Query Format OrderBy Order Rows Page) {
-<input type="hidden" class="hidden" name="<%$var%>" value="<%$ARGS{$var}%>" />
-%}
-<& /Elements/TicketList, Query => $Query,
- DisplayFormat => $Format,
- Format => $ARGS{'Format'},
- Verbatim => 1,
- AllowSorting => 1,
- OrderBy => $OrderBy,
- Order => $Order,
- Rows => $Rows,
- Page => $Page,
- BaseURL => $RT::WebPath."/Search/Bulk.html?"
- &>
-
-<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"> <input name="Priority" size="4" /> </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
- <tr><td align="right"><&|/l&>Attach</&>:</td><td><input name="UpdateAttachment" type="file" /></td></tr>
- <tr><td class="labeltop"><&|/l&>Message</&>:</td><td>
- <& /Elements/MessageBox, Name=>"UpdateContent"&>
- </td></tr>
- </table>
-
-</&>
-<&|/Widgets/TitleBox, title => loc('Edit Custom Fields'), color => "#336633"&>
-<%perl>
-my $cfs = RT::CustomFields->new($session{'CurrentUser'});
-$cfs->LimitToGlobal();
-$cfs->LimitToQueue($_) for keys %$seen_queues;
-</%perl>
-<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"><%$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 &>
-</&>
-
-<& /Elements/Submit, Label => loc('Update') &>
-
-
-</form>
-
-
-<%INIT>
-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);
-
-$Page ||= 1;
-
-$Format ||= $RT::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->QueueObj->TicketCustomFields;
- while ( my $field = $custom_fields->Next ) {
- $fields->{ $field->id } = $field;
- }
-}
-
-my $do_comment_reply = 0;
-
-# Prepare for ticket updates
-if ($ARGS{'UpdateContent'}) {
- $ARGS{'UpdateContent'} =~ s/\r\n/\n/g;
- chomp( $ARGS{'UpdateContent'} );
-
- if ($ARGS{'UpdateContent'} ne ''
- && $ARGS{'UpdateContent'} ne "-- \n"
- . $session{'CurrentUser'}->UserObj->Signature ) {
- $do_comment_reply = 1;
- }
-}
-
-#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;
-
-
-while ( my $Ticket = $Tickets->Next ) {
- next unless ( $ARGS{ "UpdateTicket" . $Ticket->Id } );
-
- #Update the links
- $ARGS{'id'} = $Ticket->id;
- $queues{ $Ticket->QueueObj->Id }++;
-
- my @updateresults;
- if ($do_comment_reply) {
- ProcessUpdateMessage(
- TicketObj => $Ticket,
- ARGSRef => \%ARGS,
- Actions => \@updateresults
- );
- }
-
- #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 );
-}
-
-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
-$Order => 'ASC'
-$OrderBy => 'id'
-$Query => undef
-</%args>
diff --git a/rt/html/Search/Chart b/rt/html/Search/Chart
deleted file mode 100644
index 26249a734..000000000
--- a/rt/html/Search/Chart
+++ /dev/null
@@ -1,188 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 @keys;
-my @values;
-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'} );
-$tix->FromSQL( $Query );
-my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' );
-$tix->GroupBy( FIELD => $PrimaryGroupBy );
-my $value_name = $tix->Column( FIELD => $PrimaryGroupBy );
-
-my $chart = $chart_class->new( 600 => 400 );
-
-my $font = $RT::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',
-);
-my $class = $class{ $PrimaryGroupBy };
-
-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)');
- if ($chart_class eq 'GD::Graph::pie') {
- $keys[-1] .= " - ". $entry->__Value( $count_name );
- }
- 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;
- }
-}
-
-unless (@keys && @values) {
- @keys = ('');
- @values = (0);
-}
-
-my %data;
-foreach my $key (@keys) { $data{$key} = shift @values; }
-my @sorted_keys = sort @keys;
-my @sorted_values = map { $data{$_}} @sorted_keys;
-
-
-
-my $plot = $chart->plot( [ [@sorted_keys], [@sorted_values] ] ) 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/html/Search/Chart.html b/rt/html/Search/Chart.html
deleted file mode 100644
index 9fca23b86..000000000
--- a/rt/html/Search/Chart.html
+++ /dev/null
@@ -1,73 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => ''
-$ChartStyle => 'bars'
-$Description => undef
-</%args>
-<%init>
-$ARGS{SecondaryGroupBy} ||= '';
-
-my $title = loc( "Search results grouped by [_1]", $PrimaryGroupBy );
-
-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 &>
-<& /Elements/ListActions, actions => \@actions &>
-<& /Search/Elements/Chart, %ARGS &>
-
-
-<& /Widgets/SavedSearch:show, %ARGS, Action => 'Chart.html', self => $saved_search, Title => 'Saved charts' &>
diff --git a/rt/html/Search/Edit.html b/rt/html/Search/Edit.html
deleted file mode 100755
index b7708f703..000000000
--- a/rt/html/Search/Edit.html
+++ /dev/null
@@ -1,88 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => $ARGS{'Rows'},
- OrderBy => $ARGS{'OrderBy'},
- Order => $ARGS{'Order'} &>
-
-<& Elements/NewListActions, actions => \@actions &>
-
-<form method="post" action="Build.html">
-<input type="hidden" class="hidden" name="SearchId" value="<%$SearchId%>" />
-<textarea name="Query" rows="8" cols="72"><%$Query%></textarea>
-<br />
-<textarea name="Format" rows="8" cols="72"><%$Format%></textarea>
-<br />
-<& /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,
- Rows => $ARGS{'Rows'},
- OrderBy => $ARGS{'OrderBy'},
- Order => $ARGS{'Order'},
- );
-
-</%INIT>
-
-
-<%ARGS>
-$Query => undef
-$Format => undef
-$SearchId => 'new'
-@actions => undef
-</%ARGS>
diff --git a/rt/html/Search/Elements/BuildFormatString b/rt/html/Search/Elements/BuildFormatString
deleted file mode 100644
index 052633303..000000000
--- a/rt/html/Search/Elements/BuildFormatString
+++ /dev/null
@@ -1,244 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => undef
-%cfqueues => undef
-$Face => undef
-$Size => undef
-$Link => undef
-$Title => undef
-$AddCol => undef
-$RemoveCol => undef
-$ColUp => undef
-$ColDown => undef
-$SelectDisplayColumns => undef
-$CurrentDisplayColumns => undef
-</%args>
-<%init>
-
-unless ($Format) {
- $Format = $RT::DefaultSearchResultFormat;
-}
-
-
-# All the things we can display in the format string by default
-my @fields = qw(
- id
- Status
- ExtendedStatus
- Subject
- QueueName
- OwnerName
- Priority
- InitialPriority
- FinalPriority
- Type
- TimeWorked
- TimeLeft
- TimeEstimated
- CreatedBy
- LastUpdatedBy
- Requestors
- Cc
- AdminCc
- Starts
- StartsRelative
- Started
- StartedRelative
- Created
- CreatedRelative
- LastUpdated
- LastUpdatedRelative
- Told
- ToldRelative
- Due
- DueRelative
- Resolved
- ResolvedRelative
- RefersTo
- ReferredToBy
- DependsOn
- DependedOnBy
- MemberOf
- Members
- Parents
- Children
- NEWLINE
-);
-
-my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
-foreach my $id (keys %cfqueues) {
- # What does this _do_? What are the keys to cfqueues
- $id =~ s/^.'*(.*).'*$/$1/;
- # Gotta load up the $queue object, since queues get stored by name now.
- my $queue = RT::Queue->new($session{'CurrentUser'});
- $queue->Load($id);
- $CustomFields->LimitToQueue($queue->Id);
-}
-$CustomFields->LimitToGlobal;
-
-while ( my $CustomField = $CustomFields->Next ) {
- push @fields, "CustomField.{" . $CustomField->Name . "}";
-}
-
-my ( @seen);
-
-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 ) {
- my $index = $CurrentDisplayColumns;
- 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} .=
- "<a HREF=\"" . $RT::WebPath . "/Ticket/Display.html?id=__id__\">";
- $column{Suffix} .= "</a>";
- }
- elsif ( $Link eq "Take" ) {
- $column{Prefix} .= "<a HREF=\"" . $RT::WebPath
- . "/Ticket/Display.html?Action=Take&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 $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 $field->{Suffix};
- $row .= "'";
- push( @format_string, $row );
-}
-
-$Format = join(",\n", @format_string);
-
-
-return($Format, \@fields, \@seen);
-
-</%init>
-
diff --git a/rt/html/Search/Elements/Chart b/rt/html/Search/Elements/Chart
deleted file mode 100644
index 37a4da239..000000000
--- a/rt/html/Search/Elements/Chart
+++ /dev/null
@@ -1,139 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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;
-my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
-$tix->FromSQL( $Query );
-my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' );
-$tix->GroupBy( FIELD => $PrimaryGroupBy );
-my $value_name = $tix->Column( FIELD => $PrimaryGroupBy );
-
-my %class = (
- Queue => 'RT::Queue',
- Owner => '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;
-foreach my $key (@keys) { $data{$key} = shift @values; }
-my @sorted_keys = sort @keys;
-my @sorted_values = map { $data{$_}} @sorted_keys;
-
-
-my $query_string = $m->comp('/Elements/QueryString', %ARGS);
-</%init>
-
-<% loc('Query:') %>&nbsp;<% $Query %><br />
-
-<img src="<%$RT::WebPath%>/Search/Chart?<%$query_string|n%>" /><br />
-
-<table class="collection-as-table">
-<tr>
-<th class="collection-as-table"><% $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/html/Search/Elements/DisplayOptions b/rt/html/Search/Elements/DisplayOptions
deleted file mode 100644
index 1ddbafd64..000000000
--- a/rt/html/Search/Elements/DisplayOptions
+++ /dev/null
@@ -1,144 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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("Display Columns") &>
-<table width="100%">
-<tr>
-<td>
-<& EditFormat, %ARGS &>
-</td>
-<td valign="top">
-<table valign="top">
-
-% for my $o (0..3) {
-<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
-% }
-><&|/l&><%$field%></&></option>
-% }
-</select>
-<select name="Order">
-<option value="ASC"
-% unless ( ($Order[$o]||'') eq "DESC" ) {
-selected
-% }
-><&|/l&>Asc</&></option>
-<option value="DESC"
-% if ( ($Order[$o]||'') eq "DESC" ) {
-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>
-</td>
-</tr>
-</table>
-</&>
-
-<%INIT>
-my $tickets = new RT::Tickets($session{'CurrentUser'});
-my %fields = %{$tickets->FIELDS};
-map { $fields{$_}->[0] =~ /^(?:ENUM|INT|DATE|STRING)$/ || 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;
-my @OrderBy;
-if ($OrderBy =~ /\|/) {
- @OrderBy = split /\|/, $OrderBy;
-} else {
- @OrderBy = ( $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/html/Search/Elements/EditFormat b/rt/html/Search/Elements/EditFormat
deleted file mode 100644
index 31cc21552..000000000
--- a/rt/html/Search/Elements/EditFormat
+++ /dev/null
@@ -1,116 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-<&|/l&>Add Columns</&>:
-</td>
-<td>
-<&|/l&>Format</&>:
-</td>
-<td></td>
-<td>
-<&|/l&>Show Columns</&>:
-</td>
-<tr>
-<td valign="top">
-<select size="6" name="SelectDisplayColumns" multiple>
-% foreach my $field ( @$AvailableColumns) {
-<option value="<%$field%>"><% loc( $field) %></option>
-%# $m->comp( '/Elements/RT__Ticket/ColumnMap', Name => $field, Attr => 'title') ||
-% }
-</select>
-</td>
-<td>
-<&|/l&>Link</&>:
-<select name="Link">
-<option value="None">-</option>
-<option value="Display"><&|/l&>Display</&></option>
-<option value="Take"><&|/l&>Take</&></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>
-<td colspan="3" align="center">
-</td>
-</tr>
-</table>
-
-<%ARGS>
-$CurrentFormat => undef
-$AvailableColumns => undef
-</%ARGS>
diff --git a/rt/html/Search/Elements/EditQuery b/rt/html/Search/Elements/EditQuery
deleted file mode 100644
index 3b08c8b48..000000000
--- a/rt/html/Search/Elements/EditQuery
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-% $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
-$optionlist
-$actions
-</%ARGS>
diff --git a/rt/html/Search/Elements/EditSearches b/rt/html/Search/Elements/EditSearches
deleted file mode 100644
index a22dc4b83..000000000
--- a/rt/html/Search/Elements/EditSearches
+++ /dev/null
@@ -1,103 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 ($session{'CurrentUser'}->HasRight( Right => 'CreateSavedSearch',
-% Object=> $RT::System )) {
-<&|/l&>Privacy:</&>
-% if ($CurrentSearch->{'Object'} && $CurrentSearch->{'Object'}->id) {
-<& SearchPrivacy, Object => $CurrentSearch->{'Object'}->Object &><br />
-% } else {
-<& SelectSearchObject, Name => 'Owner', Objects => \@Objects &><br />
-% }
-<&|/l&>Description</&>:<br>
-<font size="-1"><input size="25" name="Description" value="<%$CurrentSearch->{'Description'} || ''%>" /></font>
-% if ($SearchId ne 'new') {
-<nobr>
-% if ($Dirty) {
-<input type="submit" class="button" name="Revert" value="<%loc('Revert')%>" />
-% }
-<input type="submit" class="button" name="Delete" value="<%loc('Delete')%>" />
-% if ($AllowCopy) {
-<input type="submit" class="button" name="CopySearch" value="<%loc('Copy')%>" />
-% }
-</nobr>
-
-% }
-<input type="submit" name="Save" value="<%loc('Save')%>" class="button" />
-<hr />
-% }
-<&|/l&>Load saved search:</&><br />
-<& SelectSearchesForObjects, Name => 'LoadSavedSearch', Objects => \@Objects, SearchType => $SearchType &>
-<input value="<%loc('Load')%>" type="submit" class="button" />
-</&>
-
-<%init>
-unless ($session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch',
- Object=> $RT::System )) {
- return;
-}
-
-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');
-
-</%INIT>
-
-<%ARGS>
-$SearchType => 'Ticket'
-$SearchId => undef
-$CurrentSearch => undef
-$Description => undef
-$HideResults => 0
-$Dirty => 0
-$AllowCopy => 1
-$Title => loc('Saved searches')
-</%ARGS>
diff --git a/rt/html/Search/Elements/NewListActions b/rt/html/Search/Elements/NewListActions
deleted file mode 100644
index 33fc3608b..000000000
--- a/rt/html/Search/Elements/NewListActions
+++ /dev/null
@@ -1,68 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 ($actions[0] ) {
-<b><%loc('Results')%></b><br />
-% foreach my $action (@actions) {
-% next unless ($action);
-% my @item = @$action;
-% if ($item[1] < 0) {
-<font color="red">
-% }
-&nbsp;<%$item[0]%><br />
-% if ($item[1] < 0) {
-</font>
-% }
-% }
-<br />
-% }
-<%init>
-@actions = grep (/./,@actions);
-</%init>
-<%ARGS>
-@actions => undef
-</%ARGS>
diff --git a/rt/html/Search/Elements/PickBasics b/rt/html/Search/Elements/PickBasics
deleted file mode 100644
index b91fde3b7..000000000
--- a/rt/html/Search/Elements/PickBasics
+++ /dev/null
@@ -1,176 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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&>id</&>
-</td><td>
-<& /Elements/SelectEqualityOperator, Name => "idOp" &>
-</td><td>
-<input name="ValueOfid" size="5" />
-</td>
-</tr>
-
-<tr><td>
-<& /Elements/SelectAttachmentField, Name => 'AttachmentField' &>
-</td><td>
-<& /Elements/SelectBoolean, Name => "AttachmentOp",
- True => loc("matches"),
- False => loc("does not match"),
- TrueVal => 'LIKE',
- FalseVal => 'NOT LIKE'
-&>
-</td><td>
-<input name="ValueOfAttachment" size="20" />
-</td>
-</tr>
-<tr>
-<td class="label">
-<&|/l&>Queue</&>
-</td><td>
-<& /Elements/SelectBoolean, Name => "QueueOp" ,
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=',
- FalseVal => '!=' &>
-</td><td>
-<& /Elements/SelectQueue,
- Name => "ValueOfQueue",
- NamedValues => 1,
- CheckQueueRight => 'ShowTicket' &>
-</td>
-</tr>
-<tr>
-<td class="label">
-<&|/l&>Status</&>
-</td><td>
-<& /Elements/SelectBoolean, Name => "StatusOp",
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=',
- FalseVal => '!='
-&>
-</td><td>
-<& /Elements/SelectStatus, Name => "ValueOfStatus", SkipDeleted => 1 &>
-</td>
-</tr>
-<tr><td class="label">
-<select name="ActorField">
-<option value="Owner"><&|/l&>Owner</&></option>
-<option value="Creator"><&|/l&>Creator</&></option>
-<option value="LastUpdatedBy"><&|/l&>LastUpdatedBy</&></option>
-</select>
-</td><td>
-<& /Elements/SelectBoolean, Name => "ActorOp",
- TrueVal=> '=',
- FalseVal => '!='
-&>
-</td><td>
-<& /Elements/SelectOwner, Name => "ValueOfActor", ValueAttribute => 'Name' &>
-</td>
-</tr>
-<tr>
-<td class="label">
-<& SelectPersonType, Name => 'WatcherField', Default => 'Requestor' &>
-</td><td>
-<& /Elements/SelectMatch, Name => "WatcherOp" &>
-</td><td>
-<input name="ValueOfWatcher" size="20" />
-</tr>
-<tr>
-<td class="label">
-<& /Elements/SelectDateType, Name=>"DateField" &>
-</td><td>
-<& /Elements/SelectDateRelation, Name=>"DateOp" &>
-</td><td>
-<& /Elements/SelectDate, Name => "ValueOfDate", ShowTime => 0, Default => '' &>
-</td></tr>
-<tr>
-<td class="label">
-<select name="TimeField">
-<option value="TimeWorked"><&|/l&>Time Worked</&></option>
-<option value="TimeEstimated"><&|/l&>Time Estimated</&></option>
-<option value="TimeLeft"><&|/l&>Time Left</&></option>
-</select>
-</td><td>
-<& /Elements/SelectEqualityOperator, Name => "TimeOp" &>
-</td><td>
-<input name="ValueOfTime" size="5" />
-<& /Elements/SelectTimeUnits, Name =>'ValueOfTime' &>
-</td>
-</tr>
-<tr>
-<td class="label">
-<select name="PriorityField">
-<option value="Priority"><&|/l&>Priority</&></option>
-<option value="InitialPriority"><&|/l&>Initial Priority</&></option>
-<option value="FinalPriority"><&|/l&>Final Priority</&></option>
-</select>
-</td><td>
-<& /Elements/SelectEqualityOperator, Name => "PriorityOp" &>
-</td><td>
-<input name="ValueOfPriority" size="5" />
-</td>
-</tr>
-<tr>
-<td class="label">
-<& SelectLinks, Name=>"LinksField" &>
-</td><td>
-<& /Elements/SelectBoolean, Name => "LinksOp",
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=',
- FalseVal => '!=' &>
-</td><td>
-<input name="ValueOfLinks" value="" size="5" />
-</td></tr>
-<%INIT>
-my @people = ('Actor',
- 'Watcher',
- 'WatcherGroup',
- );
-</%INIT>
diff --git a/rt/html/Search/Elements/PickCFs b/rt/html/Search/Elements/PickCFs
deleted file mode 100644
index 0a50fad5c..000000000
--- a/rt/html/Search/Elements/PickCFs
+++ /dev/null
@@ -1,80 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 ( my $CustomField = $CustomFields->Next ) {
-% my $name = "'CF.{" . $CustomField->Name . "}'";
-<tr><td class="label">
-<% $CustomField->Name %>
-</td>
-<td>
- <& /Elements/SelectCustomFieldOperator, Name => $name . "Op",
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=', FalseVal => '!=' &>
-</td>
-<td>
-<& /Elements/SelectCustomFieldValue, Name => "ValueOf" . $name,
- CustomField => $CustomField,
- &>
-</td></tr>
-% }
-<%INIT>
-my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
-foreach my $id (keys %cfqueues) {
- $id =~ s/^.'*(.*).'*$/$1/;
- # 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);
- $CustomFields->LimitToQueue($queue->Id);
-}
-$CustomFields->LimitToGlobal();
-
-</%INIT>
-
-<%ARGS>
-%cfqueues => undef
-</%ARGS>
diff --git a/rt/html/Search/Elements/PickCriteria b/rt/html/Search/Elements/PickCriteria
deleted file mode 100644
index 153715c68..000000000
--- a/rt/html/Search/Elements/PickCriteria
+++ /dev/null
@@ -1,82 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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">
- <tr>
- <td>
- <table cellspacing="0" border="0">
- <tr><td class="label">
- <&|/l&>Aggregator</&>:
- </td>
- <td><& SelectAndOr, Name => "AndOr" &>
- </td></tr>
- </table>
- </td></tr>
- <tr>
- <td>
- <hr>
- </td>
- </tr>
- <tr>
- <td valign="top">
- <table cellspacing="0" border="0">
- <& PickBasics &>
- <& PickCFs, cfqueues => \%cfqueues &>
- </table>
- </td>
- </tr>
- <tr><td>&nbsp;</td></tr>
-</table>
-
-</&>
-
-<%ARGS>
-$addquery => 0
-$query => undef
-%cfqueues => undef
-</%ARGS>
diff --git a/rt/html/Search/Elements/PickRestriction b/rt/html/Search/Elements/PickRestriction
deleted file mode 100644
index ff9b86ba5..000000000
--- a/rt/html/Search/Elements/PickRestriction
+++ /dev/null
@@ -1,142 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<FORM ACTION="<%$RT::WebPath%>/Search/Listing.html" METHOD="GET">
-<INPUT TYPE=HIDDEN NAME="Bookmark" VALUE="<% $session{'tickets'}->FreezeLimits()%>">
-<& /Elements/TitleBoxStart, title => loc('Refine search')&>
-<INPUT TYPE=HIDDEN NAME="CompileRestriction" VALUE=1>
-
-<ul>
-<li><&|/l&>Owner is</&> <& /Elements/SelectBoolean, Name => "OwnerOp",
- TrueVal=> '=',
- FalseVal => '!='
-&>
-<& /Elements/SelectOwner, Name => "ValueOfOwner" &>
-
-<li>
-<& /Elements/SelectWatcherType, Name => "WatcherRole", AllowNull => 0 &>
-<&|/l&>email address</&>
-<& /Elements/SelectMatch, Name => "WatcherRoleOp" &>
-<INPUT Name="ValueOfWatcherRole" SIZE=20>
-
-<li>
-<&|/l&>Subject</&> <& /Elements/SelectMatch, Name => "SubjectOp" &>
-<INPUT Name="ValueOfSubject" SIZE=20>
-
-<li><&|/l&>Queue</&> <& /Elements/SelectBoolean, Name => "QueueOp" ,
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=',
- FalseVal => '!=' &>
-<& /Elements/SelectQueue, Name => "ValueOfQueue" &>
-
-
-<li><&|/l&>Priority</&> <& /Elements/SelectEqualityOperator, Name => "PriorityOp" &>
-
-<INPUT Name="ValueOfPriority" SIZE=5>
-
-<li>
-<& /Elements/SelectDateType, Name => 'DateType' &>
-<& /Elements/SelectDateRelation, Name=>"DateOp" &>
-<& /Elements/SelectDate, Name => "ValueOfDate", ShowTime => 0, Default => '' &>
-
-<li><&|/l&>Ticket attachment</&>
-
-<& /Elements/SelectAttachmentField, Name => 'AttachmentField' &>
-<& /Elements/SelectBoolean, Name => "AttachmentFieldOp",
- True => loc("matches"),
- False => loc("does not match"),
- TrueVal => 'LIKE',
- FalseVal => 'NOT LIKE'
-&>
-<Input Name="ValueOfAttachmentField" Size=20>
-
-<li><&|/l&>Status</&>
-<& /Elements/SelectBoolean, Name => "StatusOp",
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=',
- FalseVal => '!='
-&>
-<& /Elements/SelectStatus, Name => "ValueOfStatus", SkipDeleted => 1 &>
-
-
-% while ( my $CustomField = $CustomFields->Next ) {
-
-<li><% $CustomField->Name %>
- <& /Elements/SelectCustomFieldOperator, Name => "CustomFieldOp". $CustomField->id,
- True => loc("is"),
- False => loc("isn't"),
- TrueVal=> '=', FalseVal => '!=' &>
-
-<& /Elements/SelectCustomFieldValue, Name => "CustomField".$CustomField->id,
- CustomField => $CustomField,
- &>
-% }
-
-</UL>
-
-<& /Elements/TitleBoxEnd &>
-
-<& /Elements/TitleBoxStart, title => loc('Ordering and sorting')&>
-
-<UL>
-
-<li><&|/l&>Results per page</&> <& /Elements/SelectResultsPerPage, Name => "RowsPerPage",
- Default => $session{'tickets_rows_per_page'} || '50'
-&>
-
-<li><&|/l&>Sort results by</&> <& /Elements/SelectTicketSortBy, Name => "TicketsSortBy",
- Default => $session{'tickets_sort_by'}
-&>
-<& /Elements/SelectSortOrder, Name => 'TicketsSortOrder', Default => $session{'tickets_sort_order'} &>
-
-<li><input type="checkbox" name="HideResults" <%$ARGS{'HideResults'} && 'CHECKED'%>> <&|/l&>Don't show search results</&>
-<li><& /Elements/Refresh, Name => 'RefreshSearchInterval' , Default => $session{'tickets_refresh_interval'} &>
-
-</UL>
-
-
-</DIV>
-
-
-
-<& /Elements/TitleBoxEnd &>
-
-<& /Elements/Submit, Label => loc('Search'), Name => 'Action'&>
-
-</FORM>
-
-
- <%INIT>
-my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'});
- foreach ( $session{'tickets'}->RestrictionValues('Queue') ) {
- # Gotta load up the $queue object, since queues get stored by name now.
- my $queue = RT::Queue->new($session{'CurrentUser'});
- $queue->Load($_);
- $CustomFields->LimitToQueue($queue->Id);
- }
-
- $CustomFields->LimitToGlobal();
-
-</%INIT>
diff --git a/rt/html/Search/Elements/SearchPrivacy b/rt/html/Search/Elements/SearchPrivacy
deleted file mode 100644
index e439485cf..000000000
--- a/rt/html/Search/Elements/SearchPrivacy
+++ /dev/null
@@ -1,55 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Search/Elements/SearchesForObject b/rt/html/Search/Elements/SearchesForObject
deleted file mode 100644
index 1a7ad3241..000000000
--- a/rt/html/Search/Elements/SearchesForObject
+++ /dev/null
@@ -1,65 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Search/Elements/SelectAndOr b/rt/html/Search/Elements/SelectAndOr
deleted file mode 100644
index 0a5ccc502..000000000
--- a/rt/html/Search/Elements/SelectAndOr
+++ /dev/null
@@ -1,53 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 value="AND" /><&|/l&>AND</&></input>
-<input type="radio" class="radio" name="<%$Name%>" value="OR" /><&|/l&>OR</&></input>
-
-<%ARGS>
-$Name => "Operator"
-</%ARGS>
diff --git a/rt/html/Search/Elements/SelectChartType b/rt/html/Search/Elements/SelectChartType
deleted file mode 100644
index cbbf5e0ec..000000000
--- a/rt/html/Search/Elements/SelectChartType
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 name="<%$Name%>">
-% foreach my $option qw(bar pie) {
-<option value="<%$option%>" <% $option eq $Default ? 'SELECTED' : '' %>><%loc($option)%></option>
-% }
-</select>
diff --git a/rt/html/Search/Elements/SelectGroup b/rt/html/Search/Elements/SelectGroup
deleted file mode 100644
index 60c0bbbbd..000000000
--- a/rt/html/Search/Elements/SelectGroup
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-% }
-%while (my $group = $groups->Next) {
-<option value="<%$group->id%>" <%$group->id eq $Default && "SELECTED"%>><%$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/html/Search/Elements/SelectGroupBy b/rt/html/Search/Elements/SelectGroupBy
deleted file mode 100644
index e7ab934f5..000000000
--- a/rt/html/Search/Elements/SelectGroupBy
+++ /dev/null
@@ -1,63 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 name="<% $Name %>">
-% while (@options) {
-% my ($text, $value) = (shift @options, shift @options);
-<option value="<% $value %>" <% $value eq $Default ? 'selected' : '' %>><% 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/html/Search/Elements/SelectLinks b/rt/html/Search/Elements/SelectLinks
deleted file mode 100644
index 54505a433..000000000
--- a/rt/html/Search/Elements/SelectLinks
+++ /dev/null
@@ -1,66 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="<%$_%>"><&|/l&><%$_%></&></option>
-% }
-</select>
-<%ARGS>
-$Name => 'LinksField'
-</%ARGS>
-
-<%INIT>
-my @fields = ('HasMember',
- 'MemberOf',
- 'DependsOn',
- 'DependedOnBy',
- 'RefersTo',
- 'ReferredToBy',
- 'LinkedTo',
- );
-</%INIT>
diff --git a/rt/html/Search/Elements/SelectPersonType b/rt/html/Search/Elements/SelectPersonType
deleted file mode 100644
index e2a9a21d4..000000000
--- a/rt/html/Search/Elements/SelectPersonType
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) {
-% if ($Suffix) {
-<option value="<% $option %><% $Suffix %>" <%$option eq $Default && "SELECTED"%> ><%loc($option)%></option>
-% next;
-% }
-% foreach my $subtype (@subtypes) {
-<option value="<%"$option.$subtype"%>" <%$option eq $Default && $subtype eq 'EmailAddress' && "SELECTED"%> ><% 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/html/Search/Elements/SelectSearchObject b/rt/html/Search/Elements/SelectSearchObject
deleted file mode 100644
index 81e22e173..000000000
--- a/rt/html/Search/Elements/SelectSearchObject
+++ /dev/null
@@ -1,60 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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
-</%args>
-<select name="<%$Name%>">
-% foreach my $object (@Objects) {
-% if (ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id) {
-<option value="<%ref($object)%>-<%$object->id%>"><&|/l&>My saved searches</&></option>
-% } else {
-<option value="<%ref($object)%>-<%$object->id%>"><&|/l, $object->Name&>[_1]'s saved searches</&></option>
-% }
-% }
-</select>
diff --git a/rt/html/Search/Elements/SelectSearchesForObjects b/rt/html/Search/Elements/SelectSearchesForObjects
deleted file mode 100644
index b2a83cfd8..000000000
--- a/rt/html/Search/Elements/SelectSearchesForObjects
+++ /dev/null
@@ -1,69 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 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/html/Search/Elements/TicketHeader b/rt/html/Search/Elements/TicketHeader
deleted file mode 100644
index ed2f60e4e..000000000
--- a/rt/html/Search/Elements/TicketHeader
+++ /dev/null
@@ -1,40 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<TR>
-<& TicketHeaderCell , Attribute => 'id', Header => '#'&>
-<& TicketHeaderCell , Attribute => 'Subject'&>
-<& TicketHeaderCell , Attribute => 'Status'&>
-<& TicketHeaderCell , Attribute => 'Queue'&>
-<& TicketHeaderCell , Attribute => 'Owner'&>
-<& TicketHeaderCell , Attribute => 'Priority'&>
-</TR>
-<TR>
-<TH class="ticketheader">&nbsp;</TH>
-<& TicketHeaderCell , Attribute => 'Requestor(s)'&>
-<& TicketHeaderCell , Attribute => 'Created'&>
-<& TicketHeaderCell , Attribute => 'Told', Header => 'Last Contact'&>
-<& TicketHeaderCell , Attribute => 'LastUpdated', Header => 'Last Updated'&>
-<& TicketHeaderCell , Attribute => 'TimeLeft', Header => 'Left'&>
-</TR>
-%# loc('Last Notified');
diff --git a/rt/html/Search/Elements/TicketHeaderCell b/rt/html/Search/Elements/TicketHeaderCell
deleted file mode 100644
index 5def9ea37..000000000
--- a/rt/html/Search/Elements/TicketHeaderCell
+++ /dev/null
@@ -1,55 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<%INIT>
-my ($order,$curorder);
- $Attribute =~ s/Obj->(Name|AsString|AgeAsString)//g;
- if ($session{'tickets_sort_order'} =~ /^asc$/i) {
- $order = 'DESC';
- $curorder = 'ASC';
- } else {
- $order = 'ASC';
- $curorder = 'DESC';
- }
-$Header = $Attribute unless ($Header);
-
-</%INIT>
-<th class="ticketheader">
-% if (grep (/^$Attribute$/i, $session{'tickets'}->SortFields)) {
-<A
-% if ($Attribute eq $session{'tickets_sort_by'}) {
-class="currenttab"
-HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$Attribute%>&TicketsSortOrder=<%$order%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>">
-% } else {
-HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$Attribute%>&TicketsSortOrder=<%$curorder%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>">
-% }
-<% loc($Header) %>
-</A>
-% } else {
-<% loc($Header) %>
-% }
-</th>
-<%ARGS>
-$Header => undef
-$Attribute => undef
-</%ARGS>
diff --git a/rt/html/Search/Elements/TicketRow b/rt/html/Search/Elements/TicketRow
deleted file mode 100644
index 5d1ad209a..000000000
--- a/rt/html/Search/Elements/TicketRow
+++ /dev/null
@@ -1,55 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<SPAN class="search">
-<TR
-% if ($i%2) {
-CLASS="oddline"
-% } else {
-CLASS="evenline"
-% }
->
-<TD ROWSPAN="2"><B><A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->id%></a></B></TD>
-<TD><B><A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->Subject%></a></B></TD>
-<TD><%loc($Ticket->Status)%></TD>
-<TD><%$Ticket->QueueObj->Name%></TD>
-<TD><%$Ticket->Owner == $RT::Nobody->Id ? loc('Nobody') : $Ticket->OwnerObj->Name%></TD>
-<TD><%$Ticket->Priority%></TD>
-</TR>
-<TR
-% if ($i%2) {
-CLASS="oddline"
-% } else {
-CLASS="evenline"
-% }
-><TD><small><%$Ticket->Requestors->MemberEmailAddressesAsString%></small></TD>
-<TD><SMALL><%$Ticket->CreatedObj->AgeAsString || '-'%></SMALL></TD>
-<TD><SMALL><%$Ticket->ToldObj->AgeAsString || '-'%></SMALL></TD>
-<TD><SMALL><%$Ticket->LastUpdatedObj->AgeAsString || '-'%></SMALL></TD>
-<TD><SMALL><%$Ticket->TimeLeft%></SMALL></TD>
-</TR>
-</SPAN>
-<%ARGS>
-$Ticket => undef
-$i => undef
-</%ARGS>
diff --git a/rt/html/Search/Listing.html b/rt/html/Search/Listing.html
deleted file mode 100644
index 68b1fd75c..000000000
--- a/rt/html/Search/Listing.html
+++ /dev/null
@@ -1,113 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<& /Elements/Header, Title => $title, Refresh => $session{'tickets_refresh_interval'} &>
-<& /Ticket/Elements/Tabs,
- current_tab => 'Search/Listing.html',
- Title => $title &>
-
-%if ($ticketcount && ! $ARGS{'HideResults'}) {
-<TABLE WIDTH=100% border=0 cellpadding=2 CELLSPACING=0>
-<& Elements/TicketHeader, %ARGS &>
-% my $i;
-%while (my $Ticket = $session{'tickets'}->Next) {
-% $i++;
-<& Elements/TicketRow, Ticket => $Ticket, i=> $i, %ARGS &>
-%}
-</TABLE>
-<div align=center>
-<font size=2>
-<a href="<%$RT::WebPath%>/Search/Listing.html?GotoPage=1"><&|/l&>First page</&></a>
-&nbsp;&nbsp;
-% if ( $session{'tickets'}->FirstRow >= $session{'tickets_rows_per_page'}-1 ) {
-<a href="<%$RT::WebPath%>/Search/Listing.html?GotoPage=Prev">&lt;<&|/l&>Previous page</&></a>
-&nbsp;&nbsp;
-% }
-% if ( $session{'tickets'}->FirstRow + $session{'tickets_rows_per_page'} < $ticketcount ) {
-<a href="<%$RT::WebPath%>/Search/Listing.html?GotoPage=Next"><&|/l&>Next page</&>&gt;</a>
-% }
-%#&nbsp;&nbsp;<form method=get action="<%$RT::WebPath%>/Search/Listing.html"><&|/l&>Goto page</&> <input name=GotoPage size=2></form>
-</font>
-</div>
-<!--<div align=right>-->
-<table width="100%" border=0 cellpadding=3 CELLSPACING=1>
-<tr>
-<td align=left>
-(<&|/l, ($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() ) &>[_1] - [_2] shown</&>)
-</td>
-<td align=right>
-
-<a href="<%$RT::WebPath%>/Search/Bulk.html"><&|/l&>Update all these tickets at once</&></a>
-<!--</div>-->
-</td>
-</tr>
-</table>
-
-% }
-<TABLE WIDTH="100%">
-<TR>
-<TD VALIGN="TOP">
-<& /Elements/TitleBoxStart, title => loc('Current search criteria')&>
-
-%my %restrictions=$session{'tickets'}->DescribeRestrictions();
-%foreach my $row (keys %restrictions){
-<%$restrictions{"$row"}%> <A HREF="<% $RT::WebPath %>/Search/Listing.html?DeleteRestriction=<%$row%>">[<&|/l&>delete</&>]</a><br>
-%}
-<BR>
-<BR>
-<A HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|nu%>&TicketsSortBy=<%$session{'tickets_sort_by'}%>&TicketsSortOrder=<%$session{'tickets_sort_order'}%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>"><&|/l&>Bookmarkable URL for this search</&></a>
-<& /Elements/TitleBoxEnd&>
-</TD>
-<TD>
-
-<& Elements/PickRestriction, %ARGS &>
-
-</TD>
-</TR>
-</TABLE>
-
-<%INIT>
-
-my ($title, $ticketcount);
-$session{'i'}++;
-if ($session{'tickets'}) {
- if ($ARGS{'DeleteRestriction'}) {
- $session{'tickets'}->DeleteRestriction($ARGS{'DeleteRestriction'});
- }
- if ( ($ARGS{'ClearRestrictions'}) || ($ARGS{'NewSearch'}) ) {
- $session{'tickets'}->ClearRestrictions;
- $session{'tickets'}->CleanSlate;
- }
-}
- ProcessSearchQuery(ARGS=>\%ARGS);
- $session{'tickets'}->RedoSearch();
- if ( $session{'tickets'}->DescribeRestrictions()) {
- $ticketcount = $session{tickets}->CountAll();
- $title = loc('Found [quant,_1,ticket]', $ticketcount);
- } else {
- $title = loc("Find tickets");
- }
-</%INIT>
-<%CLEANUP>
-$session{'tickets'}->PrepForSerialization();
-</%CLEANUP>
diff --git a/rt/html/Search/Results.html b/rt/html/Search/Results.html
deleted file mode 100755
index e2c6be73f..000000000
--- a/rt/html/Search/Results.html
+++ /dev/null
@@ -1,177 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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'},
- RSSAutoDiscovery => $RSSFeedURL &>
-<& /Ticket/Elements/Tabs,
- current_tab => "Search/Results.html".$QueryString,
- Title => $title,
- Format => $Format,
- Query => $Query,
- Rows => $Rows,
- OrderBy => $OrderBy,
- Order => $Order &>
-<& /Elements/TicketList,
- Query => $Query,
- AllowSorting => 1,
- OrderBy => $OrderBy,
- Order => $Order,
- Rows => $Rows,
- Page => $Page,
- Format => $Format,
- BaseURL => $RT::WebPath."/Search/Results.html?"
-
- &>
-% my %hiddens = (Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order, HideResults => $HideResults, Page => $Page );
-<div align="right">
-<form method="get" action="<%$RT::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'} &>
-<input type="submit" class="button" value="<&|/l&>Go!</&>" />
-</form>
-</div>
-<div align="right">
-<a href="<%$RT::WebPath%>/Search/Bulk.html<%$QueryString%>"><&|/l&>Update multiple tickets</&></a><br />
-<a href="<%$RT::WebPath%>/Search/Results.html<%$QueryString%>"><&|/l&>Bookmarkable link</&></a><br />
-<a href="<%$RT::WebPath%>/Search/Results.tsv<%$QueryString%>"><&|/l&>spreadsheet</&></a> |
-<a href="<%$RSSFeedURL%>"><&|/l&>RSS</&></a> |
-<a href="<%$RT::WebPath%>/Tools/Offline.html<%$ShortQueryString%>"><&|/l&>Work offline</&></a><br />
-<form method="get" action="<%$RT::WebPath%>/Search/Chart.html"><&|/l&>chart</&>
-% %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('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query) &>grouped by [_1]</&>
-<&|/l, $m->scomp('Elements/SelectChartType', Name => 'ChartStyle') &>style: [_1]</&>
-<input type="submit" class="button" value="<%loc('Go!')%>" />
-</form>
-<& /Elements/Callback, _CallbackName => 'SearchActions', QueryString => $QueryString&>
-</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'};
-$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 ( $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 $RSSFeedURL = "$RT::WebPath/Search/Results.rdf$ShortQueryString";
-
-if ($ARGS{'TicketsRefreshInterval'}) {
- $session{'tickets_refresh_interval'} = $ARGS{'TicketsRefreshInterval'};
-}
-</%INIT>
-<%CLEANUP>
-$session{'tickets'}->PrepForSerialization();
-</%CLEANUP>
-<%ARGS>
-$Query => undef
-$Format => undef
-$HideResults => 0
-$Rows => undef
-$Page => 1
-$OrderBy => undef
-$Order => undef
-</%ARGS>
diff --git a/rt/html/Search/Results.rdf b/rt/html/Search/Results.rdf
deleted file mode 100644
index 7bcbe9283..000000000
--- a/rt/html/Search/Results.rdf
+++ /dev/null
@@ -1,87 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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'});
-$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::rtname: Syndicated Search",
- link => $RT::WebURL,
- description => "",
- dc => {
- },
- syn => {
- updatePeriod => "hourly",
- updateFrequency => "1",
- updateBase => "1901-01-01T00:00+00:00",
- },
- );
-
-
- while ( my $Ticket = $Tickets->Next()) {
- my $row;
- $rss->add_item(
- title => $Ticket->Subject,
- link => $RT::WebURL."/Ticket/Display.html?id=".$Ticket->id,
- description => $Ticket->Transactions->First->Content,
- dc => {
- subject => ($Ticket->Subject || loc('No subject')),
- creator => $Ticket->CreatorObj->RealName . "<".$Ticket->CreatorObj->EmailAddress.">",
- },
- );
- }
-$m->out($rss->as_string);
-$m->abort();
-</%INIT>
diff --git a/rt/html/SelfService/Attachment/dhandler b/rt/html/SelfService/Attachment/dhandler
deleted file mode 100644
index 592062b54..000000000
--- a/rt/html/SelfService/Attachment/dhandler
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/SelfService/Closed.html b/rt/html/SelfService/Closed.html
deleted file mode 100644
index 1f53655ee..000000000
--- a/rt/html/SelfService/Closed.html
+++ /dev/null
@@ -1,56 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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, status => ['rejected', 'resolved'],
- friendly_status => loc('closed'),
- BaseURL => $RT::WebPath . "/SelfService/Closed.html?",
- Page => $Page &>
-<%ARGS>
-$Page => 1
-</%ARGS>
diff --git a/rt/html/SelfService/Create.html b/rt/html/SelfService/Create.html
deleted file mode 100644
index 9a64b5fd9..000000000
--- a/rt/html/SelfService/Create.html
+++ /dev/null
@@ -1,177 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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="<% $RT::WebPath %>/SelfService/Create.html" method="post" enctype="multipart/form-data" name="TicketCreate">
-<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>
-<tr>
-<td class="label"><&|/l&>Requestors</&>:</td>
-<td class="value">
-<input name="Requestors" value="<% $ARGS{'Requestors'} || $session{CurrentUser}->EmailAddress %>" size="20" />
-</td>
-</tr>
-<tr>
-<td class="label"><&|/l&>Cc</&>:</td>
-<td class="value">
-<input name="Cc" size="20" value="<% $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, QueueObj => $queue_obj &>
- </td>
-</tr>
-<tr>
-<td class="label"><&|/l&>Attach file</&>:</td>
-<td class="value">
-<input name="Attach" type="file" />
-</td>
-</tr>
-<tr>
-<td colspan="2">
-<&|/l&>Describe the issue below</&>:<br />
-% if (exists $ARGS{Content}) {
-<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &>
-% } else {
-<& /Elements/MessageBox &>
-% }
-</td>
-</tr>
-</table>
-<& /Elements/Submit, Label => loc("Create ticket")&>
-
-
-</form>
-<%args>
-$Queue => undef
-</%args>
-<%init>
-my $queue_obj = RT::Queue->new($session{'CurrentUser'});
-$queue_obj->Load($Queue) || Abort(loc("Queue could not be loaded."));
-$queue_obj->Disabled && Abort(loc("Cannot create tickets in a disabled queue."));
-
-my ($checks_failure, $skip_create, @results) = (0, 0, ());
-$skip_create = 1 unless ($ARGS{'id'}||'') eq 'new';
-
-$m->comp('/Elements/Callback',
- QueueObj => $queue_obj, ARGSRef => \%ARGS,
- skip_create => \$skip_create, checks_failure => \$checks_failure,
- results => \@results
-);
-
-$skip_create = 1 if exists $ARGS{'AddMoreAttach'};
-
-# 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?
- $session{'Attachments'} = {} unless defined $session{'Attachments'};
-
- my $subject = "$ARGS{'Attach'}";
-
- # strip leading directories
- $subject =~ s#^.*[\\/]##;
-
- my $attachment = MakeMIMEEntity(
- Subject => $subject,
- Body => "",
- AttachmentFieldName => 'Attach'
- );
-
- $session{'Attachments'} = { %{$session{'Attachments'} || {}},
- $ARGS{'Attach'} => $attachment };
-}
-
-unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
- delete $session{'Attachments'};
-}
-
-my $CFs = $queue_obj->TicketCustomFields;
-my $ValidCFs = $m->comp(
- '/Elements/ValidateCustomFields',
- CustomFields => $CFs,
- ARGSRef => \%ARGS
-);
-unless ( $ValidCFs ) {
- $checks_failure = 1;
- while ( my $CF = $CFs->Next ) {
- my $msg = $m->notes('InvalidField-' . $CF->Id) or next;
- push @results, $CF->Name . ': ' . $msg
- if ($ARGS{'id'}||'') eq 'new';
- }
-}
-
-if ( !$checks_failure && !$skip_create ) {
- $m->comp('Display.html', %ARGS);
- $RT::Logger->crit("After display call; error is $@");
- $m->abort();
-}
-</%init>
diff --git a/rt/html/SelfService/CreateTicketInQueue.html b/rt/html/SelfService/CreateTicketInQueue.html
deleted file mode 100755
index 3162f20e3..000000000
--- a/rt/html/SelfService/CreateTicketInQueue.html
+++ /dev/null
@@ -1,63 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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/html/SelfService/Display.html b/rt/html/SelfService/Display.html
deleted file mode 100644
index 3c9ba85bc..000000000
--- a/rt/html/SelfService/Display.html
+++ /dev/null
@@ -1,235 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<& /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'},
- AttachPath => "Attachment",
- Attachments => $attachments,
- UpdatePath => "Update.html"
-&>
-%#!!pape: selfservice_find_attachments.patch }}
-
-
-
-<%INIT>
-
-my ( $field, @results );
-
-# {{{ 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 $subject = "$ARGS{'Attach'}";
-
- # since CGI.pm deutf8izes the magic field, we need to add it back.
- Encode::_utf8_on($subject);
-
- # strip leading directories
- $subject =~ s#^.*[\\/]##;
-
- my $attachment = MakeMIMEEntity(
- Subject => $subject,
- Body => "",
- AttachmentFieldName => 'Attach'
- );
-
- $session{'Attachments'} =
- { %{ $session{'Attachments'} || {} },
- $ARGS{'Attach'} => $attachment };
-}
-
-if ( $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 );
-
- #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";
- }
-
- # }}}
-
- if (
- $session{'Attachments'}
- || ( defined $ARGS{'UpdateContent'}
- && $ARGS{'UpdateContent'} ne ''
- && $ARGS{'UpdateContent'} ne "-- \n"
- . $session{'CurrentUser'}->UserObj->Signature )
- )
- {
- $ARGS{UpdateAttachments} = $session{'Attachments'};
- }
- ProcessUpdateMessage(
- ARGSRef => \%ARGS,
- Actions => \@results,
- 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);
-
- # }}}
-
- }
-
- # 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") );
- $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.
- $session{"Actions"} = \@results;
- RT::Interface::Web::Redirect($RT::WebURL."SelfService/Display.html?id="
- . $Ticket->id);
- } else {
- @results = @{ delete $session{"Actions"} || [] };
- }
-
- my $Transactions = $Ticket->Transactions;
-
- my $attachments =
- $m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket );
-
-</%INIT>
-
-
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/SelfService/Elements/GotoTicket b/rt/html/SelfService/Elements/GotoTicket
deleted file mode 100644
index f2ad07a51..000000000
--- a/rt/html/SelfService/Elements/GotoTicket
+++ /dev/null
@@ -1,48 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebPath%>/SelfService/Display.html"><input type="submit" class="button" value="<&|/l&>Goto ticket</&>" />&nbsp;<input size="4" name="id" /></form>
diff --git a/rt/html/SelfService/Elements/Header b/rt/html/SelfService/Elements/Header
deleted file mode 100644
index f26d19163..000000000
--- a/rt/html/SelfService/Elements/Header
+++ /dev/null
@@ -1,49 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/SelfService/Elements/MyRequests b/rt/html/SelfService/Elements/MyRequests
deleted file mode 100644
index 21f8ada0c..000000000
--- a/rt/html/SelfService/Elements/MyRequests
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/TicketList, Title => $title,
- Format => $Format,
- Query => $Query,
- Order => $Order,
- OrderBy => $OrderBy,
- BaseURL => $BaseURL,
- 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 $Order = "ASC";
-my $OrderBy = "Created";
-my $Format = qq{
- '<B><A HREF="$RT::WebPath/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
- '<B><A HREF="$RT::WebPath/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
- Status,
- Requestors,
- OwnerName};
-</%INIT>
-<%ARGS>
-$friendly_status => loc('open')
-$title => loc("My [_1] tickets", $friendly_status)
-@roles => ('Watcher')
-@status => ('open', 'new', 'stalled')
-$BaseURL => undef
-$Page => 1
-</%ARGS>
diff --git a/rt/html/SelfService/Elements/Tabs b/rt/html/SelfService/Elements/Tabs
deleted file mode 100644
index adc019f5b..000000000
--- a/rt/html/SelfService/Elements/Tabs
+++ /dev/null
@@ -1,113 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Callback, tabs => $tabs, %ARGS &>
-<& /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/html/SelfService/Error.html b/rt/html/SelfService/Error.html
deleted file mode 100644
index 17fa7934e..000000000
--- a/rt/html/SelfService/Error.html
+++ /dev/null
@@ -1,70 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-$RT::Logger->error("WebRT: $Why ($Details)");
-</%INIT>
diff --git a/rt/html/SelfService/Prefs.html b/rt/html/SelfService/Prefs.html
deleted file mode 100644
index 304ed5b78..000000000
--- a/rt/html/SelfService/Prefs.html
+++ /dev/null
@@ -1,92 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::WebExternalAuth and !$RT::WebFallbackToInternalAuth) {
-<&| /Widgets/TitleBox, title => loc('Change password') &>
-<&|/l&>New password</&>: <input type="password" name="NewPass1" size="16" />
-<&|/l&>Confirm</&>: <input type="password" name="NewPass2" size="16" />
-</&>
-<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/html/SelfService/Update.html b/rt/html/SelfService/Update.html
deleted file mode 100644
index 9cdb4ed36..000000000
--- a/rt/html/SelfService/Update.html
+++ /dev/null
@@ -1,129 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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)
-&>
-
-
-<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($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);
-
-my $title = loc( "Update ticket #[_1]", $Ticket->id );
-
-$DefaultStatus = $Ticket->Status() unless ($DefaultStatus);
-
-
-Abort( loc("No permission to view update ticket") )
- unless ( $Ticket->CurrentUserHasRight('ReplyToTicket')
- or $Ticket->CurrentUserHasRight('ModifyTicket') );
-
-</%INIT>
-
-<%ARGS>
-$id => undef
-$Action => undef
-$DefaultStatus => undef
-</%ARGS>
diff --git a/rt/html/SelfService/index.html b/rt/html/SelfService/index.html
deleted file mode 100644
index 517cb18d1..000000000
--- a/rt/html/SelfService/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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, BaseURL => $RT::WebPath . "/SelfService/?",
- Page => $Page &>
-<%ARGS>
-$Page => 1
-</%ARGS>
diff --git a/rt/html/Ticket/Attachment/dhandler b/rt/html/Ticket/Attachment/dhandler
deleted file mode 100644
index 9d3c7b4f8..000000000
--- a/rt/html/Ticket/Attachment/dhandler
+++ /dev/null
@@ -1,94 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::TrustHTMLAttachments) {
- $content_type = 'text/plain' if ($content_type =~ /^text\/html/i);
- }
-
- if (my $enc = $AttachmentObj->OriginalEncoding) {
- # normalize Encode.pm convention with IANA ones
- $enc = 'big5' if $enc eq 'big5-eten';
- $enc = 'utf-8' if $enc eq 'utf8';
- $content_type .= ";charset=$enc";
- }
-
- # unless ($RT::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/html/Ticket/Create.html b/rt/html/Ticket/Create.html
deleted file mode 100644
index c35ed9122..000000000
--- a/rt/html/Ticket/Create.html
+++ /dev/null
@@ -1,406 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 new ticket"),
- onload => "hide(document.getElementById('Ticket-Create-details'));" &>
-<& /Elements/Tabs,
- current_toptab => "Ticket/Create.html",
- Title => loc("Create a new ticket"),
- actions => $actions &>
-<& /Elements/ListActions, actions => \@results &>
-<form action="<%$RT::WebPath%>/Ticket/Create.html" method="post" enctype="multipart/form-data" name="TicketCreate">
-<input type="hidden" class="hidden" name="id" value="new" />
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &>
-
-<div id="Ticket-Create-basics">
-<a name="basics"></a>
-<&| /Widgets/TitleBox, title => loc("Create a new ticket") &>
-<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 &>
-</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>
-</tr>
-<tr>
-<td class="label">
-<&|/l&>Requestors</&>:
-</td>
-<td class="value" colspan="5">
-<input name="Requestors" value="<% ($ARGS{Requestors}) || $session{CurrentUser}->EmailAddress %>" size="40" />
-</td>
-</tr>
-<tr>
-<td class="label">
-<&|/l&>Cc</&>:
-</td>
-<td class="value" colspan="5">
-<input name="Cc" size="40" value="<% $ARGS{Cc} %>" /><br />
-<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="5">
-<input name="AdminCc" size="40" value="<% $ARGS{AdminCc} %>" /><br />
-<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, QueueObj => $QueueObj &>
-</td>
-</tr>
-% if ($TxnCFs->Count) {
-% 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>
-% }
-% }
-<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>
-<&|/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>
-<tr>
-<td colspan="6">
-<&|/l&>Describe the issue below</&>:<br />
-<& /Elements/Callback, _CallbackName => 'BeforeMessageBox', QueueObj => $QueueObj, %ARGS &>
-% if (exists $ARGS{Content}) {
-<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &>
-% } else {
-<& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &>
-%}
-
-<br />
-</td>
-</tr>
-<tr>
-<td align="right" colspan="2">
-</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">
-
- <&| /Widgets/TitleBox, title => loc('The Basics'),
- title_class=> 'inverse',
- color => "#993333" &>
-<table border="0">
-<tr><td align="right"><&|/l&>Priority</&>:</td><td><input size="3" name="InitialPriority" value="<% $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->InitialPriority %>" /></td></tr>
-<tr><td align="right"><&|/l&>Final Priority</&>:</td><td><input size="3" name="FinalPriority" value="<% $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->FinalPriority %>" /></td></tr>
-<tr><td align="right"><&|/l&>Time Estimated</&>:</td>
-<td>
-<input size="3" name="TimeEstimated" value="<%$ARGS{TimeEstimated}%>" />
-<& /Elements/SelectTimeUnits, Name =>'TimeEstimated' &>
-
-</td></tr>
-<tr><td align="right"><&|/l&>Time Worked</&>:</td>
-<td>
-<input size="3" name="TimeWorked" value="<%$ARGS{TimeWorked}%>" />
-<& /Elements/SelectTimeUnits, Name =>'TimeWorked' &>
-
-</td></tr>
-<tr>
-<td align="right"><&|/l&>Time Left</&>:</td>
-<td><input size="3" name="TimeLeft" value="<%$ARGS{TimeLeft}%>" />
-<& /Elements/SelectTimeUnits, Name =>'TimeLeft' &>
-</td></tr>
-</table>
-</&>
-<br />
-<&|/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>
-</&>
-<br />
-</td>
-
-<td valign="top">
-<&| /Widgets/TitleBox, title => loc('Links'), title_class=> 'inverse' &>
-
-<em><&|/l&>(Enter ticket ids or URLs, separated with spaces)</&></em>
-<table border="0">
-<tr><td align="right"><&|/l&>Depends on</&></td><td><input size="10" name="new-DependsOn" value="<% $ARGS{'new-DependsOn'} %>" /></td></tr>
-<tr><td align="right"><&|/l&>Depended on by</&></td><td><input size="10" name="DependsOn-new" value="<% $ARGS{'DependsOn-new'} %>" /></td></tr>
-<tr><td align="right"><&|/l&>Parents</&></td><td><input size="10" name="new-MemberOf" value="<% $ARGS{'new-MemberOf'} %>" /></td></tr>
-<tr><td align="right"><&|/l&>Children</&></td><td><input size="10" name="MemberOf-new" value="<% $ARGS{'MemberOf-new'} %>" /></td></tr>
-<tr><td align="right"><&|/l&>Refers to</&></td><td><input size="10" name="new-RefersTo" value="<% $ARGS{'new-RefersTo'} %>" /></td></tr>
-<tr><td align="right"><&|/l&>Referred to by</&></td><td><input size="10" name="RefersTo-new" value="<% $ARGS{'RefersTo-new'} %>" /></td></tr>
-
-
-</table>
-</&>
-<br />
-
-</td>
-</tr>
-</table>
-<& /Elements/Submit, Label => loc("Create") &>
-</div>
-</form>
-
-<%INIT>
-
-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 Starts Started Due Resolved/;
-
- my $members = $CloneTicketObj->Members;
- my ( @members, @members_of, @refers, @refers_by, @depends, @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 $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;
-
- 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;
-
-
-
- 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 $QueueObj = new RT::Queue($session{'CurrentUser'});
-$QueueObj->Load($Queue) || Abort(loc("Queue could not be loaded."));
-my $CFs = $QueueObj->TicketCustomFields();
-my $TxnCFs = $QueueObj->TicketTransactionCustomFields();
-
-my $ValidCFs = $m->comp(
- '/Elements/ValidateCustomFields',
- CustomFields => $CFs,
- ARGSRef => \%ARGS
-);
-
-# if no due date has been set explicitly, then use the
-# queue's default if it exists
-if ($QueueObj->DefaultDueIn && !$ARGS{'Due'}) {
- my $default_due = RT::Date->new($session{'CurrentUser'});
- $default_due->SetToNow();
- $default_due->AddDays($QueueObj->DefaultDueIn);
- $ARGS{'Due'} = $default_due->ISO();
-}
-
-# {{{ 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?
- $session{'Attachments'} = {} unless defined $session{'Attachments'};
-
- my $subject = "$ARGS{'Attach'}";
-
- # strip leading directories
- $subject =~ s#^.*[\\/]##;
-
- my $attachment = MakeMIMEEntity(
- Subject => $subject,
- Body => "",
- AttachmentFieldName => 'Attach'
- );
-
- $session{'Attachments'} = { %{$session{'Attachments'} || {}},
- $ARGS{'Attach'} => $attachment };
-}
-# }}}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
- delete $session{'Attachments'};
-}
-
-
-# }}}
-
-if ((!exists $ARGS{'AddMoreAttach'}) and ($ARGS{'id'} eq 'new')) { # new ticket?
- if ($ValidCFs) {
- $m->comp('Display.html', %ARGS);
- $RT::Logger->crit("After display call; error is $@");
- $m->abort();
- }
- else {
- # 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
-$Queue => undef
-$CloneTicket => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Display.html b/rt/html/Ticket/Display.html
deleted file mode 100644
index 7bdd57f93..000000000
--- a/rt/html/Ticket/Display.html
+++ /dev/null
@@ -1,184 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-<& /Ticket/Elements/Tabs,
- Ticket => $TicketObj,
- current_tab => 'Ticket/Display.html?id='.$TicketObj->id,
- Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &>
-
-<& /Elements/ListActions, actions => \@Actions &>
-<& /Elements/Callback, _CallbackName => 'BeforeShowSummary', Ticket => $TicketObj, %ARGS &>
-<&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
-<& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &>
-</&>
-
-<br />
-
-<& /Elements/Callback, _CallbackName => 'BeforeShowHistory', Ticket => $TicketObj, %ARGS &>
-
-<& /Ticket/Elements/ShowHistory ,
- Ticket => $TicketObj,
- Tickets => $Tickets,
- Collapsed => $ARGS{'Collapsed'},
- ShowHeaders => $ARGS{'ShowHeaders'},
- Attachments => $attachments,
- AttachmentContent => $attachment_content
-
- &>
-
-<& /Elements/Callback, _CallbackName => 'AfterShowHistory', Ticket => $TicketObj,
-current_tab => 'Ticket/Display.html?id=' . $TicketObj->id, %ARGS &>
-
-<%ARGS>
-$id => undef
-$Create => undef
-$ShowHeaders => 0
-$Collapsed => undef
-$TicketObj => undef
-</%ARGS>
-
-<%INIT>
-
-$m->comp('/Elements/Callback', _CallbackName => 'Initial', TicketObj => $TicketObj, ARGSRef => \%ARGS);
-
-my ($linkid, $message, $tid, @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'});
- unless ($Queue->Load($ARGS{'Queue'})) {
- Abort('Queue not found');
- }
-
- unless ($Queue->CurrentUserHasRight('CreateTicket')) {
- Abort('You have no permission to create tickets in that queue.');
- }
- ($TicketObj, @Actions) =
- CreateTicket(Attachments => $session{'Attachments'}, %ARGS);
- delete $session{'Attachments'};
- unless ($TicketObj->CurrentUserHasRight('ShowTicket')) {
- Abort("No permission to view newly created ticket #".$TicketObj->id.".");
- }
- # }}}
-} else {
- if (!$TicketObj) {
-
- $TicketObj = RT::Ticket->new($session{'CurrentUser'});
-
- $TicketObj = LoadTicket($ARGS{'id'});
- unless ($TicketObj->CurrentUserHasRight('ShowTicket')) {
- Abort("No permission to view ticket");
- }
- }
-
- $m->comp('/Elements/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);
- }
- }
-
- $ARGS{'UpdateContent'} =~ s/\r\n/\n/g if defined $ARGS{'UpdateContent'};
- if ( ( defined $ARGS{'UpdateContent'}
- && $ARGS{'UpdateContent'} ne ''
- && $ARGS{'UpdateContent'} ne "-- \n"
- . $session{'CurrentUser'}->UserObj->Signature ) || $session{'Attachments'} )
- {
- $ARGS{UpdateAttachments} = $session{'Attachments'};
- ProcessUpdateMessage(
- ARGSRef => \%ARGS,
- Actions => \@Actions,
- TicketObj => $TicketObj,
- );
- delete $session{'Attachments'};
- } elsif ( $ARGS{'UpdateTimeWorked'} ) {
- # Add UpdateTimeWorked to TimeWorked (processed below with ProcessTicketBasics)
- $ARGS{'TimeWorked'} = $TicketObj->TimeWorked + $ARGS{'UpdateTimeWorked'};
- }
- #Process status updates
- my @PeopleActions = ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj=>$TicketObj);
- my @BasicActions = ProcessTicketBasics(ARGSRef => \%ARGS, TicketObj=>$TicketObj);
- my @results = ProcessTicketLinks( TicketObj => $TicketObj, ARGSRef => \%ARGS);
-
- push (@Actions, @PeopleActions, @BasicActions, @results);
-}
-
-$m->comp('/Elements/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.
- $session{"Actions"} = \@Actions;
- RT::Interface::Web::Redirect($RT::WebURL."Ticket/Display.html?id=".$TicketObj->id);
-} else {
- @Actions = @{ delete $session{"Actions"} || [] };
-}
-
-my $attachments = $m->comp('Elements/FindAttachments', Ticket => $TicketObj, Tickets => $Tickets);
-my $attachment_content = $m->comp('Elements/LoadTextAttachments', Ticket => $TicketObj);
-
-</%INIT>
diff --git a/rt/html/Ticket/Elements/AddWatchers b/rt/html/Ticket/Elements/AddWatchers
deleted file mode 100644
index 7440069aa..000000000
--- a/rt/html/Ticket/Elements/AddWatchers
+++ /dev/null
@@ -1,123 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 />
-<%$msg%><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><%$u->Name%> (<%$u->RealName%>)</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>
-<tr><td>
-<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail1" &>
-</td><td>
-<input name="WatcherAddressEmail1" size="15" />
-</td></tr>
-<tr><td>
-<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail2" &>
-</td><td>
-<input name="WatcherAddressEmail2" size="15" />
-</td></tr>
-<tr><td>
-<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail3" &>
-</td><td>
-<input name="WatcherAddressEmail3" size="15" />
-</td></tr>
-</table>
-
-<%INIT>
-my ($msg, $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);
- }
-
-</%INIT>
-
-<%ARGS>
-$UserField => 'Name'
-$UserOp => '='
-$UserString => undef
-$GroupField => 'Name'
-$GroupOp => '='
-$GroupString => undef
-$PrivilegedOnly => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/BulkLinks b/rt/html/Ticket/Elements/BulkLinks
deleted file mode 100644
index b92f503ec..000000000
--- a/rt/html/Ticket/Elements/BulkLinks
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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&>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>
diff --git a/rt/html/Ticket/Elements/EditBasics b/rt/html/Ticket/Elements/EditBasics
deleted file mode 100644
index 584bba8c7..000000000
--- a/rt/html/Ticket/Elements/EditBasics
+++ /dev/null
@@ -1,117 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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"><input name="TimeEstimated" value="<%$TicketObj->TimeEstimated|h%>" size="5" />
- <& /Elements/SelectTimeUnits, Name =>'TimeEstimated' &>
-</td>
- </tr>
- <tr>
- <td class="label"><&|/l&>Time Worked</&>:</td>
- <td class="value"><input name="TimeWorked" value="<%$TicketObj->TimeWorked|h%>" size="5" />
- <& /Elements/SelectTimeUnits, Name =>'TimeWorked' &>
-</td>
-
- </tr>
- <tr>
- <td class="label"><&|/l&>Time Left</&>:</td>
- <td class="value"><input name="TimeLeft" value="<%$TicketObj->TimeLeft|h%>" size="5" />
- <& /Elements/SelectTimeUnits, Name =>'TimeLeft' &>
- </td>
- </tr>
-
- <tr>
- <td class="label"><&|/l&>Priority</&>:</td>
- <td class="value"><input name="Priority" value="<%$TicketObj->Priority|h%>" size="5" /></td>
- </tr>
-
- <tr>
- <td class="label"><&|/l&>Final Priority</&>:</td>
- <td class="value"><input name="FinalPriority" value="<%$TicketObj->FinalPriority|h%>" size="5" /></td>
- </tr>
-
-
-
-<& /Elements/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);
-
-</%INIT>
-<%ARGS>
-
-$TicketObj => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/EditCustomField b/rt/html/Ticket/Elements/EditCustomField
deleted file mode 100644
index 399b4a5e2..000000000
--- a/rt/html/Ticket/Elements/EditCustomField
+++ /dev/null
@@ -1,57 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<%init>
-
-# RT 3.2 API compatibility glue
-
-$RT::Logger->debug("Ticket/Elements/EditCustomField is deprecated in RT 3.4 and will be removed in 3.6.");
-
-$ARGS{'NamePrefix'} =~ s/^Ticket-/Object-RT::Ticket-/;
-$ARGS{'NamePrefix'} =~ s/^CustomField-/Object-RT::Ticket--CustomField-/;
-$m->comp('/Elements/EditCustomField', %ARGS, Object=> $ARGS{'TicketObj'});
-</%init>
diff --git a/rt/html/Ticket/Elements/EditCustomFields b/rt/html/Ticket/Elements/EditCustomFields
deleted file mode 100644
index 14a5681f1..000000000
--- a/rt/html/Ticket/Elements/EditCustomFields
+++ /dev/null
@@ -1,110 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 width="50%">
-<table>
- <tr id="CF-<%$CustomField->id%>-EditRow">
- <td class="labeltop">
- <b><%$CustomField->Name%></b><br />
- <i><%$CustomField->FriendlyType%></i>
- </td>
- <td class="entry"><& /Elements/EditCustomField,
- Object => $TicketObj,
- CustomField => $CustomField,
- NamePrefix => $NamePrefix ,
- Default => $m->notes('Field-' . $CustomField->Id),
- &>
-% if (my $msg = $m->notes('InvalidField-' . $CustomField->Id)) {
- <br />
- <em style="color: red"><% $msg %></em>
-% }
- </td>
- </tr>
-</table>
-</td>
-
-% unless ( $i % 2 ) {
-</tr>
-% }
-
-% }
-
-%# close row if required
-% if ( $i % 2 ) {
-</tr>
-% }
-
-</table>
-<%INIT>
-my $CustomFields;
-my $NamePrefix;
-
-if ($TicketObj) {
- $CustomFields = $TicketObj->CustomFields();
- $NamePrefix = "Object-RT::Ticket-".$TicketObj->Id."-CustomField-";
-
-} else {
- $CustomFields = $QueueObj->TicketCustomFields();
- $NamePrefix = "Object-RT::Ticket--CustomField-";
-}
-
- $m->comp('/Elements/Callback', _CallbackName => 'MassageCustomFields',
- CustomFields => $CustomFields);
-
-</%INIT>
-<%ARGS>
-$TicketObj => undef
-$QueueObj => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/EditDates b/rt/html/Ticket/Elements/EditDates
deleted file mode 100644
index 16ee2d25d..000000000
--- a/rt/html/Ticket/Elements/EditDates
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Ticket/Elements/EditLinks b/rt/html/Ticket/Elements/EditLinks
deleted file mode 100644
index bdb8a6b7d..000000000
--- a/rt/html/Ticket/Elements/EditLinks
+++ /dev/null
@@ -1,133 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<TABLE width=100%>
- <TR>
- <TD VALIGN=TOP WIDTH=50%>
- <h3><&|/l&>Current Relationships</&></h3>
-
-<table>
- <tr>
- <td></td>
- <td><i><&|/l&>(Check box to delete)</&></i></td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Depends on</&>:</td>
- <td class="value">
-% while (my $link = $Ticket->DependsOn->Next) {
- <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>">
- <& ShowLink, URI => $link->TargetURI &><br>
-% }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Depended on by</&>:</td>
- <td class="value">
-% while (my $link = $Ticket->DependedOnBy->Next) {
-% my $member = $link->BaseObj;
- <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-">
- <& ShowLink, URI => $link->BaseURI &><br>
-% }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Parents</&>:</td>
- <td class="value">
-% while (my $link = $Ticket->MemberOf->Next) {
- <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>">
- <& ShowLink, URI => $link->TargetURI &><br>
-% }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Children</&>:</td>
- <td class="value">
-% while (my $link = $Ticket->Members->Next) {
- <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-">
- <& ShowLink, URI => $link->BaseURI &><br>
-% }
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Refers to</&>:</td>
- <td class="value">
-% while (my $link = $Ticket->RefersTo->Next) {
- <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>">
- <& ShowLink, URI => $link->TargetURI &><br>
-%}
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Referred to by</&>:</td>
- <td class="value">
-% while (my $link = $Ticket->ReferredToBy->Next) {
- <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-">
- <& ShowLink, URI => $link->BaseURI &><br>
-% }
- </td>
- </tr>
-</table>
-
-</TD>
-<TD VALIGN=TOP>
-<h3><&|/l&>New Relationships</&></h3>
-<i><&|/l&>Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces.</&></i><br>
-<TABLE>
- <TR>
- <TD class="label"><&|/l&>Merge into</&>:</TD>
- <TD class="entry"><input name="<%$Ticket->Id%>-MergeInto"> <i><&|/l&>(only one ticket)</&></i></TD>
- </TR>
- <TR>
- <TD class="label"><&|/l&>Depends on</&>:</TD>
- <TD class="entry"><input name="<%$Ticket->Id%>-DependsOn"></TD>
- </TR>
- <TR>
- <TD class="label"><&|/l&>Depended on by</&>:</TD>
- <TD class="entry"><input name="DependsOn-<%$Ticket->Id%>"></TD>
- </TR>
- <TR>
- <TD class="label"><&|/l&>Parents</&>:</TD>
- <TD class="entry"><input name="<%$Ticket->Id%>-MemberOf"></TD>
- </TR>
- <TR>
- <TD class="label"><&|/l&>Children</&>:</TD>
- <TD class="entry"> <input name="MemberOf-<%$Ticket->Id%>"></TD>
- </TR>
- <TR>
- <TD class="label"><&|/l&>Refers to</&>:</TD>
- <TD class="entry"><input name="<%$Ticket->Id%>-RefersTo"></TD>
- </TR>
- <TR>
- <TD class="label"><&|/l&>Referred to by</&>:</TD>
- <TD class="entry"> <input name="RefersTo-<%$Ticket->Id%>"></TD>
- </TR>
-</TABLE>
-</TD>
-</TR>
-</TABLE>
-
-
-
-<%ARGS>
-$Ticket => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/EditPeople b/rt/html/Ticket/Elements/EditPeople
deleted file mode 100644
index a933b7bb7..000000000
--- a/rt/html/Ticket/Elements/EditPeople
+++ /dev/null
@@ -1,93 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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&>(Check box to delete)</&><br />
-
-<&|/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 &>
-
-</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/html/Ticket/Elements/EditWatchers b/rt/html/Ticket/Elements/EditWatchers
deleted file mode 100644
index 68d16adae..000000000
--- a/rt/html/Ticket/Elements/EditWatchers
+++ /dev/null
@@ -1,81 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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.
-%if ($Members->Count == 0 ) {
-<li><i><&|/l&>none</&></i></li>
-% }
-
-
-%while (my $watcher=$Members->Next) {
-<li>
-<input type="checkbox" class="checkbox" name="Ticket-DeleteWatcher-Type-<%$Watchers->Type%>-Principal-<%$watcher->MemberId%>" value="1" unchecked />
-%if ($watcher->MemberObj->IsUser) {
-<a href="<%$RT::WebPath%>/Admin/Users/Modify.html?id=<%$watcher->MemberObj->Object->id%>">
-<%$watcher->MemberObj->Object->Name%></a>
-% if ($TicketObj and grep { $_->Content eq $watcher->MemberObj->Object->EmailAddress } $TicketObj->SquelchMailTo) {
-<b><&|/l&>(Will not be sent email)</&></b>
-% }
-
-%} else {
-<a href="<%$RT::WebPath%>/Admin/Groups/Modify.html?id=<%$watcher->MemberObj->Object->id%>">
-<%$watcher->MemberObj->Object->Name%></a>
-%}
-</li>
-% }
-</ul>
-<%INIT>
-my $Members = $Watchers->MembersObj;
-</%INIT>
-<%ARGS>
-$TicketObj => undef
-$Watchers => undef
-</%ARGS>
-
-
-
diff --git a/rt/html/Ticket/Elements/FindAttachments b/rt/html/Ticket/Elements/FindAttachments
deleted file mode 100755
index ba562db11..000000000
--- a/rt/html/Ticket/Elements/FindAttachments
+++ /dev/null
@@ -1,95 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 ContentType 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/html/Ticket/Elements/LoadTextAttachments b/rt/html/Ticket/Elements/LoadTextAttachments
deleted file mode 100755
index cc9558e32..000000000
--- a/rt/html/Ticket/Elements/LoadTextAttachments
+++ /dev/null
@@ -1,94 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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');
- if ($RT::SuppressInlineTextFiles) {
- $attachments->Limit ( FIELD => 'Filename', OPERATOR => 'IS', VALUE => 'NULL');
- }
-}
-return ($attachments);
-</%INIT>
-<%ARGS>
-$Ticket => undef
-</%ARGS>
-
diff --git a/rt/html/Ticket/Elements/PreviewScrips b/rt/html/Ticket/Elements/PreviewScrips
deleted file mode 100755
index 5edf8b5a7..000000000
--- a/rt/html/Ticket/Elements/PreviewScrips
+++ /dev/null
@@ -1,133 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $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'} eq 'response' ) || ($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");
-}
-
-
-my @non_recipients = $TicketObj->SquelchMailTo;
-</%init>
-<h2><&|/l&>This message will be sent to...</&></h2>
-
-% if ( $Object ) {
-<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 %></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::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, Value => 'UpdatePreview', Label => loc('Save changes')&>
diff --git a/rt/html/Ticket/Elements/Reminders b/rt/html/Ticket/Elements/Reminders
deleted file mode 100644
index ae7216268..000000000
--- a/rt/html/Ticket/Elements/Reminders
+++ /dev/null
@@ -1,168 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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 &>
-% }
-% }
-</div>
-<div>
-<h3><&|/l&>New reminder:</&></h3>
-<& SELF:NewReminder, Ticket => $Ticket &>
-<%method NewReminder>
-<%args>
-$Ticket
-</%args>
-<div class="input-row">
-<label class="horizontal" for="NewReminder-Subject" ><&|/l&>Subject</&>:</label>
-<input type="text" size="15" name="NewReminder-Subject" />
-</div>
-<div class="input-row">
-<label class="horizontal" for="NewReminder-Owner" ><&|/l&>Owner</&>:</label>
-<& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, DefaultValue => 0 &>
-</div>
-<div class="input-row">
-<label class="horizontal" for="NewReminder-Due" ><&|/l&>Due</&> <&|/l&>(yyyy/mm/dd)</&>:</label>
-<& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &>
-</div>
-</div>
-</%method>
-<%method EditEntry>
-<%args>
-$Reminder
-$Ticket
-</%args>
-<input
- type="checkbox"
- name="Complete-Reminder-<%$Reminder->id%>"
- <% $Reminder->Status eq 'resolved' ? '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' : '' %>
-/>
- <%$Reminder->Subject%> &bull;
- <%$Reminder->OwnerObj->Name%>
- <%$Reminder->DueObj->Unix>0 ? "&bull; ". $Reminder->DueObj->AgeAsString : '' |n%><br />
-</%method>
diff --git a/rt/html/Ticket/Elements/ShowAttachments b/rt/html/Ticket/Elements/ShowAttachments
deleted file mode 100644
index e2c5f9c63..000000000
--- a/rt/html/Ticket/Elements/ShowAttachments
+++ /dev/null
@@ -1,104 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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',
- 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::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>
-
-% }
-</&>
-
-<br />
-% }
-
-<%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/html/Ticket/Elements/ShowBasics b/rt/html/Ticket/Elements/ShowBasics
deleted file mode 100644
index fe2083174..000000000
--- a/rt/html/Ticket/Elements/ShowBasics
+++ /dev/null
@@ -1,85 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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"><&|/l&><% $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>
-% }
- <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"><%$Ticket->Priority%>/<%$Ticket->FinalPriority %></td>
- </tr>
- <tr>
- <td class="label queue"><&|/l&>Queue</&>:</td>
- <td class="value queue"><& ShowQueue, QueueObj => $Ticket->QueueObj &></td>
- </tr>
-<& /Elements/Callback, _CallbackName => 'EndOfList', TicketObj => $Ticket, %ARGS &>
-</table>
-<%ARGS>
-$Ticket => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowCustomFields b/rt/html/Ticket/Elements/ShowCustomFields
deleted file mode 100644
index 17da78ee8..000000000
--- a/rt/html/Ticket/Elements/ShowCustomFields
+++ /dev/null
@@ -1,51 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Ticket/Elements/ShowDates b/rt/html/Ticket/Elements/ShowDates
deleted file mode 100644
index 9217b79c8..000000000
--- a/rt/html/Ticket/Elements/ShowDates
+++ /dev/null
@@ -1,86 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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>
- <td class="value date due"><% $Ticket->DueObj->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/html/Ticket/Elements/ShowDependencies b/rt/html/Ticket/Elements/ShowDependencies
deleted file mode 100644
index ef093ee3b..000000000
--- a/rt/html/Ticket/Elements/ShowDependencies
+++ /dev/null
@@ -1,65 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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::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/html/Ticket/Elements/ShowGroupMembers b/rt/html/Ticket/Elements/ShowGroupMembers
deleted file mode 100644
index 5c0a064d4..000000000
--- a/rt/html/Ticket/Elements/ShowGroupMembers
+++ /dev/null
@@ -1,63 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $UserMembers = $Group->UserMembersObj;
-% while (my $member = $UserMembers->Next()) {
-<& ShowUserEntry, User => $member, Ticket => $Ticket &><br />
-% }
-% my $GroupMembers = $Group->MembersObj;
-% $GroupMembers->LimitToGroups();
-% while (my $member = $GroupMembers->Next()) {
-<&|/l&>Group</&>: <%$member->MemberObj->Object->Name%><br />
-% }
-
-<%ARGS>
-$Group => undef
-$Ticket => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowHistory b/rt/html/Ticket/Elements/ShowHistory
deleted file mode 100644
index a40aece95..000000000
--- a/rt/html/Ticket/Elements/ShowHistory
+++ /dev/null
@@ -1,166 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 = q[<span style="color: black">] . loc('Display mode') . ':</span> ';
-
- 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>
-<& /Widgets/TitleBoxStart, title => $title, titleright => $titleright &>
-% }
-
-<div id="ticket-history">
-<%perl>
-my @attachments = @{$Attachments->ItemsArrayRef()};
-my @attachment_content = @{$AttachmentContent->ItemsArrayRef()};
-
-while ( my $Transaction = $Transactions->Next ) {
- my $skip = 0;
- $m->comp( '/Elements/Callback',
- _CallbackName => 'SkipTransaction',
- Transaction => $Transaction,
- skip => \$skip,
- %ARGS );
- next if $skip;
- $i++;
-
- my @trans_attachments = grep { $_->TransactionId == $Transaction->Id } @attachments;
-
- my $trans_content = {};
- grep { ($_->TransactionId == $Transaction->Id ) && ($trans_content->{$_->Id} = $_) } @attachment_content;
-
-
- #Args is first because we're clobbering the "Attachments" parameter
- $m->comp( 'ShowTransaction',
- %ARGS,
-
- AttachPath => $AttachPath,
- UpdatePath => $UpdatePath,
- Ticket => $Ticket,
- Transaction => $Transaction,
- ShowHeaders => $ShowHeaders,
- Collapsed => $Collapsed,
- RowNum => $i,
- ShowTitleBarCommands => $ShowTitleBarCommands,
- Attachments => \@trans_attachments,
- AttachmentContent => $trans_content,
- LastTransaction => $Transactions->IsLast
- );
-
-# 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 &>
-% }
-<%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::OldestTransactionsFirst? 'ASC': 'DESC';
-$Transactions->OrderByCols( { FIELD => 'Created',
- ORDER => $OldestFirst },
- { FIELD => 'id',
- ORDER => $OldestFirst },
- );
-
-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::WebPath."/Ticket/Display.html"
-$Ticket => undef
-$Tickets => undef
-$Attachments => undef
-$AttachmentContent => undef
-$ShowHeaders => undef
-$Collapsed => undef
-$ShowTitle => 1
-$ShowDisplayModes => 1
-$ShowTitleBarCommands => 1
-$AttachPath => $RT::WebPath."/Ticket/Attachment"
-$UpdatePath => $RT::WebPath."/Ticket/Update.html"
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowLink b/rt/html/Ticket/Elements/ShowLink
deleted file mode 100644
index 493fd95a5..000000000
--- a/rt/html/Ticket/Elements/ShowLink
+++ /dev/null
@@ -1,40 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<A href="<%$URI->Resolver->HREF%>">
-% if ($URI->IsLocal) {
-% my $member = $URI->Object;
-% if (UNIVERSAL::isa($member, "RT::Ticket")) {
-<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<% loc($member->Status) %>]
-% } 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/html/Ticket/Elements/ShowLinks b/rt/html/Ticket/Elements/ShowLinks
deleted file mode 100644
index f88a6008d..000000000
--- a/rt/html/Ticket/Elements/ShowLinks
+++ /dev/null
@@ -1,87 +0,0 @@
-%# BEGIN LICENSE BLOCK
-%#
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
-%#
-%# (Except where explictly superceded by other copyright notices)
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# Unless otherwise specified, all modifications, corrections or
-%# extensions to this work which alter its source code become the
-%# property of Best Practical Solutions, LLC when submitted for
-%# inclusion in the work.
-%#
-%#
-%# END LICENSE BLOCK
-<table>
- <tr>
- <td class="labeltop"><&|/l&>Depends on</&>:</td>
- <td class="value">
-<ul>
-% while (my $Link = $Ticket->DependsOn->Next) {
-<li><& ShowLink, URI => $Link->TargetURI &>
-% }
-</ul>
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Depended on by</&>:</td>
- <td class="value">
-<ul>
-% while (my $Link = $Ticket->DependedOnBy->Next) {
-<li><& ShowLink, URI => $Link->BaseURI &>
-% }
-</ul>
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Parents</&>:</td>
- <td class="value">
-<ul>
-% while (my $Link = $Ticket->MemberOf->Next) {
-<li><& ShowLink, URI => $Link->TargetURI &>
-% }
-</ul>
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Children</&>:</td>
- <td class="value"><& /Ticket/Elements/ShowMembers, Ticket => $Ticket &></td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Refers to</&>:</td>
- <td class="value">
-<ul>
-% while (my $Link = $Ticket->RefersTo->Next) {
-<li><& ShowLink, URI => $Link->TargetURI &>
-% }
-</ul>
- </td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Referred to by</&>:</td>
- <td class="value">
- <ul>
-% while (my $Link = $Ticket->ReferredToBy->Next) {
-<li><& ShowLink, URI => $Link->BaseURI &>
-% }
-</ul>
- </td>
- </tr>
-
-% # Allow people to add more rows to the table
-% $m->comp('/Elements/Callback', %ARGS );
-
-</table>
-
-<%ARGS>
-$Ticket => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowMembers b/rt/html/Ticket/Elements/ShowMembers
deleted file mode 100644
index 37e4ecef6..000000000
--- a/rt/html/Ticket/Elements/ShowMembers
+++ /dev/null
@@ -1,68 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-
-my $members = $Ticket->Members;
-return unless $members->Count;
-
-</%INIT>
-
-<%ARGS>
-$Ticket => undef
-$depth => 1
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowMessageHeaders b/rt/html/Ticket/Elements/ShowMessageHeaders
deleted file mode 100644
index 40b5c8455..000000000
--- a/rt/html/Ticket/Elements/ShowMessageHeaders
+++ /dev/null
@@ -1,92 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-% foreach my $header (@headers) {
-% next unless $display_headers{_all}
-% or ($display_headers{ lc $header->{Tag} }
-% and length $header->{Value});
- <tr>
- <td align="right" class="message-header-key"><%$header->{'Tag'}%>:</td>
- <td class="message-header-value"><%$header->{'Value'} | n%></td>
- </tr>
-% }
-</table>
-<%INIT>
-my $content = $Headers;
-$m->comp('/Elements/Callback', content => \$content, %ARGS);
-
-# apply html escaping on the original content
-# we'll display the value without escaping later (for MakeClicky et al.)
-$content = $m->interp->apply_escapes($content, 'h');
-
-my @lines = split /\n/, $content;
-my $in_header = 0;
-my @headers;
-
-for (@lines) {
- if (/^(\S+):\s+(.*)$/) {
- push @headers, { Tag => $1, Value => $2 };
- }
- elsif (/^\s+/) {
- $headers[-1]->{'Value'} .= $_;
- }
- else {
- s/:$//;
- push @headers, { Tag => $_, Value => '' };
- }
-}
-
-my %display_headers = map { lc($_) => 1 } @$DisplayHeaders;
-
-$m->comp('/Elements/Callback', _CallbackName => 'Headers', content => \$content, headers => \@headers, display_headers => \%display_headers, %ARGS);
-
-</%INIT>
-<%ARGS>
-$Headers => undef
-$DisplayHeaders => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowMessageStanza b/rt/html/Ticket/Elements/ShowMessageStanza
deleted file mode 100644
index f166fbb61..000000000
--- a/rt/html/Ticket/Elements/ShowMessageStanza
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 (ref($Message)) {
-<div class="message-stanza-depth-<% $Depth %>">
-<%perl>
-foreach my $stanza (@$Message) {
- if ( ref $stanza eq "ARRAY" ) {
- $m->comp( 'ShowMessageStanza',
- Depth => $Depth + 1,
- Transaction => $Transaction,
- Message => $stanza );
- }
- elsif ( ref $stanza eq "HASH" ) {
- my $content = $stanza->{raw};
- RT::Interface::Web::EscapeUTF8(\$content);
- $m->comp('/Elements/Callback', content => \$content, %ARGS);
- $content =~ s{$}{<br />}mg
- if defined $content;
-
-</%perl>
-<%$content |n%>
-% }
-% } # end foreach
-</div>
-% } else {
-% my $content = $Message;
-% RT::Interface::Web::EscapeUTF8(\$content);
-% $m->comp('/Elements/Callback', content => \$content, %ARGS);
-% $content =~ s{$}{<br />}mg;
-<%$content |n%>
-% }
-<%INIT>
-use URI::URL;
-</%INIT>
-<%ARGS>
-$Message => undef
-$Depth => 0
-$Transaction => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowPeople b/rt/html/Ticket/Elements/ShowPeople
deleted file mode 100644
index d00db52d3..000000000
--- a/rt/html/Ticket/Elements/ShowPeople
+++ /dev/null
@@ -1,68 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
- <td class="value"><& ShowUserEntry, User => $Ticket->OwnerObj, 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>
-<%ARGS>
-$Ticket => undef
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowRequestor b/rt/html/Ticket/Elements/ShowRequestor
deleted file mode 100644
index 315664b9c..000000000
--- a/rt/html/Ticket/Elements/ShowRequestor
+++ /dev/null
@@ -1,89 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $rows = 10;
-my $has_right_adminusers = $session{'CurrentUser'}->HasRight(Object => $RT::System, Right => 'AdminUsers');
-my $people = $Ticket->Requestors->UserMembersObj;
-while (my $requestor=$people->Next) {
-next if $requestor->Privileged;
-my $name=$requestor->RealName || $requestor->EmailAddress;
-my $tickets = RT::Tickets->new($session{'CurrentUser'});
-$tickets->FromSQL( "Requestor.id = ". $requestor->id ." AND (Status = 'open' OR Status = 'new')" );
-$tickets->RowsPerPage($rows);
-$tickets->OrderBy(FIELD => 'Priority', ORDER => 'DESC');
-</%PERL>
-
-<&| /Widgets/TitleBox,
- title_href => $has_right_adminusers ? "$RT::WebPath/Admin/Users/Modify.html?id=".$requestor->id : undef,
- title=> loc("More about [_1]", $name),
-&>
-
-%# Additional information about this user. Empty by default.
-<& /Elements/Callback, _CallbackName => 'AboutThisUser', requestor => $requestor, %ARGS &>
-
-<&|/l&>Comments about this user</&>:<br />
-<b><% ($requestor->Comments || loc("No comment entered about this user")) %></b><br />
-
-<&|/l, $rows &>This user's [_1] highest priority tickets</&>:<br />
-<ul>
-%while (my $w=$tickets->Next) {
-<li><a href="<%$RT::WebPath%><%$DisplayPath%>?id=<%$w->id%>"><%$w->Id%>: <%$w->Subject%></a> (<%$w->Status%>)
-%}
-</ul>
-
-<&|/l&>Groups this user belongs to</&>:<br />
-
-<& /Elements/ShowMemberships, UserObj => $requestor &>
-
-</&>
-
-%}
-<%ARGS>
-$Ticket=>undef
-$DisplayPath => "/Ticket/Display.html"
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowSummary b/rt/html/Ticket/Elements/ShowSummary
deleted file mode 100644
index aeec0fdfb..000000000
--- a/rt/html/Ticket/Elements/ShowSummary
+++ /dev/null
@@ -1,114 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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" width="50%" class="boxcontainer">
- <&| /Widgets/TitleBox, title => loc('The Basics'),
- title_href =>"$RT::WebPath/Ticket/Modify.html?id=".$Ticket->Id,
- class => 'ticket-info-basics' &>
- <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
- </&>
-
-% if ($Ticket->QueueObj->TicketCustomFields->First) {
- <&| /Widgets/TitleBox, title => loc('Custom Fields'),
- title_href =>"$RT::WebPath/Ticket/Modify.html?id=".$Ticket->Id,
- class => 'ticket-info-cfs' &>
- <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &>
- </&>
-% }
- <&| /Widgets/TitleBox, title => loc('People'),
- title_href =>"$RT::WebPath/Ticket/ModifyPeople.html?id=".$Ticket->Id,
- class => 'ticket-info-people' &>
- <& /Ticket/Elements/ShowPeople, Ticket => $Ticket &>
- </&>
-
- <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments &>
- <br />
- <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &>
-
- <& /Elements/Callback, %ARGS, _CallbackName => 'LeftColumn' &>
- </td>
- <td valign="top" width="50%" class="boxcontainer">
- <&|/Widgets/TitleBox, title => loc("Reminders"),
- title_href =>"$RT::WebPath/Ticket/Reminders.html?id=".$Ticket->Id,
- class => 'ticket-info-reminders' &>
- <table>
- <tr>
- <td>
- <form action="<%$RT::WebPath%>/Ticket/Display.html" method="post">
- <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &>
- <div align="right"><input type="submit" class="button" value="Save" /></div>
- </form>
- </td>
- </tr>
- </table>
- </&>
- <&| /Widgets/TitleBox, title => loc("Dates"),
- title_href =>"$RT::WebPath/Ticket/ModifyDates.html?id=".$Ticket->Id,
- class => 'ticket-info-dates' &>
- <& /Ticket/Elements/ShowDates, Ticket => $Ticket &>
- </&>
-
- <&| /Widgets/TitleBox, title => loc('Links'),
- title_href => "$RT::WebPath/Ticket/ModifyLinks.html?id=".$Ticket->Id,
- class => 'ticket-info-links' &>
- <& /Elements/ShowLinks, Ticket => $Ticket &>
- </&>
- <& /Elements/Callback, %ARGS, _CallbackName => 'RightColumn' &>
-
- </td>
- </tr>
- </table>
-<%ARGS>
-$Ticket => undef
-$Attachments => undef
-</%ARGS>
-
-
-
-
diff --git a/rt/html/Ticket/Elements/ShowTime b/rt/html/Ticket/Elements/ShowTime
deleted file mode 100644
index 2ce031125..000000000
--- a/rt/html/Ticket/Elements/ShowTime
+++ /dev/null
@@ -1,55 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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</&>)
-% }
-<%ARGS>
-$minutes
-</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowTransaction b/rt/html/Ticket/Elements/ShowTransaction
deleted file mode 100644
index 9fe08cede..000000000
--- a/rt/html/Ticket/Elements/ShowTransaction
+++ /dev/null
@@ -1,197 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 && " $type_class" %><% $RowNum % 2 ? ' odd' : ' even' %>">
-% $m->comp('/Elements/Callback', _CallbackName => 'ModifyDisplay', titlebar_cmd => \$titlebar_commands, Transaction => $Transaction, %ARGS);
-
-<table width="100%" cellspacing="0" cellpadding="2" border="0">
- <tr>
- <td rowspan="2" valign="top" class="type">
- <a name="txn-<%$Transaction->Id%>" href="<% $DisplayPath %>#txn-<%$Transaction->Id%>">#</a>
- <% $LastTransaction ? '<a name="lasttrans">&nbsp;</a>' : '&nbsp;' |n %>
- </td>
- <td class="date"><% $transdate|n %></td>
-% my $desc = $Transaction->BriefDescription;
-% $m->comp('/Elements/Callback', _CallbackName => 'ModifyDisplay', text => \$desc, Transaction => $Transaction, %ARGS);
- <td class="description">
- <%$Transaction->CreatorObj->Name%> - <%$TicketString%> <%$desc%>
- </td>
- <td class="time-taken"><%$TimeTaken%></td>
- <td class="actions"><%$titlebar_commands|n%></td>
- </tr>
-
- <tr>
- <td colspan="4" class="content">
-% if ($Transaction->CustomFieldValues->Count) {
- <& /Elements/ShowCustomFields, Object => $Transaction &>
-% }
-% $m->comp('ShowTransactionAttachments', %ARGS, Parent => 0) unless ($Collapsed ||!$ShowBody);
- </td>
- </tr>
-
-</table>
-</div>
-
-<%ARGS>
-$Ticket => undef
-$Transaction => undef
-$ShowHeaders => 0
-$Collapsed => undef
-$ShowTitleBarCommands => 1
-$RowNum => 1
-$DisplayPath => $RT::WebPath."/Ticket/Display.html?id=".$Ticket->id
-$AttachPath => $RT::WebPath."/Ticket/Attachment"
-$UpdatePath => $RT::WebPath."/Ticket/Update.html"
-$EmailRecordPath => $RT::WebPath."/Ticket/ShowEmailRecord.html"
-$Attachments => undef
-$AttachmentContent => undef
-$ShowBody => 1
-$LastTransaction => 0
-</%ARGS>
-
-<%INIT>
-
-my ( $TimeTaken, $TicketString, $type_class );
-
-my $transdate = $Transaction->CreatedAsString();
-$transdate =~ s/\s/&nbsp;/g;
-
-if ( $Transaction->Type =~ /^(Create|Correspond|Comment$)/ ) {
- if ( $Transaction->IsInbound ) {
- $type_class = 'message';
- }
- else {
- $type_class = 'message';
- }
-}
-elsif ( ( $Transaction->Field =~ /^Owner$/ )
- or ( $Transaction->Type =~ /^(AddWatcher|DelWatcher)$/ ) ) {
- $type_class = 'people';
-
-}
-elsif ( $Transaction->Type =~ /^(AddLink|DeleteLink)$/ ) {
- $type_class = 'links';
-}
-elsif ( $Transaction->Type =~ /^(Status|Set|Told)$/ ) {
- if ( $Transaction->Field =~ /^(Told|Starts|Started|Due)$/ ) {
- $type_class = 'dates';
- }
- else {
- $type_class = 'basics';
- }
-}
-else {
- $type_class = 'other';
-}
-
-if ( $Ticket->Id != $Transaction->Ticket ) {
- $TicketString = "Ticket " . $Transaction->Ticket . ": ";
-}
-$TicketString ||= '';
-
-if ( $Transaction->TimeTaken != 0 ) {
- $TimeTaken = $Transaction->TimeTaken . " min";
-} else {
- $TimeTaken = '';
-}
-
-unless ($Attachments) {
- my $attachments = $Transaction->Attachments;
- $attachments->Columns( qw( Id Filename ContentType Headers Subject Parent ContentEncoding ContentType TransactionId) );
- $Attachments = $attachments->ItemsArrayRef();
-}
-my $titlebar_commands = '&nbsp;';
-
-my @DisplayHeaders=qw ( _all);
-
-if ( $Transaction->Type =~ /EmailRecord$/ ) {
- @DisplayHeaders = qw(To Cc Bcc);
-
- $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 {
-
- unless ( $ShowHeaders ) {
- @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject);
- }
-
- if ( $Attachments->[0] && $ShowTitleBarCommands ) {
- if ( $Transaction->TicketObj->CurrentUserHasRight('ReplyToTicket')
- or $Transaction->TicketObj->CurrentUserHasRight('ModifyTicket')) {
- $titlebar_commands .=
- "[<a href=\"".$UpdatePath."?id="
- . $Transaction->Ticket
- . "&QuoteTransaction="
- . $Transaction->Id
- . "&Action=Respond\">"
- . loc('Reply')
- . "</a>]&nbsp;";
- }
- if ( $Transaction->TicketObj->CurrentUserHasRight('CommentOnTicket')
- or $Transaction->TicketObj->CurrentUserHasRight('ModifyTicket')) {
- $titlebar_commands .=
- "[<a href=\"".$UpdatePath."?id="
- . $Transaction->Ticket
- . "&QuoteTransaction="
- . $Transaction->Id
- . "&Action=Comment\">"
- . loc('Comment') . "</a>]";
- }
- }
-}
-</%INIT>
diff --git a/rt/html/Ticket/Elements/ShowTransactionAttachments b/rt/html/Ticket/Elements/ShowTransactionAttachments
deleted file mode 100644
index 662b744ae..000000000
--- a/rt/html/Ticket/Elements/ShowTransactionAttachments
+++ /dev/null
@@ -1,209 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 { $_->Parent == $Parent } @$Attachments ) {
-
- # {{{ show the headers
- my $headers = $message->Headers;
- chomp $headers;
-
- # localize the common headers (like 'Subject:'), too.
- $headers =~ s/^([^:]+)(?=:)/loc($1)/em;
- $m->comp(
- 'ShowMessageHeaders',
- Headers => $headers,
- Transaction => $Transaction,
- DisplayHeaders => \@DisplayHeaders
- );
-
- # }}}
- # {{{ if there's any size at all, show the download link
- my $size = $message->ContentLength;
- if ($size) {
-
-</%perl>
-<div class="downloadattachment">
-<%perl>
-
- # show a download link
- if ( $size > 1024 ) {
- $size = loc( "[_1]k", int( $size / 102.4 ) / 10 );
- }
- else {
- $size = loc( "[_1]b", $size );
- }
-
-</%PERL>
-<a href="<%$AttachPath%>/<%$Transaction->Id%>/<%$message->Id%>/<%$message->Filename | u%>"><&|/l&>Download</&> <%$message->Filename || loc('(untitled)') %></a>
-<span class="downloadcontenttype">
-[<%$message->ContentType%> <% $size %>]
-</span>
-</div>
-% }
-% # }}}
-<div class="messagebody">
-<%perl>
-# {{{ if it has a content-disposition: attachment, don't show inline
-unless ( ($message->GetHeader('Content-Disposition')||"") =~ /attachment/i ) {
-
- my $content;
-
- # If it's text
- if ( $message->ContentType =~ m{^(text|message)}i
- && !($RT::SuppressInlineTextFiles && $message->Filename)
- && $message->ContentLength <= $RT::MaxInlineBody )
- {
-
- 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::PreferRichText
- && ( $message->ContentType =~ m{^text/(?:html|enriched)$} )
- )
- || ( !$RT::PreferRichText
- && ( $message->ContentType !~ m{^text/(?:html|enriched)$} )
- )
- )
- )
- {
-
- 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 );
- $m->out($content);
- }
-
- # if it's a text/plain show the body
- elsif ( $message->ContentType =~ m{^(text|message|text)}i ) {
-
- eval { require Text::Quoted; $content = Text::Quoted::extract($content); };
- if ($@) { 1; }
-
- $m->comp(
- 'ShowMessageStanza',
- Depth => 0,
- Message => $content,
- Transaction => $Transaction
- );
- }
- }
-
- }
-
- # if it's an image, show it as an image
- elsif ( $RT::ShowTransactionImages and $message->ContentType =~ /^image\//i ) {
- $m->out('<img src="'
- . $AttachPath . '/'
- . $Transaction->Id . '/'
- . $message->Id
- . '/" />' );
- }
- elsif ( $message->ContentLength > 0 ) {
- $m->out(
- loc( 'Message body not shown because it is too large or is not plain text.' )
- );
- }
-}
-
-# }}}
-
-$m->comp(
- 'ShowTransactionAttachments', %ARGS,
- Parent => $message->id,
- ParentObj => $message
-);
-
-</%PERL>
-</div>
-% }
-<%ARGS>
-$Ticket => undef
-$Transaction => undef
-$ShowHeaders => 0
-$Collapsed => undef
-$ShowTitleBarCommands => 1
-$RowNum => 1
-$AttachPath => $RT::WebPath."/Ticket/Attachment"
-$UpdatePath => $RT::WebPath."/Ticket/Update.html"
-$EmailRecordPath => $RT::WebPath."/Ticket/ShowEmailRecord.html"
-$Attachments => undef
-$AttachmentContent => undef
-$ShowBody => 1
-$Parent => 0
-$ParentObj => 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);
-}
-</%INIT>
diff --git a/rt/html/Ticket/Elements/ShowUserEntry b/rt/html/Ticket/Elements/ShowUserEntry
deleted file mode 100644
index eb6e8364a..000000000
--- a/rt/html/Ticket/Elements/ShowUserEntry
+++ /dev/null
@@ -1,61 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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->Name%>
-% if ($User->EmailAddress && $User->EmailAddress ne $User->Name) {
-&lt;<%$User->EmailAddress%>&gt;
-% }
-% 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/html/Ticket/Elements/Tabs b/rt/html/Ticket/Elements/Tabs
deleted file mode 100644
index 98ed143e9..000000000
--- a/rt/html/Ticket/Elements/Tabs
+++ /dev/null
@@ -1,248 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/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, },
- _F => { title => loc('Reminders'),
- path => "Ticket/Reminders.html?id=" . $id,
- separator => 1, },
- _X => { title => loc('Jumbo'),
- path => "Ticket/ModifyAll.html?id=" . $id,
- },
-
-};
-
-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 ( $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
- and ( $can{'ModifyTicket'} or $Ticket->CurrentUserHasRight('TakeTicket') ) )
- {
- $actions->{'B'} = {
- path => "Ticket/Display.html?Action=Take&id=" . $id,
- title => loc('Take'),
- };
- }
- elsif ( $Ticket->OwnerObj->id != $session{CurrentUser}->id
- and ( $can{'ModifyTicket'} or $Ticket->CurrentUserHasRight('StealTicket') ) )
- {
- $actions->{'C'} = {
- path => "Ticket/Display.html?Action=Steal&id=" . $id,
- title => loc('Steal'),
- };
- }
-}
-
-if ( $can{'ModifyTicket'} or $Ticket->CurrentUserHasRight('CommentOnTicket') ) {
- $actions->{'E'} = {
- title => loc('Comment'),
- path => "Ticket/Update.html?Action=Comment&id=" . $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;
-$args= "?" . $m->comp(
- '/Elements/QueryString',
- 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'},
- Rows => $ARGS{'Rows'},
- ) if ($ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'});
-$args ||= '';
-
-$tabs->{"f"} = { path => "Search/Build.html?NewQuery=1",
- title => loc('New Search')};
-$tabs->{"g"} = { path => "Search/Build.html$args",
- title => loc('Edit Search')};
-$tabs->{"h"} = { path => "Search/Edit.html$args",
- title => loc('Advanced'),
- separator => 1 };
-if ($args) {
- $tabs->{"i"} = { path => "Search/Results.html$args",
- title => loc('Show Results'),
- };
- if ($current_tab =~ m{Search/Results.html}) {
- $current_tab = "Search/Results.html$args";
- }
- $tabs->{"j"} = { path => "Search/Bulk.html$args",
- title => loc('Bulk Update'),
- };
- if ($current_tab =~ m{Search/Bulk.html}) {
- $current_tab = "Search/Bulk.html$args";
- }
- 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
-</%ARGS>
diff --git a/rt/html/Ticket/History.html b/rt/html/Ticket/History.html
deleted file mode 100644
index 0f0a9301b..000000000
--- a/rt/html/Ticket/History.html
+++ /dev/null
@@ -1,89 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<br />
-
-<& /Ticket/Elements/ShowHistory ,
- Ticket => $Ticket,
- ShowHeaders => $ARGS{'ShowHeaders'},
- URIFile => 'History.html',
- Attachments => $attachments,
- AttachmentContent => $attachment_content
- &>
-
-<& /Elements/Callback, _CallbackName => 'AfterShowHistory', Ticket => $Ticket,
-current_tab => 'Ticket/History.html?id=' . $Ticket->id, %ARGS &>
-
-<%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/html/Ticket/Modify.html b/rt/html/Ticket/Modify.html
deleted file mode 100644
index 877bc0cba..000000000
--- a/rt/html/Ticket/Modify.html
+++ /dev/null
@@ -1,91 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<& /Elements/ListActions, actions => \@results &>
-<form method="post" action="Modify.html" enctype="multipart/form-data">
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &>
-<input type="hidden" class="hidden" name="id" value="<%$TicketObj->Id%>" />
-<&| /Widgets/TitleBox, title => loc('Modify ticket #[_1]',$TicketObj->Id) &>
-<& Elements/EditBasics, TicketObj => $TicketObj &>
-<& Elements/EditCustomFields, TicketObj => $TicketObj &>
-</&>
-
-<& /Elements/Submit, 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->QueueObj->TicketCustomFields();
-
-# Now let callbacks have a chance at editing %ARGS
-$m->comp('/Elements/Callback', TicketObj => $TicketObj, CustomFields => $CustomFields, ARGSRef => \%ARGS);
-
-my @results = ProcessTicketBasics(TicketObj => $TicketObj, ARGSRef => \%ARGS);
-my @cf_results = ProcessObjectCustomFieldUpdates(Object => $TicketObj, ARGSRef => \%ARGS);
-push (@results, @cf_results);
-
-# undef so that TransactionBatch scrips run and update the ticket
-$TicketObj = undef;
-$TicketObj = LoadTicket($id);
-
-# 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/html/Ticket/ModifyAll.html b/rt/html/Ticket/ModifyAll.html
deleted file mode 100644
index 7ad5b8768..000000000
--- a/rt/html/Ticket/ModifyAll.html
+++ /dev/null
@@ -1,225 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<& /Elements/ListActions, actions => \@results &>
-
-<form method="post" action="ModifyAll.html" enctype="multipart/form-data">
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &>
-<input type="hidden" class="hidden" name="id" value="<%$Ticket->Id%>" />
-
-<&| /Widgets/TitleBox, title => loc('Modify ticket # [_1]', $Ticket->Id) &>
-<& Elements/EditBasics, TicketObj => $Ticket &>
-<& Elements/EditCustomFields, TicketObj => $Ticket &>
-</&>
-
-<br />
-
-<&| /Widgets/TitleBox, title => loc('Dates') &>
-<& Elements/EditDates, TicketObj => $Ticket &>
-</&>
-
-<br />
-
-
-<&| /Widgets/TitleBox, title => loc('People') &>
-<& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &>
-</&>
-
-<br />
-
-<&| /Widgets/TitleBox, title => loc('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"><% $CF->Name %>:</td>
-<td class="entry"><& /Elements/EditCustomField,
- CustomField => $CF,
- NamePrefix => "Object-RT::Transaction--CustomField-"
- &><em><% $CF->FriendlyType %></em></td>
-</td></tr>
-% } # end if while
-% } # end of if
- <tr>
- <td class="label"><&|/l&>Attach</&>:</td>
- <td class="entry"><input name="UpdateAttachment" type="file" /></td>
- </tr>
- <tr>
- <td class="labeltop"><&|/l&>Content</&>:</td>
- <td class="entry"><& /Elements/MessageBox, Name=>"UpdateContent", QuoteTransaction=>$ARGS{QuoteTransaction} &></td>
- </tr>
-</table>
-</&>
-
-
-<& /Elements/Submit,
- Label => loc('Save Changes'),
- Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
-</form>
-
-<%INIT>
-
-
-
-my $Ticket = LoadTicket($id);
-
-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') );
-
-
-$m->comp('/Elements/Callback', TicketObj => $Ticket, ARGSRef => \%ARGS);
-my (@wresults, @results, @dresults, @lresults, @cf_results);
-
-unless ($OnlySearchForPeople or $OnlySearchForGroup ) {
- # 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);
- }
-
- }
-
- @wresults = ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS);
- @cf_results = ProcessObjectCustomFieldUpdates( Object => $Ticket, ARGSRef => \%ARGS);
- @dresults = ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS);
- @lresults = ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS);
-
- if ($ARGS{'UpdateAttachment'}) {
- my $subject = "$ARGS{'UpdateAttachment'}";
- # since CGI.pm deutf8izes the magic field, we need to add it back.
- Encode::_utf8_on($subject);
- # strip leading directories
- $subject =~ s#^.*[\\/]##;
-
- my $attachment = MakeMIMEEntity(
- Subject => $subject,
- Body => "",
- AttachmentFieldName => 'UpdateAttachment'
- );
- delete $ARGS{'UpdateAttachment'};
- $ARGS{'UpdateAttachments'}->{ $subject } = $attachment;
- }
-
- $ARGS{'UpdateContent'} =~ s/\r+\n/\n/g if $ARGS{'UpdateContent'};
-
- if ($ARGS{'UpdateAttachments'} || ( $ARGS{'UpdateContent'} && $ARGS{'UpdateContent'} ne "-- \n" .
- $session{'CurrentUser'}->UserObj->Signature)) {
- ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef=>\%ARGS, Actions=>\@results);
- }
- @results = ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS);
-}
-push @results, @wresults;
-push @results, @dresults;
-push @results, @lresults;
-push @results, @cf_results;
-
-# undef so that TransactionBatch scrips run and update the ticket
-$Ticket = undef;
-$Ticket = LoadTicket($id);
-
-# 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/html/Ticket/ModifyDates.html b/rt/html/Ticket/ModifyDates.html
deleted file mode 100644
index 189594f69..000000000
--- a/rt/html/Ticket/ModifyDates.html
+++ /dev/null
@@ -1,77 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<& /Elements/ListActions, actions => \@results &>
-
-<form method="post" action="ModifyDates.html">
-<& /Elements/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) &>
-<& Elements/EditDates, TicketObj => $TicketObj &>
-</&>
-<& /Elements/Submit, Label => loc('Save Changes') &>
-</form>
-
-
-<%INIT>
-
-my $TicketObj = LoadTicket($id);
-$m->comp('/Elements/Callback', TicketObj => $TicketObj, ARGSRef => \%ARGS);
-my @results = ProcessTicketDates( TicketObj => $TicketObj, ARGSRef => \%ARGS);
-
-</%INIT>
-
-
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/Ticket/ModifyLinks.html b/rt/html/Ticket/ModifyLinks.html
deleted file mode 100644
index 1310f6848..000000000
--- a/rt/html/Ticket/ModifyLinks.html
+++ /dev/null
@@ -1,82 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<& /Elements/ListActions, actions => \@results &>
-
-<form action="ModifyLinks.html" method="post">
-<input type="hidden" class="hidden" name="id" value="<%$Ticket->id%>" />
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &>
-<&| /Widgets/TitleBox, title => loc('Edit Links') &>
-
-<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &>
-</&>
-<& /Elements/Submit, Label => loc('Save Changes') &>
-</form>
-
-
-
-
-<%INIT>
-
-my $Ticket = LoadTicket($id);
-
-my @results;
-$m->comp('/Elements/Callback', TicketObj => $Ticket, ARGSRef => \%ARGS, Results => \@results );
-push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
-
-</%INIT>
-
-
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/Ticket/ModifyPeople.html b/rt/html/Ticket/ModifyPeople.html
deleted file mode 100644
index 5b5db16ff..000000000
--- a/rt/html/Ticket/ModifyPeople.html
+++ /dev/null
@@ -1,94 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-
-<& /Elements/ListActions, actions => \@results &>
-
-<form method="post" action="ModifyPeople.html">
-<input type="hidden" class="hidden" name="id" value="<%$Ticket->Id%>" />
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &>
-<&| /Widgets/TitleBox, title => loc('Modify people related to ticket #[_1]', $Ticket->Id), width => "100%", color=> "#333399" &>
-<& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &>
-</&>
-<& /Elements/Submit, Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
-</form>
-
-<%INIT>
-
-my (@results, @wresults);
-
-my $Ticket = LoadTicket($id);
-$m->comp('/Elements/Callback', TicketObj => $Ticket, ARGSRef => \%ARGS);
-
-# if we're trying to search for watchers and nothing else
-unless ($OnlySearchForPeople or $OnlySearchForGroup) {
- @results = ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS);
- @wresults = ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS);
-}
-
-push @results, @wresults;
-</%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/html/Ticket/Reminders.html b/rt/html/Ticket/Reminders.html
deleted file mode 100755
index e2245a644..000000000
--- a/rt/html/Ticket/Reminders.html
+++ /dev/null
@@ -1,71 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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) &>
-<form action="<%$RT::WebPath%>/Ticket/Reminders.html" method="post">
-<&|/Widgets/TitleBox, title => loc("Reminders"),
- title_class=> 'inverse',
- color => "#666699" &>
-
-<& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 1, Edit => 1 &>
-</&>
-<& /Elements/Submit, Label => 'Save'&>
-</form>
-
-
-<%INIT>
-
-my $Ticket = LoadTicket($id);
-
-</%INIT>
-<%ARGS>
-$id => undef
-</%ARGS>
diff --git a/rt/html/Ticket/ShowEmailRecord.html b/rt/html/Ticket/ShowEmailRecord.html
deleted file mode 100644
index b63da84a8..000000000
--- a/rt/html/Ticket/ShowEmailRecord.html
+++ /dev/null
@@ -1,73 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 $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 &>
-<pre style="padding: 2em;">
-<%$AttachmentObj->Headers%>
-
-<%$AttachmentObj->Content%>
-</pre>
-</body>
-</html>
-%$m->abort;
diff --git a/rt/html/Ticket/Update.html b/rt/html/Ticket/Update.html
deleted file mode 100644
index 171a0cb1d..000000000
--- a/rt/html/Ticket/Update.html
+++ /dev/null
@@ -1,228 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-<form action="Update.html" name="TicketUpdate"
- method="post" enctype="multipart/form-data">
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &>
-<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} %>" />
-<table width="100%" border="0">
-
-<tr><td align="right"><&|/l&>Status</&>:</td>
-<td>
-<& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus)&>
-<&|/l&>Owner</&>:
-<& /Elements/SelectOwner, Name=>"Owner", DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Name()), QueueObj => $TicketObj->QueueObj, TicketObj => $TicketObj, Default => $ARGS{'Owner'} &>
-<&|/l&>Worked</&>: <input size="4" name="UpdateTimeWorked" value="<% $ARGS{UpdateTimeWorked} %>" />
-<& /Elements/SelectTimeUnits, Name => 'UpdateTimeWorked'&>
-</td></tr>
-% my $skip;
-<& /Elements/Callback, _CallbackName => 'BeforeUpdateType', skip => \$skip, %ARGS &>
-% if (!$skip) {
-<input type="hidden" class="hidden" name="id" value="<%$TicketObj->Id%>" /><br />
-% }
-<tr><td align="right"><&|/l&>Update Type</&>:</td>
-<td><select name="UpdateType">
-% if ($CanComment) {
- <option value="private" <%$ARGS{'UpdateType'} eq "private" ? "SELECTED" : !$ARGS{'UpdateType'}&&$CommentDefault%>><&|/l&>Comments (Not sent to requestors)</&></option>
-% }
-% if ($CanRespond) {
- <option value="response" <%$ARGS{'UpdateType'} eq "response" ? "SELECTED" : !$ARGS{'UpdateType'}&&$ResponseDefault%>><&|/l&>Reply to requestors</&></option>
-% }
-</select>
-</td></tr>
-<tr><td align="right"><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || $TicketObj->Subject()%>" /></td></tr>
-<tr><td align="right"><&|/l&>Cc</&>:</td><td> <input name="UpdateCc" size="60"
-value="<%$ARGS{UpdateCc}||""%>" /><br />
-<i><font size="-2">
-<&|/l&>(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.)</&></font></i>
-</td></tr>
-<tr><td align="right"><&|/l&>Bcc</&>:</td><td> <input name="UpdateBcc" size="60" value="<%$ARGS{UpdateBcc}||""%>" /><br />
-<i><font size="-2">
-<&|/l&>(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.)</&></font></i>
-</td></tr>
-% if (exists $session{'Attachments'}) {
-<td>
-<&|/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
-
-% if (my $TxnCFs = $TicketObj->TransactionCustomFields) {
-% 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>
-</tr>
-% } # end if while
-% } # 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 align="right" valign="top"><&|/l&>Message</&>:</td><td>
-<& /Elements/Callback, _CallbackName => 'BeforeMessageBox', %ARGS &>
-% 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')) {
-<& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &>
-% }
-</form>
-<%INIT>
-my $CanRespond = 0;
-my $CanComment = 0;
-my $title;
-
-my $TicketObj = LoadTicket($id);
-
-unless($DefaultStatus){
- $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status());
-}
-
-if ($DefaultStatus =~ '^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 = "SELECTED";
-} else {
- $ResponseDefault = "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?
- $session{'Attachments'} = {} unless defined $session{'Attachments'};
-
- my $subject = "$ARGS{'Attach'}";
- # since CGI.pm deutf8izes the magic field, we need to add it back.
- Encode::_utf8_on($subject);
- # strip leading directories
- $subject =~ s#^.*[\\/]##;
-
- my $attachment = MakeMIMEEntity(
- Filename => $subject,
- Body => "",
- AttachmentFieldName => 'Attach'
- );
-
- $session{'Attachments'} = { %{$session{'Attachments'} || {}},
- $ARGS{'Attach'} => $attachment };
-}
-# }}}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
- delete $session{'Attachments'};
-}
-# }}}
-
-if ( exists $ARGS{SubmitTicket} ) {
- $m->comp('Display.html', TicketObj => $TicketObj, %ARGS);
- return;
-}
-
-</%INIT>
-
-<%ARGS>
-$id => undef
-$Action => undef
-$DefaultStatus => undef
-</%ARGS>
diff --git a/rt/html/Tools/MyDay.html b/rt/html/Tools/MyDay.html
deleted file mode 100644
index 20758f8ea..000000000
--- a/rt/html/Tools/MyDay.html
+++ /dev/null
@@ -1,117 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-<&|/l, $session{'CurrentUser'}->Name&>(displaying new and open tickets for [_1])</&>
-<form method="post" action="MyDay.html">
-<table width="100%" cellpadding="0" cellspacing="0">
-% while ( my $Ticket = $Tickets->Next()) {
-% my $class;
-% $i++;
-% if ($i % 2 ) {
-% $class = 'class="oddline"';
-% }
-<tr <%$class|n%>><td colspan="2"><h2><a
-href="<%$RT::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 &>
-</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/html/Tools/Offline.html b/rt/html/Tools/Offline.html
deleted file mode 100644
index 4558abd27..000000000
--- a/rt/html/Tools/Offline.html
+++ /dev/null
@@ -1,166 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-<& /Elements/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" value="foo" />
-<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;
- }
- $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/html/Tools/Reports/CreatedByDates.html b/rt/html/Tools/Reports/CreatedByDates.html
deleted file mode 100644
index 3df67eea5..000000000
--- a/rt/html/Tools/Reports/CreatedByDates.html
+++ /dev/null
@@ -1,94 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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</&>:
-<input size="20" name="CreatedAfter" value="<%$CreatedAfter%>" />
-<br /><&|/l&>Tickets created before</&>:
-<input size="20" name="CreatedBefore" value="<%$CreatedBefore%>" />
-
-<& /Elements/Submit&>
-</form>
diff --git a/rt/html/Tools/Reports/Elements/Tabs b/rt/html/Tools/Reports/Elements/Tabs
deleted file mode 100644
index 7fa7de8ab..000000000
--- a/rt/html/Tools/Reports/Elements/Tabs
+++ /dev/null
@@ -1,89 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
-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/html/Tools/Reports/ResolvedByDates.html b/rt/html/Tools/Reports/ResolvedByDates.html
deleted file mode 100644
index b0a66f402..000000000
--- a/rt/html/Tools/Reports/ResolvedByDates.html
+++ /dev/null
@@ -1,95 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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</&>:
-<input size="20" name="ResolvedAfter" value="<%$ResolvedAfter%>" />
-<br /><&|/l&>Tickets resolved before</&>:
-<input size="20" name="ResolvedBefore" value="<%$ResolvedBefore%>" />
-
-<& /Elements/Submit&>
-</form>
diff --git a/rt/html/Tools/Reports/ResolvedByOwner.html b/rt/html/Tools/Reports/ResolvedByOwner.html
deleted file mode 100644
index 7e60a1340..000000000
--- a/rt/html/Tools/Reports/ResolvedByOwner.html
+++ /dev/null
@@ -1,70 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Tools/Reports/index.html b/rt/html/Tools/Reports/index.html
deleted file mode 100644
index 0ba28c7a4..000000000
--- a/rt/html/Tools/Reports/index.html
+++ /dev/null
@@ -1,50 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/Callback &>
diff --git a/rt/html/Tools/index.html b/rt/html/Tools/index.html
deleted file mode 100644
index f49868aba..000000000
--- a/rt/html/Tools/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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") &>
-
diff --git a/rt/html/User/Delegation.html b/rt/html/User/Delegation.html
deleted file mode 100644
index a85a31c97..000000000
--- a/rt/html/User/Delegation.html
+++ /dev/null
@@ -1,107 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/User/Elements/DelegateRights b/rt/html/User/Elements/DelegateRights
deleted file mode 100644
index e519146ee..000000000
--- a/rt/html/User/Elements/DelegateRights
+++ /dev/null
@@ -1,109 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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' %> />
-% 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 $sectionheading = loc("[_1] rights", loc($ObjectType =~ /^RT::(.*)$/));
-# 'System' # loc
-# 'Group' # loc
-# 'Queue' # loc
-
-</%init>
-<%args>
-$ObjectType => undef
-$objects => undef
-$personalgroups => undef
-</%args>
diff --git a/rt/html/User/Elements/GroupTabs b/rt/html/User/Elements/GroupTabs
deleted file mode 100644
index e02953dc6..000000000
--- a/rt/html/User/Elements/GroupTabs
+++ /dev/null
@@ -1,84 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/User/Elements/Tabs b/rt/html/User/Elements/Tabs
deleted file mode 100644
index 24faa8bdf..000000000
--- a/rt/html/User/Elements/Tabs
+++ /dev/null
@@ -1,89 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 => 'User/Prefs.html',
- current_tab => $current_tab,
- Title => $Title &>
-
-<%INIT>
- my $tabs = { a => { 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->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
- 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/html/User/Groups/Members.html b/rt/html/User/Groups/Members.html
deleted file mode 100644
index a02aa32ac..000000000
--- a/rt/html/User/Groups/Members.html
+++ /dev/null
@@ -1,160 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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" />
-<%$member->MemberObj->Object->Name%> (<%$member->MemberObj->Object->RealName%>)
-% }
-</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/html/User/Groups/Modify.html b/rt/html/User/Groups/Modify.html
deleted file mode 100644
index f0e31f4dd..000000000
--- a/rt/html/User/Groups/Modify.html
+++ /dev/null
@@ -1,157 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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 ( $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";
-}
-
-</%INIT>
-
-
-<%ARGS>
-$Create => undef
-$Name => undef
-$Description => undef
-$SetEnabled => undef
-$Enabled => undef
-$id => undef
-</%ARGS>
diff --git a/rt/html/User/Groups/index.html b/rt/html/User/Groups/index.html
deleted file mode 100644
index 5e44feb44..000000000
--- a/rt/html/User/Groups/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-<&|/l&>Personal groups</&>:<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/html/User/Prefs.html b/rt/html/User/Prefs.html
deleted file mode 100644
index 54a950d7c..000000000
--- a/rt/html/User/Prefs.html
+++ /dev/null
@@ -1,289 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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::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>
-</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>
-</&>
-<& /Elements/Callback, _CallbackName => 'FormLeftColumn', UserObj => $UserObj, %ARGS &>
-</td>
-<td valign="top" class="boxcontainer">
-% unless ($RT::WebExternalAuth and !$RT::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" />
-</td>
-</tr>
-<tr><td class="label">
-<&|/l&>Retype Password</&>:
-</td>
-<td class="value">
-<input type="password" name="Pass2" />
-</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>
-</&>
-<& /Elements/Callback, _CallbackName => 'FormRightColumn', UserObj => $UserObj, %ARGS &>
-</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>
-</table>
-
-<& /Elements/Callback, _CallbackName => 'FormEnd', UserObj => $UserObj, %ARGS &>
-
-<& /Elements/Submit, Label => loc('Save Preferences') &>
-</form>
-
-
-<%INIT>
-
-my $UserObj = new RT::User($session{'CurrentUser'});
-my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results);
-
-my ($val, $msg);
-
-
- $UserObj->Load($id) || $UserObj->Load($Name) || Abort("Couldn't load user '$Name'");
- $val = $UserObj->Id();
-
-
-
-
-
-
-# If we have a user to modify, lets try.
-if ($UserObj->Id) {
-
- 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
- );
-
- $m->comp('/Elements/Callback', _CallbackName => 'UpdateLogic',
- fields => \@fields,
- results => \@results,
- UserObj => $UserObj,
- ARGSRef => \%ARGS);
-
- my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
- Object => $UserObj,
- ARGSRef => \%ARGS );
- if ($Lang) {
- $session{'CurrentUser'}->LanguageHandle($Lang);
- $session{'CurrentUser'} = $session{'CurrentUser'}; # force writeback
- }
-
- push (@results,@fieldresults);
-
-
-# {{{ 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 ($Pass1 ne '') 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 ( $Pass1 && ($Pass1 ne $Pass2)) {
- push @results, loc("Passwords do not match. Your password has not been changed");
-}
-
-# }}}
-}
-
-
-</%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/html/Widgets/ComboBox b/rt/html/Widgets/ComboBox
deleted file mode 100644
index 164749ce8..000000000
--- a/rt/html/Widgets/ComboBox
+++ /dev/null
@@ -1,70 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<nobr>
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/combobox.js"></script>
-
-<span id="<% $Name %>_Container" class="combobox">
-<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"></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>
-</span>
-<script language="javascript"><!--
-ComboBox_InitWith('<% $Name %>');
-//--></script>
-</nobr>
-<%ARGS>
-$Name
-$Size => undef
-$Rows => 5
-$Default => ''
-@Values => ()
-</%ARGS>
diff --git a/rt/html/Widgets/SavedSearch b/rt/html/Widgets/SavedSearch
deleted file mode 100644
index b3152129e..000000000
--- a/rt/html/Widgets/SavedSearch
+++ /dev/null
@@ -1,158 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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} ||= 'new';
-my $SearchParams = { map { $_ => $args->{$_} } @{$self->{SearchFields}} };
-
-if ( my ( $container_object, $search_id ) = _parse_saved_search( $args->{'LoadSavedSearch'} ) ) {
- my $search = $container_object->Attributes->WithId($search_id);
- # We have a $search and now; import the others
- $self->{SearchId} = $args->{'LoadSavedSearch'};
- $self->{CurrentSearch}{Object} = $search;
- $args->{$_} = $search->SubValue($_) for @{ $self->{SearchFields} };
-}
-
-# 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->{Save} ) {
- if ( my $search = $self->{CurrentSearch}{Object} ) {
- # rename
- $search->SetDescription( $args->{Description} );
- push @actions, loc($self->{SearchType}).loc( ' [_1] renamed to [_2].', $self->{CurrentSearch}{Description}, $args->{Description} );
- }
- else {
- # new saved search
- my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} );
- my ( $ok, $search_msg ) = $saved_search->Save(
- Privacy => $args->{'Owner'},
- Name => $args->{'Description'},
- Type => $self->{'SearchType'},
- SearchParams => $SearchParams
- );
- if ($ok) {
- $self->{CurrentSearch}{Object} = $saved_search->{Attribute};
- push @actions, loc($self->{SearchType}).loc( ' [_1] saved.', $args->{Description} );
- } else {
- push @actions,
- [ loc("Can't save [_1]", loc($self->{SearchType})) . ': ' . loc($search_msg), 0 ];
- }
- }
-}
-
-if ( $args->{Delete} && $self->{CurrentSearch}{Object} ) {
- my ($ok, $msg) = $self->{CurrentSearch}{Object}->Delete;
- push @actions, $ok ? loc($self->{SearchType}).loc( ' [_1] deleted.', $self->{CurrentSearch}{Object}->Description ) : $msg;
- delete $self->{CurrentSearch}{Object};
- delete $self->{SearchId};
-
-}
-
-$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, Name => 'Owner', SearchType => $self->{SearchType}, AllowCopy => 0,
- CurrentSearch => $self->{CurrentSearch}, SearchId => $self->{SearchId}, Title => $Title &><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 %>" />
-% }
-% }
-</form>
-<%ARGS>
-$self => undef
-$Action => ''
-$Title => loc('Saved searches')
-</%ARGS>
-<%init>
-</%init>
-</%method>
diff --git a/rt/html/Widgets/SelectionBox b/rt/html/Widgets/SelectionBox
deleted file mode 100644
index c58a0a1a1..000000000
--- a/rt/html/Widgets/SelectionBox
+++ /dev/null
@@ -1,243 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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:sow, 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::WebPath%>/NoAuth/js/class.js"></script>
-<script type="text/javascript" src="<%$RT::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'};
- ++$self->{Modified};
- if ($current && !ref ($current)) {
- $current = [$current];
- }
-
- 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>
-<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 ($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</&>" />
-% }
-
-% 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/html/Widgets/TitleBox b/rt/html/Widgets/TitleBox
deleted file mode 100644
index 3e4afa0b2..000000000
--- a/rt/html/Widgets/TitleBox
+++ /dev/null
@@ -1,54 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Widgets/TitleBoxEnd b/rt/html/Widgets/TitleBoxEnd
deleted file mode 100755
index a1f18df1b..000000000
--- a/rt/html/Widgets/TitleBoxEnd
+++ /dev/null
@@ -1,59 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/html/Widgets/TitleBoxStart b/rt/html/Widgets/TitleBoxStart
deleted file mode 100755
index 602106e71..000000000
--- a/rt/html/Widgets/TitleBoxStart
+++ /dev/null
@@ -1,86 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 %>" id="<% $id %>">
- <div class="titlebox-title<% $title_class && " $title_class" %>">
-% if ($hideable) {
- <span class="widget"><a href="#" onclick="return rollup('<%$tid%>');" onfocus="this.blur(); return false;" title="Toggle visibility">X</a></span>
-% }
- <span class="left"><% $title_href && qq[<a href="$title_href">] | n %><% $title |n %><% $title_href && "</a>" |n%></span>
- <span class="right"><% $titleright_href && qq[<a href="$titleright_href">] | n %><% $titleright |n %><% $titleright_href && "</a>" |n%></span>
- </div>
- <div class="titlebox-content <% $bodyclass %>" id="<%$tid%>">
-
-<%ARGS>
-$width => undef
-$class => ''
-$bodyclass => ''
-$title_href => undef
-$title => ''
-$title_class => ''
-$titleright_href => undef
-$titleright => undef
-$id => ''
-$hideable => 1
-</%ARGS>
-
-<%init>
-#
-# This should be pretty bulletproof
-#
-my $page = $m->request_comp->path;
-
-my $tid = "TitleBox--$page--" .
- join '--', ($class, $bodyclass, $title, $id);
-
-$tid =~ s{/}{_}g;
-
-my $i = 0;
-$i++ while $m->notes("$tid-$i");
-$m->notes("$tid-$i" => 1);
-$tid = "$tid-$i";
-</%init>
diff --git a/rt/html/autohandler b/rt/html/autohandler
deleted file mode 100644
index 57ab22ade..000000000
--- a/rt/html/autohandler
+++ /dev/null
@@ -1,331 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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>
-
-# Roll back any dangling transactions from a previous failed connection
-$RT::Handle->ForceRollback() if $RT::Handle->TransactionDepth;
-
-
-if ($RT::StatementLog) {
- $RT::Handle->ClearSQLStatementLog;
- $RT::Handle->LogSQLStatements(1);
-}
-
-local *session
- unless $m->is_subrequest; # avoid reentrancy, as suggested by masonbook
-
-# Disable AutoFlush using an attribute
-if ( $m->request_comp->attr_exists('AutoFlush') ) {
- $m->autoflush( $m->request_comp->attr('AutoFlush') );
-}
-
-%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;
-
-# Latter 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};
-}
-
-$m->{'rt_base_time'} = [ Time::HiRes::gettimeofday() ];
-
-$m->comp( '/Elements/SetupSessionCookie', %ARGS );
-
-unless ( $session{'CurrentUser'} && $session{'CurrentUser'}->Id ) {
- $session{'CurrentUser'} = RT::CurrentUser->new();
-}
-
-# Set the proper encoding for the current language handle
-$r->content_type("text/html; charset=utf-8");
-
-# If it's a noauth file, don't ask for auth.
-if ( $m->base_comp->path =~ $RT::WebNoAuthRegex ) {
- $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %ARGS);
- $m->abort;
-}
-
-# If RT is configured for external auth, let's go through and get REMOTE_USER
-elsif ($RT::WebExternalAuth) {
-
- # do we actually have a REMOTE_USER equivlent?
- if ( RT::Interface::Web::WebCanonicalizeInfo() ) {
-
- my $orig_user = $user;
-
- $user = RT::Interface::Web::WebCanonicalizeInfo();
- $session{'CurrentUser'} = RT::CurrentUser->new();
- my $load_method = $RT::WebExternalGecos ? 'LoadByGecos' : 'Load';
-
- if ( $^O eq 'MSWin32' and $RT::WebExternalGecos ) {
- my $NodeName = Win32::NodeName();
- $user =~ s/^\Q$NodeName\E\\//i;
- }
-
- $session{'CurrentUser'}->$load_method($user);
-
- if ( $RT::WebExternalAuto and !$session{'CurrentUser'}->Id() ) {
-
- # Create users on-the-fly
-
- my $UserObj = RT::User->new( RT::CurrentUser->new('RT_System') );
-
- my ( $val, $msg ) = $UserObj->Create(
- %{ ref($RT::AutoCreate) ? $RT::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.
- # FIXME: this is a horrible kludge. I'm sure there's something cleaner
- foreach my $attribute (
- 'Name', 'Comments',
- 'Signature', 'EmailAddress',
- 'PagerEmailAddress', 'FreeformContactInfo',
- 'Organization', 'Disabled',
- 'Privileged', 'RealName',
- 'NickName', 'Lang',
- 'EmailEncoding', 'WebEncoding',
- 'ExternalContactInfoId', 'ContactInfoSystem',
- 'ExternalAuthId', 'Gecos',
- 'HomePhone', 'WorkPhone',
- 'MobilePhone', 'PagerPhone',
- 'Address1', 'Address2',
- 'City', 'State',
- 'Zip', 'Country'
- )
- {
- $m->comp( '/Elements/Callback', %ARGS,
- _CallbackName => 'NewUser' );
-
- my $method = "Set$attribute";
- $UserObj->$method( $new_user_info->{$attribute} )
- if ( defined $new_user_info->{$attribute} );
- }
- $session{'CurrentUser'}->Load($user);
- }
- else {
-
- # we failed to successfully create the user. abort abort abort.
- delete $session{'CurrentUser'};
- $m->abort() unless $RT::WebFallbackToInternalAuth;
- $m->comp( '/Elements/Login', %ARGS,
- Error => loc( 'Cannot create user: [_1]', $msg ) );
- }
- }
-
- unless ( $session{'CurrentUser'}->Id() ) {
- delete $session{'CurrentUser'};
- $user = $orig_user;
-
- if ($RT::WebExternalOnly) {
- $m->comp( '/Elements/Login', %ARGS,
- Error => loc('You are not an authorized user') );
- $m->abort();
- }
- }
- }
- elsif ($RT::WebFallbackToInternalAuth) {
- unless ( defined( $session{'CurrentUser'} ) ) {
- $m->comp( '/Elements/Login', %ARGS,
- Error => loc('You are not an authorized user') );
- $m->abort();
- }
- }
- else {
-
- # WebExternalAuth is set, but we don't have a REMOTE_USER. abort
- delete $session{'CurrentUser'} if defined $session{'CurrentUser'};
- }
-}
-
-delete $session{'CurrentUser'}
- unless $session{'CurrentUser'}
- and $session{'CurrentUser'}->Id;
-
-# Process per-page authentication callbacks
-$m->comp( '/Elements/Callback', %ARGS, _CallbackName => 'Auth' );
-
-# If the user is logging in, let's authenticate
-if ( !$session{'CurrentUser'} && defined $user && defined $pass ) {
- $session{'CurrentUser'} = RT::CurrentUser->new();
- $session{'CurrentUser'}->Load($user);
-
- unless ( $session{'CurrentUser'}->id
- && $session{'CurrentUser'}->IsPassword($pass) )
- {
- delete $session{'CurrentUser'};
- $RT::Logger->error("FAILED LOGIN for $user from $ENV{'REMOTE_ADDR'}");
- $m->comp( '/Elements/Login', %ARGS,
- Error => loc('Your username or password is incorrect') );
- $m->comp( '/Elements/Callback', %ARGS, _CallbackName => 'FailedLogin' );
- $m->abort;
- }
- else {
- $RT::Logger->info(
- "Successful login for $user from $ENV{'REMOTE_ADDR'}");
- $m->comp( '/Elements/Callback', %ARGS, _CallbackName => 'SuccessfulLogin' );
- }
-}
-
-# If we've got credentials, let's serve the file up.
-if ( ( defined $session{'CurrentUser'} )
- and ( $session{'CurrentUser'}->Id ) )
-{
-
- # Process per-page global callbacks
- $m->comp( '/Elements/Callback', %ARGS );
-
- # If the user isn't privileged, they can only see SelfService
- if ( not $session{'CurrentUser'}->Privileged ) {
-
- # if the user is trying to access a ticket, redirect them
- if ( $m->request_comp->path =~ '^(/+)Ticket/Display.html'
- and $ARGS{'id'} )
- {
- RT::Interface::Web::Redirect($RT::WebURL."SelfService/Display.html?id=".$ARGS{'id'});
- }
-
- # otherwise, drop the user at the SelfService default page
- elsif ( $m->base_comp->path !~ $RT::SelfServiceRegex ) {
- RT::Interface::Web::Redirect($RT::WebURL."SelfService/");
- }
- else {
- $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %ARGS);
- }
- }
- else {
- $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %ARGS);
- }
-}
-
-# If we have no credentials
-else {
- $m->comp( '/Elements/Login', %ARGS );
- $m->abort();
-}
-
-if ($RT::StatementLog) {
- 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 => $RT::StatementLog,
- message => "SQL(" . sprintf( "%.2f", $duration ) . "s): $sql;"
- . (
- @bind ? " [ bound values: @{[map{qq|'$_'|} @bind]} ]" : ""
- )
- );
- }
-}
-
-</%INIT>
-<& /Elements/Footer, %ARGS &>
-<%ARGS>
-$user => undef
-$pass => undef
-$menu => undef
-</%ARGS>
diff --git a/rt/html/index.html b/rt/html/index.html
deleted file mode 100644
index a74f3e566..000000000
--- a/rt/html/index.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<& /Elements/Header, Title=>loc("RT at a glance"), Refresh => $session{'home_refresh_interval'} &>
-<!--
-% $m->out('--'.'>');
-% 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,
- current_toptab => '',
- Title=>loc("RT at a glance"),
- actions => $actions,
- &>
-<& /Elements/ListActions, actions => \@results &>
-<& /Elements/MyRT &>
-<%init>
-
-my @results;
-
-if ($ARGS{'QuickCreate'} ) {
- my $ticket = RT::Ticket->new($session{'CurrentUser'});
- my ($tid, $trans, $tmsg) = $ticket->Create(Queue => $ARGS{'Queue'},
- Owner => $ARGS{'Owner'},
- Requestor => $session{'CurrentUser'}->UserObj->EmailAddress,
- Subject => $ARGS{'Subject'});
-
-
- push (@results, $tmsg);
-}
-
-
-if ( $ARGS{'q'} ) {
- RT::Interface::Web::Redirect($RT::WebURL."Search/Simple.html?q=".$m->interp->apply_escapes($ARGS{q}));
-}
-
-if ($ARGS{'HomeRefreshInterval'}) {
- $session{'home_refresh_interval'} = $ARGS{'HomeRefreshInterval'};
-}
-
-my $actions;
-if ($session{'CurrentUser'}->HasRight(Right => 'ModifySelf', Object => $RT::System)) {
- $actions = {
- A => { title => loc('Edit'),
- path => 'Prefs/MyRT.html',
- },
- };
-}
-
-</%init>
-
-%# --></body></html>
diff --git a/rt/html/l b/rt/html/l
deleted file mode 100644
index a65cd2afb..000000000
--- a/rt/html/l
+++ /dev/null
@@ -1,52 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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/lib/RT.pm b/rt/lib/RT.pm
index edfe1fb1a..a9d4cdaf9 100644
--- a/rt/lib/RT.pm
+++ b/rt/lib/RT.pm
@@ -57,39 +57,39 @@ use Cwd ();
use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_INSTALL_MODE);
-our $VERSION = '3.8.10';
+our $VERSION = '3.8.9';
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 $EtcPath = '/opt/rt3/etc';
+our $BinPath = '/opt/rt3/bin';
+our $SbinPath = '/opt/rt3/sbin';
+our $VarPath = '/opt/rt3/var';
+our $PluginPath = '';
+our $LocalPath = '/opt/rt3/local';
+our $LocalEtcPath = '/opt/rt3/local/etc';
+our $LocalLibPath = '/opt/rt3/local/lib';
+our $LocalLexiconPath = '/opt/rt3/local/po';
our $LocalPluginPath = $LocalPath."/plugins";
# $MasonComponentRoot is where your rt instance keeps its mason html files
-our $MasonComponentRoot = 'share/html';
+our $MasonComponentRoot = '/var/www/freeside/rt';
# $MasonLocalComponentRoot is where your rt instance keeps its site-local
# mason html files.
-our $MasonLocalComponentRoot = 'local/html';
+our $MasonLocalComponentRoot = '/opt/rt3/local/html';
# $MasonDataDir Where mason keeps its datafiles
-our $MasonDataDir = 'var/mason_data';
+our $MasonDataDir = '/usr/local/etc/freeside/masondata';
# RT needs to put session data (for preserving state between connections
# via the web interface)
-our $MasonSessionDir = 'var/session_data';
+our $MasonSessionDir = '/opt/rt3/var/session_data';
unless ( File::Spec->file_name_is_absolute($EtcPath) ) {
@@ -180,6 +180,8 @@ L<preloads classes /InitClasses> and L<set up logging /InitLogging>.
sub Init {
+ my @arg = @_;
+
CheckPerlRequirements();
InitPluginPaths();
@@ -188,7 +190,7 @@ sub Init {
ConnectToDatabase();
InitSystemObjects();
InitClasses();
- InitLogging();
+ InitLogging(@arg);
InitPlugins();
RT->Config->PostLoadCheck;
@@ -215,6 +217,8 @@ Create the Logger object and set up signal handlers.
sub InitLogging {
+ my %arg = @_;
+
# We have to set the record separator ($, man perlvar)
# or Log::Dispatch starts getting
# really pissy, as some other module we use unsets it.
@@ -350,39 +354,45 @@ sub InitLogging {
));
}
}
- InitSignalHandlers();
+ InitSignalHandlers(%arg);
}
sub InitSignalHandlers {
+ my %arg = @_;
+
# 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
## mechanism (see above).
- $SIG{__WARN__} = sub {
- # The 'wide character' warnings has to be silenced for now, at least
- # until HTML::Mason offers a sane way to process both raw output and
- # unicode strings.
- # use 'goto &foo' syntax to hide ANON sub from stack
- if( index($_[0], 'Wide character in ') != 0 ) {
- unshift @_, $RT::Logger, qw(level warning message);
- goto &Log::Dispatch::log;
- }
- };
+ unless ( $arg{'NoSignalHandlers'} ) {
+
+ $SIG{__WARN__} = sub {
+ # The 'wide character' warnings has to be silenced for now, at least
+ # until HTML::Mason offers a sane way to process both raw output and
+ # unicode strings.
+ # use 'goto &foo' syntax to hide ANON sub from stack
+ if( index($_[0], 'Wide character in ') != 0 ) {
+ unshift @_, $RT::Logger, qw(level warning message);
+ goto &Log::Dispatch::log;
+ }
+ };
-#When we call die, trap it and log->crit with the value of the die.
+ #When we call die, trap it and log->crit with the value of the die.
- $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];
- };
+ $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];
+ };
+
+ }
}
@@ -703,7 +713,9 @@ L<DBIx::SearchBuilder>
=cut
-require RT::Base;
-RT::Base->_ImportOverlays();
+eval "require RT_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT_Vendor.pm});
+eval "require RT_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT_Local.pm});
1;
diff --git a/rt/lib/RT.pm.in b/rt/lib/RT.pm.in
index 623de666f..d881e1bfc 100644
--- a/rt/lib/RT.pm.in
+++ b/rt/lib/RT.pm.in
@@ -180,6 +180,8 @@ L<preloads classes /InitClasses> and L<set up logging /InitLogging>.
sub Init {
+ my @arg = @_;
+
CheckPerlRequirements();
InitPluginPaths();
@@ -188,7 +190,7 @@ sub Init {
ConnectToDatabase();
InitSystemObjects();
InitClasses();
- InitLogging();
+ InitLogging(@arg);
InitPlugins();
RT->Config->PostLoadCheck;
@@ -215,6 +217,8 @@ Create the Logger object and set up signal handlers.
sub InitLogging {
+ my %arg = @_;
+
# We have to set the record separator ($, man perlvar)
# or Log::Dispatch starts getting
# really pissy, as some other module we use unsets it.
@@ -350,39 +354,45 @@ sub InitLogging {
));
}
}
- InitSignalHandlers();
+ InitSignalHandlers(%arg);
}
sub InitSignalHandlers {
+ my %arg = @_;
+
# 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
## mechanism (see above).
- $SIG{__WARN__} = sub {
- # The 'wide character' warnings has to be silenced for now, at least
- # until HTML::Mason offers a sane way to process both raw output and
- # unicode strings.
- # use 'goto &foo' syntax to hide ANON sub from stack
- if( index($_[0], 'Wide character in ') != 0 ) {
- unshift @_, $RT::Logger, qw(level warning message);
- goto &Log::Dispatch::log;
- }
- };
+ unless ( $arg{'NoSignalHandlers'} ) {
+
+ $SIG{__WARN__} = sub {
+ # The 'wide character' warnings has to be silenced for now, at least
+ # until HTML::Mason offers a sane way to process both raw output and
+ # unicode strings.
+ # use 'goto &foo' syntax to hide ANON sub from stack
+ if( index($_[0], 'Wide character in ') != 0 ) {
+ unshift @_, $RT::Logger, qw(level warning message);
+ goto &Log::Dispatch::log;
+ }
+ };
-#When we call die, trap it and log->crit with the value of the die.
+ #When we call die, trap it and log->crit with the value of the die.
- $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];
- };
+ $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];
+ };
+
+ }
}
@@ -703,7 +713,9 @@ L<DBIx::SearchBuilder>
=cut
-require RT::Base;
-RT::Base->_ImportOverlays();
+eval "require RT_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT_Vendor.pm});
+eval "require RT_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT_Local.pm});
1;
diff --git a/rt/lib/RT/ACE.pm b/rt/lib/RT/ACE.pm
index dca50c359..1501a125e 100755
--- a/rt/lib/RT/ACE.pm
+++ b/rt/lib/RT/ACE.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -69,7 +44,11 @@ RT::ACE
=cut
package RT::ACE;
-use base 'RT::Record';
+use RT::Record;
+
+
+use vars qw( @ISA );
+@ISA= qw( RT::Record );
sub _Init {
my $self = shift;
@@ -82,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -125,7 +104,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -134,14 +113,14 @@ Returns the current value of id.
=cut
-=head2 PrincipalType
+=item PrincipalType
Returns the current value of PrincipalType.
(In the database, PrincipalType is stored as varchar(25).)
-=head2 SetPrincipalType VALUE
+=item SetPrincipalType VALUE
Set PrincipalType to VALUE.
@@ -152,14 +131,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 PrincipalId
+=item PrincipalId
Returns the current value of PrincipalId.
(In the database, PrincipalId is stored as int(11).)
-=head2 SetPrincipalId VALUE
+=item SetPrincipalId VALUE
Set PrincipalId to VALUE.
@@ -170,14 +149,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 RightName
+=item RightName
Returns the current value of RightName.
(In the database, RightName is stored as varchar(25).)
-=head2 SetRightName VALUE
+=item SetRightName VALUE
Set RightName to VALUE.
@@ -188,14 +167,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ObjectType
+=item ObjectType
Returns the current value of ObjectType.
(In the database, ObjectType is stored as varchar(25).)
-=head2 SetObjectType VALUE
+=item SetObjectType VALUE
Set ObjectType to VALUE.
@@ -206,14 +185,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ObjectId
+=item ObjectId
Returns the current value of ObjectId.
(In the database, ObjectId is stored as int(11).)
-=head2 SetObjectId VALUE
+=item SetObjectId VALUE
Set ObjectId to VALUE.
@@ -224,14 +203,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 DelegatedBy
+=item DelegatedBy
Returns the current value of DelegatedBy.
(In the database, DelegatedBy is stored as int(11).)
-=head2 SetDelegatedBy VALUE
+=item SetDelegatedBy VALUE
Set DelegatedBy to VALUE.
@@ -242,14 +221,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 DelegatedFrom
+=item DelegatedFrom
Returns the current value of DelegatedFrom.
(In the database, DelegatedFrom is stored as int(11).)
-=head2 SetDelegatedFrom VALUE
+=item SetDelegatedFrom VALUE
Set DelegatedFrom to VALUE.
@@ -261,30 +240,47 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
PrincipalType =>
- {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''},
+ {read => 1, write => 1, type => 'varchar(25)', default => ''},
PrincipalId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
RightName =>
- {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''},
+ {read => 1, write => 1, type => 'varchar(25)', default => ''},
ObjectType =>
- {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''},
+ {read => 1, write => 1, type => 'varchar(25)', default => ''},
ObjectId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
DelegatedBy =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
DelegatedFrom =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::ACE_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/ACE_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ACE_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/ACE_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ACE_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/ACE_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -294,7 +290,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/ACL.pm b/rt/lib/RT/ACL.pm
index 94a0c9109..81f59c6d0 100755
--- a/rt/lib/RT/ACL.pm
+++ b/rt/lib/RT/ACL.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -72,9 +47,12 @@ use strict;
package RT::ACL;
-use base 'RT::SearchBuilder';
+use RT::SearchBuilder;
use RT::ACE;
+use vars qw( @ISA );
+@ISA= qw(RT::SearchBuilder);
+
sub _Init {
my $self = shift;
@@ -86,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::ACE item
@@ -96,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::ACE->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::ACL_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/ACL_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ACL_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/ACL_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ACL_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/ACL_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -106,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Action.pm b/rt/lib/RT/Action.pm
index cd1f4c8c0..cb1eeccc8 100755
--- a/rt/lib/RT/Action.pm
+++ b/rt/lib/RT/Action.pm
@@ -204,6 +204,17 @@ sub IsApplicable {
}
# }}}
+sub Options {
+ my $self = shift;
+ return();
+}
+
+sub Rules {
+ my $self = shift;
+ return () if !$self->ScripObj or !$self->ScripObj->ActionRules;
+ return(split "\n", $self->ScripObj->ActionRules);
+}
+
# {{{ sub DESTROY
sub DESTROY {
my $self = shift;
@@ -219,6 +230,9 @@ sub DESTROY {
# }}}
-RT::Base->_ImportOverlays();
+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/Accumulate.pm b/rt/lib/RT/Action/Accumulate.pm
new file mode 100644
index 000000000..c4ca667ea
--- /dev/null
+++ b/rt/lib/RT/Action/Accumulate.pm
@@ -0,0 +1,44 @@
+package RT::Action::Accumulate;
+use base 'RT::Action';
+
+use strict;
+
+=head1 NAME
+
+RT::Action::Accumulate - Accumulate a running total in a ticket custom field.
+
+This action requires a transaction and ticket custom field with the same name.
+When a transaction is submitted with a numeric value in that field, the field
+value for the ticket will be incremented by that amount. Use this to create
+custom fields that behave like the "TimeWorked" field.
+
+Best used with an "On Update" condition that triggers on any transaction. The
+ticket custom field update itself does not a create a transaction.
+
+The argument to this action is the name of the custom field. They must have
+the same name, and should be single-valued fields.
+
+=cut
+
+sub Prepare {
+ my $self = shift;
+ my $cfname = $self->Argument or return 0;
+ $self->{'inc_by'} = $self->TransactionObj->FirstCustomFieldValue($cfname);
+ return ( $self->{'inc_by'} =~ /^(\d+)$/ );
+}
+
+sub Commit {
+ my $self = shift;
+ my $cfname = $self->Argument;
+ my $newval = $self->{'inc_by'} +
+ ($self->TicketObj->FirstCustomFieldValue($cfname) || 0);
+ my ($val) = $self->TicketObj->AddCustomFieldValue(
+ Field => 'Support time',
+ Value => $newval,
+ RecordTransaction => 0,
+ );
+ return $val;
+}
+
+1;
+
diff --git a/rt/lib/RT/Action/Autoreply.pm b/rt/lib/RT/Action/Autoreply.pm
index e3e792ea7..81f7bddfa 100755
--- a/rt/lib/RT/Action/Autoreply.pm
+++ b/rt/lib/RT/Action/Autoreply.pm
@@ -1,71 +1,34 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
package RT::Action::Autoreply;
+require RT::Action::SendEmail;
use strict;
-use warnings;
-
-use base qw(RT::Action::SendEmail);
-
-=head2 Prepare
-
-Set up the relevant recipients, then call our parent.
-
-=cut
+use vars qw/@ISA/;
+@ISA = qw(RT::Action::SendEmail);
-sub Prepare {
- my $self = shift;
- $self->SetRecipients();
- $self->SUPER::Prepare();
-}
-
# {{{ sub SetRecipients
=head2 SetRecipients
@@ -96,37 +59,38 @@ Set this message\'s return address to the apropriate queue address
sub SetReturnAddress {
my $self = shift;
+ my %args = ( is_comment => 0,
+ @_
+ );
- my $friendly_name;
-
- if (RT->Config->Get('UseFriendlyFromLine')) {
- $friendly_name = $self->TicketObj->QueueObj->Description ||
- $self->TicketObj->QueueObj->Name;
- }
-
- $self->SUPER::SetReturnAddress( @_, friendly_name => $friendly_name );
+ 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')) {
+ my $friendly_name = $self->TicketObj->QueueObj->Description ||
+ $self->TicketObj->QueueObj->Name;
+ $friendly_name =~ s/"/\\"/g;
+ $self->SetHeader('From', "\"$friendly_name\" <$replyto>");
+ }
+
+ unless ($self->TemplateObj->MIMEObj->head->get('Reply-To')) {
+ $self->SetHeader('Reply-To', "$replyto");
+ }
}
# }}}
-# {{{{ 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' );
-}
-
-# }}}
-
-RT::Base->_ImportOverlays();
+eval "require RT::Action::Autoreply_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Autoreply_Vendor.pm});
+eval "require RT::Action::Autoreply_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Autoreply_Local.pm});
1;
diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm
index 7b8a13699..0a7eca3d8 100644
--- a/rt/lib/RT/Action/CreateTickets.pm
+++ b/rt/lib/RT/Action/CreateTickets.pm
@@ -763,6 +763,7 @@ sub ParseLines {
FinalPriority => $args{'finalpriority'} || 0,
SquelchMailTo => $args{'squelchmailto'},
Type => $args{'type'},
+ $self->Rules
);
if ( $args{content} ) {
@@ -1239,7 +1240,28 @@ sub PostProcess {
}
-RT::Base->_ImportOverlays();
+sub Options {
+ my $self = shift;
+ my $queues = RT::Queues->new($self->CurrentUser);
+ $queues->UnLimit;
+ my @names;
+ while (my $queue = $queues->Next) {
+ push @names, $queue->Id, $queue->Name;
+ }
+ return (
+ {
+ 'name' => 'Queue',
+ 'label' => 'In queue',
+ 'type' => 'select',
+ 'options' => \@names
+ }
+ )
+}
+
+eval "require RT::Action::CreateTickets_Vendor";
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Vendor.pm} );
+eval "require RT::Action::CreateTickets_Local";
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Local.pm} );
1;
diff --git a/rt/lib/RT/Action/EscalatePriority.pm b/rt/lib/RT/Action/EscalatePriority.pm
index 5f8f879e2..94d6e76f0 100644
--- a/rt/lib/RT/Action/EscalatePriority.pm
+++ b/rt/lib/RT/Action/EscalatePriority.pm
@@ -121,7 +121,12 @@ sub Prepare {
# we've got a due date. now there are other things we should do
else {
- my $diff_in_seconds = $due->Diff(time());
+ my $arg = $self->Argument || '';
+ my $now = time();
+ if ( $arg =~ /CurrentTime:\s*(\d+)/i ) {
+ $now = $1;
+ }
+ my $diff_in_seconds = $due->Diff($now);
my $diff_in_days = int( $diff_in_seconds / 86400);
#if we haven't hit the due date yet
@@ -158,6 +163,9 @@ sub Commit {
}
}
-RT::Base->_ImportOverlays();
+eval "require RT::Action::EscalatePriority_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/EscalatePriority_Vendor.pm});
+eval "require RT::Action::EscalatePriority_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/EscalatePriority_Local.pm});
1;
diff --git a/rt/lib/RT/Action/EscalateQueue.pm b/rt/lib/RT/Action/EscalateQueue.pm
new file mode 100755
index 000000000..adafbdfb7
--- /dev/null
+++ b/rt/lib/RT/Action/EscalateQueue.pm
@@ -0,0 +1,141 @@
+=head1 NAME
+
+RT::Action::EscalateQueue - move a ticket to a different queue when it reaches its final priority
+
+=head1 DESCRIPTION
+
+EscalateQueue is a ScripAction that will move a ticket to a new
+queue when its priority equals its final priority. It is designed
+to be used with LinearEscalate or another action that increments
+ticket priority on some schedule. Like those actions, it is intended
+to be called from an escalation tool.
+
+=head1 CONFIGURATION
+
+FinalPriority is a ticket property, defaulting to the queue property.
+
+EscalateQueue is a queue custom field using RT::CustomFieldValues::Queue
+as its data source (that is, it refers to another queue). Tickets at
+FinalPriority will be moved to that queue.
+
+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::EscalateQueue
+
+No action argument is needed. Each ticket will be escalated based on the
+EscalateQueue property of its current queue.
+
+=cut
+
+package RT::Action::EscalateQueue;
+
+use strict;
+use warnings;
+use base qw(RT::Action);
+
+our $VERSION = '0.01';
+
+#What does this type of Action does
+
+sub Describe {
+ my $self = shift;
+ my $class = ref($self) || $self;
+ return "$class will move a ticket to its escalation queue when it reaches its final priority."
+}
+
+#This Prepare only returns 1 if the ticket will be escalated.
+
+sub Prepare {
+ my $self = shift;
+
+ my $ticket = $self->TicketObj;
+ my $queue = $ticket->QueueObj;
+ my $new_queue = $queue->FirstCustomFieldValue('EscalateQueue');
+
+ my $ticketid = 'Ticket #'.$ticket->Id; #for debug messages
+ if ( $ticket->InitialPriority == $ticket->FinalPriority ) {
+ $RT::Logger->debug("$ticketid has no priority range. Not escalating.");
+ return 0;
+ }
+
+ if ( $ticket->Priority == $ticket->FinalPriority ) {
+ if (!$new_queue) {
+ $RT::Logger->debug("$ticketid has no escalation queue. Not escalating.");
+ return 0;
+ }
+ if ($new_queue eq $queue->Name) {
+ $RT::Logger->debug("$ticketid would be escalated to its current queue.");
+ return 0;
+ }
+ $self->{'new_queue'} = $new_queue;
+ return 1;
+ }
+ return 0;
+}
+
+# whereas Commit returns 1 if it succeeds at whatever it's doing
+sub Commit {
+ my $self = shift;
+
+ return 1 if !exists($self->{'new_queue'});
+
+ my $ticket = $self->TicketObj;
+ my $ticketid = 'Ticket #'.$ticket->Id;
+ my $new_queue = RT::Queue->new($ticket->CurrentUser);
+ $new_queue->Load($self->{'new_queue'});
+ if ( ! $new_queue ) {
+ $RT::Logger->debug("Escalation queue ".$self->{'new_queue'}." not found.");
+ return 0;
+ }
+
+ $RT::Logger->debug("Escalating $ticket from ".$ticket->QueueObj->Name .
+ ' to '. $new_queue->Name . ', FinalPriority '.$new_queue->FinalPriority);
+
+ my ( $val, $msg ) = $ticket->SetQueue($self->{'new_queue'});
+ if (! $val) {
+ $RT::Logger->error( "Couldn't set queue: $msg" );
+ return (0, $msg);
+ }
+
+ # Set properties of the ticket according to its new queue, so that
+ # escalation Does What You Expect. Don't record transactions for this;
+ # the queue change should be enough.
+
+ ( $val, $msg ) = $ticket->_Set(
+ Field => 'FinalPriority',
+ Value => $new_queue->FinalPriority,
+ RecordTransaction => 0,
+ );
+ if (! $val) {
+ $RT::Logger->error( "Couldn't set new final priority: $msg" );
+ return (0, $msg);
+ }
+ my $Due = new RT::Date( $ticket->CurrentUser );
+ if ( my $due_in = $new_queue->DefaultDueIn ) {
+ $Due->SetToNow;
+ $Due->AddDays( $due_in );
+ }
+ ( $val, $msg ) = $ticket->_Set(
+ Field => 'Due',
+ Value => $Due->ISO,
+ RecordTransaction => 0,
+ );
+ if (! $val) {
+ $RT::Logger->error( "Couldn't set new due date: $msg" );
+ return (0, $msg);
+ }
+ return 1;
+}
+
+1;
+
+=head1 AUTHOR
+
+Mark Wells E<lt>mark@freeside.bizE<gt>
+
+Based on in part LinearEscalate by Kevin Riggle E<lt>kevinr@bestpractical.comE<gt>
+and Ruslan Zakirov E<lt>ruz@bestpractical.comE<gt> .
+
+=cut
diff --git a/rt/lib/RT/Action/Generic.pm b/rt/lib/RT/Action/Generic.pm
index d747813f0..007d299c7 100755
--- a/rt/lib/RT/Action/Generic.pm
+++ b/rt/lib/RT/Action/Generic.pm
@@ -1,54 +1,29 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
=head1 NAME
- RT::Action::Generic - deprecated, see RT::Action
+ RT::Action::Generic - a generic baseclass for RT Actions
=head1 SYNOPSIS
@@ -56,18 +31,165 @@
=head1 DESCRIPTION
-This module is provided only for backwards compatibility.
-
=head1 METHODS
+=begin testing
+
+ok (require RT::Action::Generic);
+
+=end testing
=cut
-use strict;
-use warnings;
package RT::Action::Generic;
-use base 'RT::Action';
-RT::Base->_ImportOverlays();
-1;
+use strict;
+
+# {{{ sub new
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return $self;
+}
+# }}}
+
+# {{{ sub new
+sub loc {
+ my $self = shift;
+ return $self->{'ScripObj'}->loc(@_);
+}
+# }}}
+
+# {{{ sub _Init
+sub _Init {
+ my $self = shift;
+ my %args = ( TransactionObj => undef,
+ TicketObj => undef,
+ ScripObj => undef,
+ TemplateObj => undef,
+ Argument => undef,
+ Type => undef,
+ @_ );
+
+
+ $self->{'Argument'} = $args{'Argument'};
+ $self->{'ScripObj'} = $args{'ScripObj'};
+ $self->{'TicketObj'} = $args{'TicketObj'};
+ $self->{'TransactionObj'} = $args{'TransactionObj'};
+ $self->{'TemplateObj'} = $args{'TemplateObj'};
+ $self->{'Type'} = $args{'Type'};
+}
+# }}}
+
+# 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 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->{'TemplateObj'} =undef
+ $self->{'TicketObj'} = undef;
+ $self->{'TransactionObj'} = undef;
+ $self->{'ScripObj'} = undef;
+
+
+
+}
+
+# }}}
+
+eval "require RT::Action::Generic_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Generic_Vendor.pm});
+eval "require RT::Action::Generic_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Generic_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm
index 3f58bf52f..1e4e4c073 100755
--- a/rt/lib/RT/Action/Notify.pm
+++ b/rt/lib/RT/Action/Notify.pm
@@ -1,73 +1,34 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
package RT::Action::Notify;
+require RT::Action::SendEmail;
use strict;
-use warnings;
+use vars qw/@ISA/;
+@ISA = qw(RT::Action::SendEmail);
-use base qw(RT::Action::SendEmail);
-
-use Email::Address;
-
-=head2 Prepare
-
-Set up the relevant recipients, then call our parent.
-
-=cut
-
-
-sub Prepare {
- my $self = shift;
- $self->SetRecipients();
- $self->SUPER::Prepare();
-}
+# {{{ sub SetRecipients
=head2 SetRecipients
@@ -79,89 +40,93 @@ Explicitly B<does not> notify the creator of the transaction by default
sub SetRecipients {
my $self = shift;
- 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 ( 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 =~ /\bOtherRecipients\b/) {
+ if ($self->TransactionObj->Attachments->First) {
+ push (@Cc, $self->TransactionObj->Attachments->First->GetHeader('RT-Send-Cc'));
+ push (@Bcc, $self->TransactionObj->Attachments->First->GetHeader('RT-Send-Bcc'));
}
}
if ( $arg =~ /\bRequestor\b/ ) {
- push @To, $ticket->Requestors->MemberEmailAddresses;
+ push ( @To, $self->TicketObj->Requestors->MemberEmailAddresses );
}
+
+
if ( $arg =~ /\bCc\b/ ) {
#If we have a To, make the Ccs, Ccs, otherwise, promote them to To
if (@To) {
- push ( @Cc, $ticket->Cc->MemberEmailAddresses );
- push ( @Cc, $ticket->QueueObj->Cc->MemberEmailAddresses );
+ push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses );
+ push ( @Cc, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses );
}
else {
- push ( @Cc, $ticket->Cc->MemberEmailAddresses );
- push ( @To, $ticket->QueueObj->Cc->MemberEmailAddresses );
+ push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses );
+ push ( @To, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses );
}
}
- if ( $arg =~ /\bOwner\b/ && $ticket->OwnerObj->id != $RT::Nobody->id ) {
- # If we're not sending to Ccs or requestors,
+ if ( ( $arg =~ /\bOwner\b/ )
+ && ( $self->TicketObj->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, $ticket->OwnerObj->EmailAddress );
+ push ( @Bcc, $self->TicketObj->OwnerObj->EmailAddress );
}
else {
- push ( @To, $ticket->OwnerObj->EmailAddress );
+ push ( @To, $self->TicketObj->OwnerObj->EmailAddress );
}
}
if ( $arg =~ /\bAdminCc\b/ ) {
- push ( @Bcc, $ticket->AdminCc->MemberEmailAddresses );
- push ( @Bcc, $ticket->QueueObj->AdminCc->MemberEmailAddresses );
+ push ( @Bcc, $self->TicketObj->AdminCc->MemberEmailAddresses );
+ push ( @Bcc, $self->TicketObj->QueueObj->AdminCc->MemberEmailAddresses );
}
- if ( RT->Config->Get('UseFriendlyToLine') ) {
+ if ($RT::UseFriendlyToLine) {
unless (@To) {
- push @PseudoTo,
- sprintf RT->Config->Get('FriendlyToLineFormat'), $arg, $ticket->id;
+ push (
+ @PseudoTo,
+ sprintf($RT::FriendlyToLineFormat, $arg, $self->TicketObj->id),
+ );
}
}
- my $creatorObj = $self->TransactionObj->CreatorObj;
- my $creator = $creatorObj->EmailAddress();
+ my $creator = $self->TransactionObj->CreatorObj->EmailAddress();
#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
- my $TransactionCurrentUser = RT::CurrentUser->new;
- $TransactionCurrentUser->LoadByName($creatorObj->Name);
- if (RT->Config->Get('NotifyActor',$TransactionCurrentUser)) {
+ if ($RT::NotifyActor) {
@{ $self->{'To'} } = @To;
@{ $self->{'Cc'} } = @Cc;
@{ $self->{'Bcc'} } = @Bcc;
}
else {
- @{ $self->{'To'} } = grep ( lc $_ ne lc $creator, @To );
- @{ $self->{'Cc'} } = grep ( lc $_ ne lc $creator, @Cc );
- @{ $self->{'Bcc'} } = grep ( lc $_ ne lc $creator, @Bcc );
+ @{ $self->{'To'} } = grep ( !/^$creator$/, @To );
+ @{ $self->{'Cc'} } = grep ( !/^$creator$/, @Cc );
+ @{ $self->{'Bcc'} } = grep ( !/^$creator$/, @Bcc );
}
@{ $self->{'PseudoTo'} } = @PseudoTo;
-
+ return (1);
}
-RT::Base->_ImportOverlays();
+# }}}
+
+eval "require RT::Action::Notify_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Notify_Vendor.pm});
+eval "require RT::Action::Notify_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Notify_Local.pm});
1;
diff --git a/rt/lib/RT/Action/NotifyAsComment.pm b/rt/lib/RT/Action/NotifyAsComment.pm
index 504d139c0..210e4ab15 100755
--- a/rt/lib/RT/Action/NotifyAsComment.pm
+++ b/rt/lib/RT/Action/NotifyAsComment.pm
@@ -1,75 +1,55 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
package RT::Action::NotifyAsComment;
+require RT::Action::Notify;
use strict;
-use warnings;
+use vars qw/@ISA/;
+@ISA = qw(RT::Action::Notify);
-use base qw(RT::Action::Notify);
=head2 SetReturnAddress
-Tell SendEmail that this message should come out as a comment.
+Tell SendEmail that this message should come out as a comment.
Calls SUPER::SetReturnAddress.
=cut
sub SetReturnAddress {
- my $self = shift;
-
- # Tell RT::Action::SendEmail that this should come
- # from the relevant comment email address.
- $self->{'comment'} = 1;
-
- return $self->SUPER::SetReturnAddress( @_, is_comment => 1 );
+ my $self = shift;
+
+ # Tell RT::Action::SendEmail that this should come
+ # from the relevant comment email address.
+ $self->{'comment'} = 1;
+
+ return($self->SUPER::SetReturnAddress(is_comment => 1));
}
-RT::Base->_ImportOverlays();
+eval "require RT::Action::NotifyAsComment_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyAsComment_Vendor.pm});
+eval "require RT::Action::NotifyAsComment_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyAsComment_Local.pm});
1;
+
diff --git a/rt/lib/RT/Action/ResolveMembers.pm b/rt/lib/RT/Action/ResolveMembers.pm
index aff636558..02ff3a58c 100644
--- a/rt/lib/RT/Action/ResolveMembers.pm
+++ b/rt/lib/RT/Action/ResolveMembers.pm
@@ -1,58 +1,35 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# This Action will resolve all members of a resolved group ticket
package RT::Action::ResolveMembers;
-use base 'RT::Action';
+require RT::Action::Generic;
require RT::Links;
use strict;
+use vars qw/@ISA/;
+@ISA=qw(RT::Action::Generic);
#Do what we need to do and send it out.
@@ -102,7 +79,10 @@ sub IsApplicable {
}
# }}}
-RT::Base->_ImportOverlays();
+eval "require RT::Action::ResolveMembers_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/ResolveMembers_Vendor.pm});
+eval "require RT::Action::ResolveMembers_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/ResolveMembers_Local.pm});
1;
diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm
index 9e93e4aab..dac8fc8e7 100755
--- a/rt/lib/RT/Action/SendEmail.pm
+++ b/rt/lib/RT/Action/SendEmail.pm
@@ -1,65 +1,38 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Portions Copyright 2000 Tobias Brox <tobix@cpan.org>
package RT::Action::SendEmail;
+require RT::Action::Generic;
use strict;
-use warnings;
+use vars qw/@ISA/;
+@ISA = qw(RT::Action::Generic);
-use base qw(RT::Action);
+use MIME::Words qw(encode_mimeword);
use RT::EmailParser;
-use RT::Interface::Email;
-use Email::Address;
-our @EMAIL_RECIPIENT_HEADERS = qw(To Cc Bcc);
-
=head1 NAME
@@ -69,495 +42,273 @@ RT::Action::AutoReply is a good example subclass.
=head1 SYNOPSIS
- use base 'RT::Action::SendEmail';
+ require RT::Action::SendEmail;
+ @ISA = qw(RT::Action::SendEmail);
+
=head1 DESCRIPTION
Basically, you create another module RT::Action::YourAction which ISA
RT::Action::SendEmail.
-=head1 METHODS
+If you want to set the recipients of the mail to something other than
+the addresses mentioned in the To, Cc, Bcc and headers in
+the template, you should subclass RT::Action::SendEmail and override
+either the SetRecipients method or the SetTo, SetCc, etc methods (see
+the comments for the SetRecipients sub).
-=head2 CleanSlate
-Cleans class-wide options, like L</SquelchMailTo> or L</AttachTickets>.
+=begin testing
-=cut
+ok (require RT::Action::SendEmail);
-sub CleanSlate {
- my $self = shift;
- $self->SquelchMailTo(undef);
- $self->AttachTickets(undef);
-}
+=end testing
-=head2 Commit
-Sends the prepared message and writes outgoing record into DB if the feature is
-activated in the config.
+=head1 AUTHOR
-=cut
+Jesse Vincent <jesse@bestpractical.com> and Tobias Brox <tobix@cpan.org>
-sub Commit {
- my $self = shift;
+=head1 SEE ALSO
- $self->DeferDigestRecipients() if RT->Config->Get('RecordOutgoingEmail');
- my $message = $self->TemplateObj->MIMEObj;
-
- my $orig_message;
- if ( RT->Config->Get('RecordOutgoingEmail')
- && RT->Config->Get('GnuPG')->{'Enable'} )
- {
-
- # 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;
- }
- }
+perl(1).
- 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();
- }
+=cut
+# {{{ Scrip methods (_Init, Commit, Prepare, IsApplicable)
- return ( abs $ret );
-}
+# {{{ sub _Init
+# We use _Init from RT::Action
+# }}}
-=head2 Prepare
-
-Builds an outgoing email we're going to send using scrip's template.
+# {{{ sub Commit
+#Do what we need to do and send it out.
+sub Commit {
+ my $self = shift;
-=cut
+ my $MIMEObj = $self->TemplateObj->MIMEObj;
+ my $msgid = $MIMEObj->head->get('Message-Id');
+ chomp $msgid;
+ $RT::Logger->info($msgid." #".$self->TicketObj->id."/".$self->TransactionObj->id." - Scrip ". $self->ScripObj->id ." ".$self->ScripObj->Description);
+ #send the email
-sub Prepare {
- my $self = shift;
+ # Weed out any RT addresses. We really don't want to talk to ourselves!
+ @{$self->{'To'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'To'}});
+ @{$self->{'Cc'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'Cc'}});
+ @{$self->{'Bcc'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'Bcc'}});
+ # 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
- my ( $result, $message ) = $self->TemplateObj->Parse(
- Argument => $self->Argument,
- TicketObj => $self->TicketObj,
- TransactionObj => $self->TransactionObj
- );
- if ( !$result ) {
- return (undef);
- }
+ if ( defined $self->TransactionObj->Attachments->First() ) {
- my $MIMEObj = $self->TemplateObj->MIMEObj;
+ my $squelch = $self->TransactionObj->Attachments->First->GetHeader( 'RT-Squelch-Replies-To');
- # Header
- $self->SetRTSpecialHeaders();
+ if ($squelch) {
+ my @blacklist = split ( /,/, $squelch );
- $self->RemoveInappropriateRecipients();
+ # Cycle through the people we're sending to and pull out anyone on the
+ # system blacklist
- my %seen;
- foreach my $type (@EMAIL_RECIPIENT_HEADERS) {
- @{ $self->{$type} }
- = grep defined && length && !$seen{ lc $_ }++,
- @{ $self->{$type} };
+ foreach my $person_to_yank (@blacklist) {
+ $person_to_yank =~ s/\s//g;
+ @{ $self->{'To'} } =
+ grep ( !/^$person_to_yank$/, @{ $self->{'To'} } );
+ @{ $self->{'Cc'} } =
+ grep ( !/^$person_to_yank$/, @{ $self->{'Cc'} } );
+ @{ $self->{'Bcc'} } =
+ grep ( !/^$person_to_yank$/, @{ $self->{'Bcc'} } );
+ }
+ }
}
# 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
+ $self->SetHeader( 'To', join ( ',', @{ $self->{'To'} } ) )
+ if ( $self->{'To'} && @{ $self->{'To'} } );
+ $self->SetHeader( 'Cc', join ( ',', @{ $self->{'Cc'} } ) )
+ if ( $self->{'Cc'} && @{ $self->{'Cc'} } );
+ $self->SetHeader( 'Bcc', join ( ',', @{ $self->{'Bcc'} } ) )
+ if ( $self->{'Cc'} && @{ $self->{'Bcc'} } );
- for my $header (@EMAIL_RECIPIENT_HEADERS) {
- $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'} }
- && !$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' );
-
- # For security reasons, we only send out textual mails.
- 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 );
- # utf-8 here is for _FindOrGuessCharset in I18N.pm
- # it's not the final charset/encoding sent
- $part->head->mime_attr( "Content-Type.charset" => 'utf-8' );
- }
-
- 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')
- && ( $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';
- }
+ $self->SetHeader('MIME-Version', '1.0');
- return $result;
-}
+ # try to convert message body from utf-8 to $RT::EmailOutputEncoding
+ $self->SetHeader( 'Content-Type', 'text/plain; charset="utf-8"' );
-=head2 To
+ RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, $RT::EmailOutputEncoding, 'mime_words_ok' );
+ $self->SetHeader( 'Content-Type', 'text/plain; charset="' . $RT::EmailOutputEncoding . '"' );
-Returns an array of L<Email::Address> objects containing all the To: recipients for this notification
-=cut
+ # Build up a MIME::Entity that looks like the original message.
-sub To {
- my $self = shift;
- return ( $self->AddressesFromHeader('To') );
-}
+ my $do_attach = $self->TemplateObj->MIMEObj->head->get('RT-Attach-Message');
-=head2 Cc
+ if ($do_attach) {
+ $self->TemplateObj->MIMEObj->head->delete('RT-Attach-Message');
-Returns an array of L<Email::Address> objects containing all the Cc: recipients for this notification
+ my $attachments = RT::Attachments->new($RT::SystemUser);
+ $attachments->Limit( FIELD => 'TransactionId',
+ VALUE => $self->TransactionObj->Id );
+ $attachments->OrderBy('id');
-=cut
+ my $transaction_content_obj = $self->TransactionObj->ContentObj;
-sub Cc {
- my $self = shift;
- return ( $self->AddressesFromHeader('Cc') );
-}
+ # attach any of this transaction's attachments
+ while ( my $attach = $attachments->Next ) {
-=head2 Bcc
+ # Don't attach anything blank
+ next unless ( $attach->ContentLength );
-Returns an array of L<Email::Address> objects containing all the Bcc: recipients for this notification
+ # We want to make sure that we don't include the attachment that's being sued 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 ),
+ Encoding => '-SUGGEST');
+ }
-=cut
+ }
-sub Bcc {
- my $self = shift;
- return ( $self->AddressesFromHeader('Bcc') );
-}
+ my $retval = $self->SendMessage($MIMEObj);
-sub AddressesFromHeader {
- my $self = shift;
- my $field = shift;
- my $header = $self->TemplateObj->MIMEObj->head->get($field);
- my @addresses = Email::Address->parse($header);
- return (@addresses);
+ return ($retval);
}
-=head2 SendMessage MIMEObj
-
-sends the message using RT's preferred API.
-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 ) = @_;
-
- my $msgid = $MIMEObj->head->get('Message-ID');
- chomp $msgid;
-
- $self->ScripActionObj->{_Message_ID}++;
+# }}}
- $RT::Logger->info( $msgid . " #"
- . $self->TicketObj->id . "/"
- . $self->TransactionObj->id
- . " - Scrip "
- . ($self->ScripObj->id || '#rule'). " "
- . ( $self->ScripObj->Description || '' ) );
+# {{{ sub Prepare
- my $status = RT::Interface::Email::SendEmail(
- Entity => $MIMEObj,
- Ticket => $self->TicketObj,
- Transaction => $self->TransactionObj,
- );
+sub Prepare {
+ my $self = shift;
-
- return $status unless ($status > 0 || exists $self->{'Deferred'});
+ # This actually populates the MIME::Entity fields in the Template Object
- my $success = $msgid . " sent ";
- foreach (@EMAIL_RECIPIENT_HEADERS) {
- my $recipients = $MIMEObj->head->get($_);
- $success .= " $_: " . $recipients if $recipients;
+ unless ( $self->TemplateObj ) {
+ $RT::Logger->warning("No template object handed to $self\n");
}
- 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);
+ unless ( $self->TransactionObj ) {
+ $RT::Logger->warning("No transaction object handed to $self\n");
- return (1);
-}
-
-=head2 AddAttachments
-
-Takes any attachments to this transaction and attaches them to the message
-we're building.
-
-=cut
-
-sub AddAttachments {
- my $self = shift;
-
- my $MIMEObj = $self->TemplateObj->MIMEObj;
-
- $MIMEObj->head->delete('RT-Attach-Message');
+ }
- my $attachments = RT::Attachments->new($RT::SystemUser);
- $attachments->Limit(
- FIELD => 'TransactionId',
- VALUE => $self->TransactionObj->Id
- );
+ unless ( $self->TicketObj ) {
+ $RT::Logger->warning("No ticket object handed to $self\n");
- # Don't attach anything blank
- $attachments->LimitNotEmpty;
- $attachments->OrderBy( FIELD => 'id' );
-
- # 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 ( $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,
- );
- }
}
- # 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;
+ my ( $result, $message ) = $self->TemplateObj->Parse(
+ Argument => $self->Argument,
+ TicketObj => $self->TicketObj,
+ TransactionObj => $self->TransactionObj
+ );
+ if ($result) {
+
+ # Header
+ $self->SetSubject();
+ $self->SetSubjectToken();
+ $self->SetRecipients();
+ $self->SetReturnAddress();
+ $self->SetRTSpecialHeaders();
+ if ($RT::EmailOutputEncoding) {
+
+ # l10n related header
+ $self->SetHeaderAsEncoding( 'Subject', $RT::EmailOutputEncoding );
}
- $self->AddAttachment($attach);
}
-}
-
-=head2 AddAttachment $attachment
-Takes one attachment object of L<RT::Attachmment> class and attaches it to the message
-we're building.
-
-=cut
+ return $result;
-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',
- );
}
-=head2 AttachTickets [@IDs]
+# }}}
-Returns or set list of ticket's IDs that should be attached to an outgoing 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.
-
-=cut
-
-{
- my $list = [];
-
- sub AttachTickets {
- my $self = shift;
- $list = [ grep defined, @_ ] if @_;
- return @$list;
- }
-}
-
-=head2 AddTickets
+# {{{ SendMessage
+=head2 SendMessage MIMEObj
-Attaches tickets to the current message, list of tickets' ids get from
-L</AttachTickets> method.
+sends the message using RT's preferred API.
+TODO: Break this out to a seperate module
=cut
-sub AddTickets {
+sub SendMessage {
my $self = shift;
- $self->AddTicket($_) foreach $self->AttachTickets;
- return;
-}
-
-=head2 AddTicket $ID
-
-Attaches a ticket with ID to the message.
+ my $MIMEObj = shift;
-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.
+ my $msgid = $MIMEObj->head->get('Message-Id');
-=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 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);
}
- if ( $ticket_mime->parts ) {
- my $email_mime = $self->TemplateObj->MIMEObj;
- $email_mime->make_multipart;
- $email_mime->add_part($ticket_mime);
- }
- return;
-}
-=head2 RecordOutgoingMailTransaction MIMEObj
+ # PseudoTo (fake to headers) shouldn't get matched for message recipients.
+ # If we don't have any 'To' header, drop in the pseudo-to header.
-Record a transaction in RT with this outgoing message for future record-keeping purposes
-
-=cut
+ $self->SetHeader( 'To', join ( ',', @{ $self->{'PseudoTo'} } ) )
+ if ( $self->{'PseudoTo'} && ( @{ $self->{'PseudoTo'} } )
+ and ( !$MIMEObj->head->get('To') ) );
+ if ( $RT::MailCommand eq 'sendmailpipe' ) {
+ eval {
+ open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" );
+ print MAIL $MIMEObj->as_string;
+ close(MAIL);
+ };
+ if ($@) {
+ $RT::Logger->crit($msgid. "Could not send mail. -".$@ );
+ }
+ }
+ else {
+ my @mailer_args = ($RT::MailCommand);
+ local $ENV{MAILADDRESS};
-sub RecordOutgoingMailTransaction {
- my $self = shift;
- my $MIMEObj = shift;
+ if ( $RT::MailCommand eq 'sendmail' ) {
+ push @mailer_args, $RT::SendmailArguments;
+ }
+ elsif ( $RT::MailCommand eq 'smtp' ) {
+ $ENV{MAILADDRESS} = $RT::SMTPFrom || $MIMEObj->head->get('From');
+ push @mailer_args, (Server => $RT::SMTPServer);
+ push @mailer_args, (Debug => $RT::SMTPDebug);
+ }
+ else {
+ push @mailer_args, $RT::MailParams;
+ }
- my @parts = $MIMEObj->parts;
- my @attachments;
- my @keep;
- 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.");
- push @attachments, $attach;
- } else {
- $RT::Logger->debug("We found a part. we want to record it.");
- push @keep, $part;
+ unless ( $MIMEObj->send( @mailer_args ) ) {
+ $RT::Logger->crit($msgid. "Could not send mail." );
+ return (0);
}
}
- $MIMEObj->parts( \@keep );
- foreach my $attachment (@attachments) {
- $MIMEObj->head->add( 'RT-Attachment', $attachment );
- }
- RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, 'utf-8', 'mime_words_ok' );
- my $transaction
- = RT::Transaction->new( $self->TransactionObj->CurrentUser );
-
-# XXX: TODO -> Record attachments as references to things in the attachments table, maybe.
+ my $success = ($msgid. " sent To: ".$MIMEObj->head->get('To') . " Cc: ".$MIMEObj->head->get('Cc') . " Bcc: ".$MIMEObj->head->get('Bcc'));
+ $success =~ s/\n//gi;
+ $RT::Logger->info($success);
- my $type;
- if ( $self->TransactionObj->Type eq 'Comment' ) {
- $type = 'CommentEmailRecord';
- } else {
- $type = 'EmailRecord';
- }
+ return (1);
+}
- my $msgid = $MIMEObj->head->get('Message-ID');
- chomp $msgid;
+# }}}
- my ( $id, $msg ) = $transaction->Create(
- Ticket => $self->TicketObj->Id,
- Type => $type,
- Data => $msgid,
- MIMEObj => $MIMEObj,
- ActivateScrips => 0
- );
+# {{{ Deal with message headers (Set* subs, designed for easy overriding)
- if ($id) {
- $self->{'OutgoingMailTransaction'} = $id;
- } else {
- $RT::Logger->warning(
- "Could not record outgoing message transaction: $msg");
- }
- return $id;
-}
+# {{{ sub SetRTSpecialHeaders
=head2 SetRTSpecialHeaders
@@ -569,272 +320,85 @@ that don't matter much to anybody else.
sub SetRTSpecialHeaders {
my $self = shift;
- $self->SetSubject();
- $self->SetSubjectToken();
- $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 = "";
- if ( my $msg = $self->TransactionObj->Message->First ) {
- $msgid = $msg->GetHeader("RT-Message-ID")
- || $msg->GetHeader("Message-ID");
- }
+ $self->SetReferences();
- # 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->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->SetMessageID();
- if (my $precedence = RT->Config->Get('DefaultMailPrecedence')
- and !$self->TemplateObj->MIMEObj->head->get("Precedence")
- ) {
- $self->SetHeader( 'Precedence', $precedence );
- }
+ $self->SetPrecedence();
- $self->SetHeader( 'X-RT-Loop-Prevention', RT->Config->Get('rtname') );
+ $self->SetHeader( 'X-RT-Loop-Prevention', $RT::rtname );
$self->SetHeader( 'RT-Ticket',
- RT->Config->Get('rtname') . " #" . $self->TicketObj->id() );
+ $RT::rtname . " #" . $self->TicketObj->id() );
$self->SetHeader( 'Managed-by',
- "RT $RT::VERSION (http://www.bestpractical.com/rt/)" );
-
-# XXX, TODO: use /ShowUser/ShowUserEntry(or something like that) when it would be
-# refactored into user's method.
- if ( my $email = $self->TransactionObj->CreatorObj->EmailAddress
- and RT->Config->Get('UseOriginatorHeader')
- ) {
- $self->SetHeader( 'RT-Originator', $email );
- }
+ "RT $RT::VERSION (http://www.bestpractical.com/rt/)" );
-}
+ $self->SetHeader( 'RT-Originator',
+ $self->TransactionObj->CreatorObj->EmailAddress );
+ return ();
+}
-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");
-
- 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 ) }
- }
-
- # 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);
- }
-
- # 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);
- }
-
- if ( scalar keys %$digest_hash ) {
+# {{{ sub SetReferences
- # 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 );
- }
-}
+=head2 SetReferences
+
+ # This routine will set the References: and In-Reply-To headers,
+# autopopulating it with all the correspondence on this ticket so
+# far. This should make RT responses threadable.
+=cut
-
-sub RecordDeferredRecipients {
+sub SetReferences {
my $self = shift;
- return unless exists $self->{'Deferred'};
- my $txn_id = $self->{'OutgoingMailTransaction'};
- return unless $txn_id;
+ # TODO: this one is broken. What is this email really a reply to?
+ # If it's a reply to an incoming message, we'll need to use the
+ # actual message-id from the appropriate Attachment object. For
+ # incoming mails, we would like to preserve the In-Reply-To and/or
+ # References.
- 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;
+ $self->SetHeader( 'In-Reply-To',
+ "<rt-" . $self->TicketObj->id() . "\@" . $RT::rtname . ">" );
- return ($ret,$msg);
+ # TODO We should always add References headers for all message-ids
+ # of previous messages related to this ticket.
}
-=head2 SquelchMailTo [@ADDRESSES]
-
-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.
+# {{{ sub SetMessageID
-=cut
-
-{
- my $squelch = [];
-
- sub SquelchMailTo {
- my $self = shift;
- if (@_) {
- $squelch = [ grep defined, @_ ];
- }
- return @$squelch;
- }
-}
+=head2 SetMessageID
-=head2 RemoveInappropriateRecipients
-
-Remove addresses that are RT addresses or that are on this transaction's blacklist
+Without this one, threading won't work very nice in email agents.
+Anyway, I'm not really sure it's that healthy if we need to send
+several separate/different emails about the same transaction.
=cut
-sub RemoveInappropriateRecipients {
+sub SetMessageID {
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
-
- 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->Config->Get('RedistributeAutoGeneratedMessages') ) {
-
- # Don't send to any watchers.
- @{ $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 (@EMAIL_RECIPIENT_HEADERS) {
- foreach my $addr ( @{ $self->{$type} } ) {
- my $user = RT::User->new($RT::SystemUser);
- $user->LoadByEmail($addr);
- 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."
- );
- }
- }
-
- 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
- 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
+ # TODO this one might be sort of broken. If we have several scrips +++
+ # sending several emails to several different persons, we need to
+ # pull out different message-ids. I'd suggest message ids like
+ # "rt-ticket#-transaction#-scrip#-receipient#"
+
+ $self->SetHeader( 'Message-ID',
+ "<rt-"
+ . $RT::VERSION ."-"
+ . $self->TicketObj->id() . "-"
+ . $self->TransactionObj->id() . "."
+ . rand(20) . "\@"
+ . $RT::Organization . ">" )
+ unless $self->TemplateObj->MIMEObj->head->get('Message-ID');
+}
- # 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
@@ -845,11 +409,8 @@ Calculate and set From and Reply-To headers based on the is_comment flag.
sub SetReturnAddress {
my $self = shift;
- my %args = (
- is_comment => 0,
- friendly_name => undef,
- @_
- );
+ my %args = ( is_comment => 0,
+ @_ );
# From and Reply-To
# $args{is_comment} should be set if the comment address is to be used.
@@ -857,37 +418,29 @@ sub SetReturnAddress {
if ( $args{'is_comment'} ) {
$replyto = $self->TicketObj->QueueObj->CommentAddress
- || RT->Config->Get('CommentAddress');
- } else {
+ || $RT::CommentAddress;
+ }
+ else {
$replyto = $self->TicketObj->QueueObj->CorrespondAddress
- || RT->Config->Get('CorrespondAddress');
+ || $RT::CorrespondAddress;
}
unless ( $self->TemplateObj->MIMEObj->head->get('From') ) {
- 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->Config->Get('FriendlyFromLineFormat'),
- $self->MIMEEncodeString(
- $friendly_name, RT->Config->Get('EmailOutputEncoding')
- ),
- $replyto
- ),
- );
- } else {
- $self->SetHeader( 'From', $replyto );
- }
+ if ($RT::UseFriendlyFromLine) {
+ my $friendly_name = $self->TransactionObj->CreatorObj->RealName;
+ 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 ), $replyto),
+ );
+ }
+ else {
+ $self->SetHeader( 'From', $replyto );
+ }
}
unless ( $self->TemplateObj->MIMEObj->head->get('Reply-To') ) {
@@ -896,6 +449,10 @@ sub SetReturnAddress {
}
+# }}}
+
+# {{{ sub SetHeader
+
=head2 SetHeader FIELD, VALUE
Set the FIELD of the current MIME object into VALUE.
@@ -909,157 +466,163 @@ sub SetHeader {
chomp $val;
chomp $field;
- my $head = $self->TemplateObj->MIMEObj->head;
- $head->fold_length( $field, 10000 );
- $head->replace( $field, $val );
- return $head->get($field);
+ $self->TemplateObj->MIMEObj->head->fold_length( $field, 10000 );
+ $self->TemplateObj->MIMEObj->head->replace( $field, $val );
+ return $self->TemplateObj->MIMEObj->head->get($field);
}
-=head2 SetSubject
+# }}}
-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.
+# {{{ sub SetRecipients
-=cut
+=head2 SetRecipients
-sub SetSubject {
+Dummy method to be overriden by subclasses which want to set the recipients.
+
+=cut
+
+sub SetRecipients {
my $self = shift;
- my $subject;
+ return ();
+}
- if ( $self->TemplateObj->MIMEObj->head->get('Subject') ) {
- return ();
- }
+# }}}
- # don't use Transaction->Attachments because it caches
- # and anything which later calls ->Attachments will be hurt
- # by our RowsPerPage() call. caching is hard.
- my $message = RT::Attachments->new( $self->CurrentUser );
- $message->Limit( FIELD => 'TransactionId', VALUE => $self->TransactionObj->id);
- $message->OrderBy( FIELD => 'id', ORDER => 'ASC' );
- $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;
- }
- $subject = '' unless defined $subject;
- chomp $subject;
+# {{{ sub SetTo
- $subject =~ s/(\r\n|\n|\s)/ /g;
+=head2 SetTo
- $self->SetHeader( 'Subject', $subject );
+Takes a string that is the addresses you want to send mail to
+=cut
+
+sub SetTo {
+ my $self = shift;
+ my $addresses = shift;
+ return $self->SetHeader( 'To', $addresses );
}
-=head2 SetSubjectToken
+# }}}
-This routine fixes the RT tag in the subject. It's unlikely that you want to overwrite this.
+# {{{ sub SetCc
+
+=head2 SetCc
+
+Takes a string that is the addresses you want to Cc
=cut
-sub SetSubjectToken {
- my $self = shift;
+sub SetCc {
+ my $self = shift;
+ my $addresses = shift;
- my $head = $self->TemplateObj->MIMEObj->head;
- $head->replace(
- Subject => RT::Interface::Email::AddSubjectTag(
- Encode::decode_utf8( $head->get('Subject') ),
- $self->TicketObj,
- ),
- );
+ return $self->SetHeader( 'Cc', $addresses );
}
-=head2 SetReferencesHeaders
+# }}}
+
+# {{{ sub SetBcc
+
+=head2 SetBcc
-Set References and In-Reply-To headers for this message.
+Takes a string that is the addresses you want to Bcc
=cut
-sub SetReferencesHeaders {
+sub SetBcc {
+ my $self = shift;
+ my $addresses = shift;
+
+ return $self->SetHeader( 'Bcc', $addresses );
+}
+
+# }}}
+
+# {{{ sub SetPrecedence
+
+sub SetPrecedence {
my $self = shift;
- my ( @in_reply_to, @references, @msgid );
-
- 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);
+
+ unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") ) {
+ $self->SetHeader( 'Precedence', "bulk" );
}
+}
- # There are two main cases -- this transaction was created with
- # 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
- 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
-
- 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} .
- "@" . $org . ">"/eg
- }
+# }}}
- # In reply to whatever the internal message was in reply to
- $self->SetHeader( 'In-Reply-To', join( " ", (@in_reply_to) ) );
+# {{{ sub SetSubject
- # Default the references to whatever we're in reply to
- @references = @in_reply_to unless @references;
+=head2 SetSubject
- # References are unchanged from internal
- } else {
+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
+the transaction's subject.
- # In reply to that message
- $self->SetHeader( 'In-Reply-To', join( " ", (@msgid) ) );
+=cut
- # Default the references to whatever we're in reply to
- @references = @in_reply_to unless @references;
+sub SetSubject {
+ my $self = shift;
+ my $subject;
- # Push that message onto the end of the references
- push @references, @msgid;
- }
+ unless ( $self->TemplateObj->MIMEObj->head->get('Subject') ) {
+ my $message = $self->TransactionObj->Attachments;
+ my $ticket = $self->TicketObj->Id;
+
+ if ( $self->{'Subject'} ) {
+ $subject = $self->{'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();
+ }
- # Push pseudo-ref to the front
- my $pseudo_ref = $self->PseudoReference;
- @references = ( $pseudo_ref, grep { $_ ne $pseudo_ref } @references );
+ }
+ else {
+ $subject = $self->TicketObj->Subject();
+ }
- # 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 );
+ $subject =~ s/(\r\n|\n|\s)/ /gi;
- # Add on the references
- $self->SetHeader( 'References', join( " ", @references ) );
- $self->TemplateObj->MIMEObj->head->fold_length( 'References', 80 );
+ chomp $subject;
+ $self->SetHeader( 'Subject', $subject );
+ }
+ return ($subject);
}
-=head2 PseudoReference
+# }}}
-Returns a fake Message-ID: header for the ticket to allow a base level of threading
+# {{{ sub SetSubjectToken
-=cut
+=head2 SetSubjectToken
+
+This routine fixes the RT tag in the subject. It's unlikely that you want to overwrite this.
-sub PseudoReference {
+=cut
+sub SetSubjectToken {
my $self = shift;
- my $pseudo_ref
- = '<RT-Ticket-'
- . $self->TicketObj->id . '@'
- . RT->Config->Get('Organization') . '>';
- return $pseudo_ref;
+ my $tag = "[$RT::rtname #" . $self->TicketObj->id . "]";
+ my $sub = $self->TemplateObj->MIMEObj->head->get('Subject');
+ unless ( $sub =~ /\Q$tag\E/ ) {
+ $sub =~ s/(\r\n|\n|\s)/ /gi;
+ chomp $sub;
+ $self->TemplateObj->MIMEObj->head->replace( 'Subject', "$tag $sub" );
+ }
}
+# }}}
+
+# }}}
+
+# {{{
+
=head2 SetHeaderAsEncoding($field_name, $charset_encoding)
This routine converts the field into specified charset encoding.
@@ -1070,34 +633,53 @@ sub SetHeaderAsEncoding {
my $self = shift;
my ( $field, $enc ) = ( shift, shift );
- my $head = $self->TemplateObj->MIMEObj->head;
-
- if ( lc($field) eq 'from' and RT->Config->Get('SMTPFrom') ) {
- $head->replace( $field, RT->Config->Get('SMTPFrom') );
- return;
+ if ($field eq 'From' and $RT::SMTPFrom) {
+ $self->TemplateObj->MIMEObj->head->replace( $field, $RT::SMTPFrom );
+ return;
}
- my $value = $head->get( $field );
- $value = $self->MIMEEncodeString( $value, $enc );
- $head->replace( $field, $value );
+ my $value = $self->TemplateObj->MIMEObj->head->get($field);
-}
+ # don't bother if it's us-ascii
+
+ # See RT::I18N, 'NOTES: Why Encode::_utf8_off before Encode::from_to'
-=head2 MIMEEncodeString
+ $value = $self->MIMEEncodeString($value, $enc);
-Takes a perl string and optional encoding pass it over
-L<RT::Interface::Email/EncodeToMIME>.
+ $self->TemplateObj->MIMEObj->head->replace( $field, $value );
-Basicly encode a string using B encoding according to RFC2047.
+
+}
+# }}}
+
+# {{{ MIMENcodeString
+
+=head2 MIMEEncodeString STRING ENCODING
+
+Takes a string and a possible encoding and returns the string wrapped in MIME goo.
=cut
sub MIMEEncodeString {
- my $self = shift;
- return RT::Interface::Email::EncodeToMIME( String => $_[0], Charset => $_[1] );
+ my $self = shift;
+ my $value = shift;
+ my $enc = shift;
+
+ chomp $value;
+ return ($value) unless $value =~ /[^\x20-\x7e]/;
+
+ $value =~ s/\s*$//;
+ Encode::_utf8_off($value);
+ my $res = Encode::from_to( $value, "utf-8", $enc );
+ $value = encode_mimeword( $value, 'B', $enc );
}
-RT::Base->_ImportOverlays();
+# }}}
+
+eval "require RT::Action::SendEmail_Vendor";
+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});
1;
diff --git a/rt/lib/RT/Action/SetPriority_Local.pm b/rt/lib/RT/Action/SetPriority_Local.pm
new file mode 100644
index 000000000..efaadc961
--- /dev/null
+++ b/rt/lib/RT/Action/SetPriority_Local.pm
@@ -0,0 +1,47 @@
+package RT::Action::SetPriority;
+use strict;
+no warnings 'redefine';
+
+# Extension to allow relative priority changes:
+# if Argument is "R" followed by a value, it's
+# relative to current priority.
+sub Commit {
+ my $self = shift;
+ my ($rel, $val);
+ my $arg = $self->Argument;
+ if ( $arg ) {
+ ($rel, $val) = ( $arg =~ /^(r?)(-?\d+)$/i );
+ if (!length($val)) {
+ warn "Bad argument to SetPriority: '$arg'\n";
+ return 0;
+ }
+ }
+ else {
+ my %Rules = $self->Rules;
+ $rel = length($Rules{'inc'}) ? 1 : 0;
+ $val = $Rules{'inc'} || $Rules{'set'};
+ if ($val !~ /^[+-]?\d+$/) {
+ warn "Bad argument to SetPriority: '$val'\n";
+ return 0;
+ }
+ }
+ $val += $self->TicketObj->Priority if $rel;
+ $self->TicketObj->SetPriority($val);
+}
+
+sub Options {
+ (
+ {
+ 'name' => 'set',
+ 'label' => 'Set to value',
+ 'type' => 'text',
+ },
+ {
+ 'name' => 'inc',
+ 'label' => 'Increment by',
+ 'type' => 'text',
+ },
+ )
+}
+
+1;
diff --git a/rt/lib/RT/Attachment.pm b/rt/lib/RT/Attachment.pm
index e9a3dc6e6..2ed520162 100755
--- a/rt/lib/RT/Attachment.pm
+++ b/rt/lib/RT/Attachment.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -135,7 +110,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -144,14 +119,14 @@ Returns the current value of id.
=cut
-=head2 TransactionId
+=item TransactionId
Returns the current value of TransactionId.
(In the database, TransactionId is stored as int(11).)
-=head2 SetTransactionId VALUE
+=item SetTransactionId VALUE
Set TransactionId to VALUE.
@@ -162,14 +137,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Parent
+=item Parent
Returns the current value of Parent.
(In the database, Parent is stored as int(11).)
-=head2 SetParent VALUE
+=item SetParent VALUE
Set Parent to VALUE.
@@ -180,14 +155,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 MessageId
+=item MessageId
Returns the current value of MessageId.
(In the database, MessageId is stored as varchar(160).)
-=head2 SetMessageId VALUE
+=item SetMessageId VALUE
Set MessageId to VALUE.
@@ -198,14 +173,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Subject
+=item Subject
Returns the current value of Subject.
(In the database, Subject is stored as varchar(255).)
-=head2 SetSubject VALUE
+=item SetSubject VALUE
Set Subject to VALUE.
@@ -216,14 +191,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Filename
+=item Filename
Returns the current value of Filename.
(In the database, Filename is stored as varchar(255).)
-=head2 SetFilename VALUE
+=item SetFilename VALUE
Set Filename to VALUE.
@@ -234,14 +209,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ContentType
+=item ContentType
Returns the current value of ContentType.
(In the database, ContentType is stored as varchar(80).)
-=head2 SetContentType VALUE
+=item SetContentType VALUE
Set ContentType to VALUE.
@@ -252,14 +227,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ContentEncoding
+=item ContentEncoding
Returns the current value of ContentEncoding.
(In the database, ContentEncoding is stored as varchar(80).)
-=head2 SetContentEncoding VALUE
+=item SetContentEncoding VALUE
Set ContentEncoding to VALUE.
@@ -270,14 +245,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Content
+=item Content
Returns the current value of Content.
(In the database, Content is stored as longtext.)
-=head2 SetContent VALUE
+=item SetContent VALUE
Set Content to VALUE.
@@ -288,14 +263,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Headers
+=item Headers
Returns the current value of Headers.
(In the database, Headers is stored as longtext.)
-=head2 SetHeaders VALUE
+=item SetHeaders VALUE
Set Headers to VALUE.
@@ -306,7 +281,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -315,7 +290,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -325,38 +300,55 @@ Returns the current value of Created.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
TransactionId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
Parent =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
MessageId =>
- {read => 1, write => 1, sql_type => 12, length => 160, is_blob => 0, is_numeric => 0, type => 'varchar(160)', default => ''},
+ {read => 1, write => 1, type => 'varchar(160)', default => ''},
Subject =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
Filename =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
ContentType =>
- {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''},
+ {read => 1, write => 1, type => 'varchar(80)', default => ''},
ContentEncoding =>
- {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''},
+ {read => 1, write => 1, type => 'varchar(80)', default => ''},
Content =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''},
+ {read => 1, write => 1, type => 'longtext', default => ''},
Headers =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''},
+ {read => 1, write => 1, type => 'longtext', 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Attachment_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Attachment_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Attachment_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Attachment_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Attachment_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Attachment_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -366,7 +358,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Attachments.pm b/rt/lib/RT/Attachments.pm
index 40f25e435..177cdd094 100755
--- a/rt/lib/RT/Attachments.pm
+++ b/rt/lib/RT/Attachments.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Attachment item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Attachment->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Attachments_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Attachments_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Attachments_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Attachments_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Attachments_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Attachments_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Attribute_Overlay.pm b/rt/lib/RT/Attribute_Overlay.pm
index 58b5eb83a..1f69d46a8 100644
--- a/rt/lib/RT/Attribute_Overlay.pm
+++ b/rt/lib/RT/Attribute_Overlay.pm
@@ -309,12 +309,9 @@ Deletes the subvalue with the key NAME
sub DeleteSubValue {
my $self = shift;
my $key = shift;
- my %values = $self->Content();
- delete $values{$key};
- $self->SetContent(%values);
-
-
-
+ my $values = $self->Content();
+ delete $values->{$key};
+ $self->SetContent($values);
}
diff --git a/rt/lib/RT/Condition.pm b/rt/lib/RT/Condition.pm
index 458bf8052..2774fe823 100755
--- a/rt/lib/RT/Condition.pm
+++ b/rt/lib/RT/Condition.pm
@@ -210,6 +210,19 @@ sub IsApplicable {
}
# }}}
+sub Options {
+ my $self = shift;
+ return();
+}
+
+sub Rules {
+ my $self = shift;
+ return () if !$self->ScripObj or !$self->ScripObj->ConditionRules;
+ # By default, option names and values are on consecutive lines.
+ # Override this if you need anything more interesting.
+ return(split "\n", $self->ScripObj->ConditionRules);
+}
+
# {{{ sub DESTROY
sub DESTROY {
my $self = shift;
@@ -225,6 +238,9 @@ sub DESTROY {
# }}}
-RT::Base->_ImportOverlays();
+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 755879479..4519fcf5a 100644
--- a/rt/lib/RT/Condition/AnyTransaction.pm
+++ b/rt/lib/RT/Condition/AnyTransaction.pm
@@ -1,55 +1,34 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
+
package RT::Condition::AnyTransaction;
-use base 'RT::Condition';
+require RT::Condition::Generic;
use strict;
+use vars qw/@ISA/;
+@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
@@ -63,7 +42,10 @@ sub IsApplicable {
return(1);
}
-RT::Base->_ImportOverlays();
+eval "require RT::Condition::AnyTransaction_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/AnyTransaction_Vendor.pm});
+eval "require RT::Condition::AnyTransaction_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/AnyTransaction_Local.pm});
1;
diff --git a/rt/lib/RT/Condition/CustomFieldChange.pm b/rt/lib/RT/Condition/CustomFieldChange.pm
new file mode 100644
index 000000000..b9228a50f
--- /dev/null
+++ b/rt/lib/RT/Condition/CustomFieldChange.pm
@@ -0,0 +1,56 @@
+package RT::Condition::CustomFieldChange;
+use base 'RT::Condition';
+use strict;
+
+=head2 IsApplicable
+
+If a custom field has a particular value.
+
+=cut
+
+# Based on Chuck Boeheim's code posted on the RT Wiki 3/13/06
+
+sub IsApplicable {
+ my $self = shift;
+ my $trans = $self->TransactionObj;
+ my $scrip = $self->ScripObj;
+ my %Rules = $self->Rules;
+ my ($field, $value) = @Rules{'field', 'value'};
+ return if !defined($field) or !defined($value);
+
+ if ($trans->Type eq 'Create') {
+ return 1 if $trans->TicketObj->FirstCustomFieldValue($field) eq $value;
+ }
+ if ($trans->Type eq 'CustomField') {
+ my $cf = RT::CustomField->new($self->CurrentUser);
+ $cf->Load($field);
+ return 1 if $trans->Field == $cf->Id and $trans->NewValue eq $value;
+ }
+ return undef;
+}
+
+sub Options {
+ my $self = shift;
+ my %args = ( 'QueueObj' => undef, @_ );
+ my $QueueObj = $args{'QueueObj'};
+ my $cfs = $QueueObj->TicketCustomFields();
+ my @fieldnames;
+ while ( my $cf = $cfs->Next ) {
+ push @fieldnames, $cf->Name, $cf->Name;
+ }
+ return (
+ {
+ 'name' => 'field',
+ 'label' => 'Custom Field',
+ 'type' => 'select',
+ 'options' => \@fieldnames,
+ },
+ {
+ 'name' => 'value',
+ 'label' => 'Value',
+ 'type' => 'text',
+ },
+ );
+}
+1;
+
diff --git a/rt/lib/RT/Condition/Generic.pm b/rt/lib/RT/Condition/Generic.pm
index a3bfa7585..bd269315e 100755
--- a/rt/lib/RT/Condition/Generic.pm
+++ b/rt/lib/RT/Condition/Generic.pm
@@ -1,74 +1,211 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
=head1 NAME
- RT::Condition::Generic - deprecated, see RT::Condition
+ RT::Condition::Generic - ;
=head1 SYNOPSIS
- use RT::Condition::Generic;
+ use RT::Condition::Generic;
+ my $foo = new RT::Condition::IsApplicable(
+ TransactionObj => $tr,
+ TicketObj => $ti,
+ ScripObj => $scr,
+ Argument => $arg,
+ Type => $type);
+
+ if ($foo->IsApplicable) {
+ # do something
+ }
+
=head1 DESCRIPTION
-This module is provided only for backwards compatibility.
=head1 METHODS
+=begin testing
+
+ok (require RT::Condition::Generic);
+
+=end testing
+
+
=cut
-use strict;
-use warnings;
package RT::Condition::Generic;
-use base 'RT::Condition';
-RT::Base->_ImportOverlays();
+use RT::Base;
+use strict;
+use vars qw/@ISA/;
+@ISA = qw(RT::Base);
+
+# {{{ sub new
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+ bless ($self, $class);
+ $self->_Init(@_);
+ return $self;
+}
+# }}}
-1;
+# {{{ sub _Init
+sub _Init {
+ my $self = shift;
+ my %args = ( TransactionObj => undef,
+ TicketObj => undef,
+ ScripObj => undef,
+ TemplateObj => undef,
+ Argument => undef,
+ ApplicableTransTypes => undef,
+ @_ );
+
+ $self->{'Argument'} = $args{'Argument'};
+ $self->{'ScripObj'} = $args{'ScripObj'};
+ $self->{'TicketObj'} = $args{'TicketObj'};
+ $self->{'TransactionObj'} = $args{'TransactionObj'};
+ $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'};
+}
+# }}}
+
+# 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::Generic_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Vendor.pm});
+eval "require RT::Condition::Generic_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Local.pm});
+
+1;
diff --git a/rt/lib/RT/Condition/StatusChange.pm b/rt/lib/RT/Condition/StatusChange.pm
index b20a5ac25..8afabcda0 100644
--- a/rt/lib/RT/Condition/StatusChange.pm
+++ b/rt/lib/RT/Condition/StatusChange.pm
@@ -1,54 +1,35 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
+
+
package RT::Condition::StatusChange;
-use base 'RT::Condition';
+require RT::Condition::Generic;
+
use strict;
+use vars qw/@ISA/;
+@ISA = qw(RT::Condition::Generic);
=head2 IsApplicable
@@ -69,7 +50,10 @@ sub IsApplicable {
}
}
-RT::Base->_ImportOverlays();
+eval "require RT::Condition::StatusChange_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/StatusChange_Vendor.pm});
+eval "require RT::Condition::StatusChange_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/StatusChange_Local.pm});
1;
diff --git a/rt/lib/RT/Config.pm b/rt/lib/RT/Config.pm
index ff93c8478..e3bdbe90b 100644
--- a/rt/lib/RT/Config.pm
+++ b/rt/lib/RT/Config.pm
@@ -173,7 +173,7 @@ our %META = (
WidgetArguments => {
Description => 'Theme', #loc
# XXX: we need support for 'get values callback'
- Values => [qw(3.5-default 3.4-compat web2)],
+ Values => [qw(3.5-default 3.4-compat web2 freeside2.1)],
},
},
MessageBoxRichText => {
@@ -336,6 +336,16 @@ our %META = (
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
},
},
+ DisplayAfterQuickCreate => {
+ Section => 'Ticket display',
+ Overridable => 1,
+ SortOrder => 6,
+ Widget => '/Widgets/Form/Boolean',
+ WidgetArguments => {
+ Description => 'On Quick Create, redirect to ticket display', #loc
+ #Hints => '', #loc
+ },
+ },
# User overridable locale options
DateTimeFormat => {
@@ -898,11 +908,10 @@ sub Meta {
sub Sections {
my $self = shift;
my %seen;
- my @sections = sort
+ return sort
grep !$seen{$_}++,
map $_->{'Section'} || 'General',
values %META;
- return @sections;
}
sub Options {
@@ -931,6 +940,14 @@ sub Options {
return @res;
}
-RT::Base->_ImportOverlays();
+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/CurrentUser.pm b/rt/lib/RT/CurrentUser.pm
index 85b95f864..4ca2f9891 100755
--- a/rt/lib/RT/CurrentUser.pm
+++ b/rt/lib/RT/CurrentUser.pm
@@ -1,184 +1,195 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
=head1 NAME
RT::CurrentUser - an RT object representing the current user
=head1 SYNOPSIS
- 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');
+ use RT::CurrentUser
=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.
-=head2 new
+=begin testing
+
+ok (require RT::CurrentUser);
-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.
+=end testing
=cut
package RT::CurrentUser;
+use RT::Record;
use RT::I18N;
use strict;
-use warnings;
+use vars qw/@ISA/;
+@ISA= qw(RT::Record);
-use base qw/RT::User/;
+# {{{ sub _Init
#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
# the CurrentUser object
-sub _Init {
- my $self = shift;
- my $User = shift;
-
- $self->{'table'} = "Users";
-
- if ( defined $User ) {
-
- if ( UNIVERSAL::isa( $User, 'RT::User' ) ) {
- $self->LoadById( $User->id );
- }
- elsif ( ref $User ) {
- $RT::Logger->crit(
- "RT::CurrentUser->new() called with a bogus argument: $User");
- }
- else {
- $self->Load( $User );
- }
- }
+sub _Init {
+ my $self = shift;
+ my $Name = shift;
- $self->_BuildTableAttributes;
-
-}
+ $self->{'table'} = "Users";
-=head2 Create, Delete and Set*
+ if (defined($Name)) {
+ $self->Load($Name);
+ }
+
+ $self->CurrentUser($self);
-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
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 _Set {
- 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 L<RT::User> object associated with this CurrentUser object.
+ Returns the RT::User object associated with this CurrentUser object.
=cut
sub UserObj {
my $self = shift;
-
- 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)
- );
+
+ unless ($self->{'UserObj'}) {
+ use RT::User;
+ $self->{'UserObj'} = RT::User->new($self);
+ unless ($self->{'UserObj'}->Load($self->Id)) {
+ $RT::Logger->err($self->loc("Couldn't load [_1] from the users database.\n", $self->Id));
+ }
+
}
- return $user;
+ return ($self->{'UserObj'});
}
+# }}}
-sub _CoreAccessible {
- {
- Name => { 'read' => 1 },
- Gecos => { 'read' => 1 },
- RealName => { 'read' => 1 },
- Lang => { 'read' => 1 },
- Password => { 'read' => 0, 'write' => 0 },
- EmailAddress => { 'read' => 1, 'write' => 0 }
- };
-
+# {{{ sub PrincipalObj
+
+=head2 PrincipalObj
+
+ Returns this user's principal object. this is just a helper routine for
+ $self->UserObj->PrincipalObj
+
+=cut
+
+sub PrincipalObj {
+ 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);
+}
+
+
+# }}}
+
+
+# {{{ sub _Accessible
+sub _Accessible {
+ my $self = shift;
+ my %Cols = (
+ Name => 'read',
+ Gecos => 'read',
+ RealName => 'read',
+ Password => 'neither',
+ EmailAddress => 'read',
+ Privileged => 'read',
+ IsAdministrator => 'read'
+ );
+ return($self->SUPER::_Accessible(@_, %Cols));
+}
+# }}}
+
+# {{{ 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
Loads a User into this CurrentUser object.
@@ -188,129 +199,176 @@ Takes a unix username as its only argument.
sub LoadByGecos {
my $self = shift;
- return $self->LoadByCol( "Gecos", shift );
+ my $identifier = shift;
+
+ $self->LoadByCol("Gecos",$identifier);
+
}
+# }}}
+
+# {{{ sub LoadByName
=head2 LoadByName
Loads a User into this CurrentUser object.
Takes a Name.
-
=cut
sub LoadByName {
my $self = shift;
- return $self->LoadByCol( "Name", shift );
+ my $identifier = shift;
+ $self->LoadByCol("Name",$identifier);
+
}
+# }}}
-=head2 LanguageHandle
+# {{{ sub Load
-Returns this current user's langauge handle. Should take a language
-specification. but currently doesn't
-
-=cut
+=head2 Load
-sub LanguageHandle {
- my $self = shift;
- if ( !defined $self->{'LangHandle'}
- || !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' )
- || @_ )
- {
- if ( my $lang = $self->Lang ) {
- push @_, $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';
- }
+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.
- $self->{'LangHandle'} = RT::I18N->get_handle(@_);
- }
+=cut
- # Fall back to english.
- unless ( $self->{'LangHandle'} ) {
- die "We couldn't get a dictionary. Ne mogu naidti slovar. No puedo encontrar dictionario.";
- }
- return $self->{'LangHandle'};
+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);
+ }
+ else {
+ # This is a bit dangerous, we might get false authen if somebody
+ # uses ambigous userids or real names:
+ $self->LoadByCol("Name",$identifier);
+ }
}
-sub loc {
- my $self = shift;
- return '' if !defined $_[0] || $_[0] eq '';
+# }}}
- my $handle = $self->LanguageHandle;
+# {{{ sub IsPassword
- 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 };
- }
+=head2 IsPassword
- return $handle->maketext(@_);
-}
+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.
-sub loc_fuzzy {
- my $self = shift;
- return '' if !defined $_[0] || $_[0] eq '';
+Otherwise, returns undef.
- # XXX: work around perl's deficiency when matching utf8 data
- return $_[0] if Encode::is_utf8($_[0]);
+=cut
- return $self->LanguageHandle->maketext_fuzzy( @_ );
+sub IsPassword {
+ my $self = shift;
+ my $value = shift;
+
+ return ($self->UserObj->IsPassword($value));
}
-=head2 CurrentUser
+# }}}
+
+# {{{ sub Privileged
+
+=head2 Privileged
-Return the current currentuser object
+Returns true if the current user can be granted rights and be
+a member of groups.
=cut
-sub CurrentUser {
+sub Privileged {
my $self = shift;
- return($self);
-
+ return ($self->UserObj->Privileged());
}
-=head2 Authenticate
+# }}}
-Takes $password, $created and $nonce, and returns a boolean value
-representing whether the authentication succeeded.
-If both $nonce and $created are specified, validate $password against:
+# {{{ sub HasRight
- encode_base64(sha1(
- $nonce .
- $created .
- sha1_hex( "$username:$realm:$server_pass" )
- ))
+=head2 HasRight
-where $server_pass is the md5_hex(password) digest stored in the
-database, $created is in ISO time format, and $nonce is a random
-string no longer than 32 bytes.
+calls $self->UserObj->HasRight with the arguments passed in
=cut
-sub Authenticate {
- my ($self, $password, $created, $nonce, $realm) = @_;
+sub HasRight {
+ my $self = shift;
+ return ($self->UserObj->HasRight(@_));
+}
+
+# }}}
- require Digest::MD5;
- require Digest::SHA1;
- require MIME::Base64;
+# {{{ Localization
- 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")
- ));
+=head2 LanguageHandle
+
+Returns this current user's langauge handle. Should take a language
+specification. but currently doesn't
- chomp($password);
- chomp($auth_digest);
+=begin testing
+
+ok (my $cu = RT::CurrentUser->new('root'));
+ok (my $lh = $cu->LanguageHandle);
+ok ($lh != undef);
+ok ($lh->isa('Locale::Maketext'));
+ok ($cu->loc('TEST_STRING') eq "Concrete Mixer", "Localized TEST_STRING into English");
+ok ($lh = $cu->LanguageHandle('fr'));
+ok ($cu->loc('Before') eq "Avant", "Localized TEST_STRING into Frenc");
+
+=end testing
+
+=cut
+
+sub LanguageHandle {
+ my $self = shift;
+ if ((!defined $self->{'LangHandle'}) ||
+ (!UNIVERSAL::can($self->{'LangHandle'}, 'maketext')) ||
+ (@_)) {
+ $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.";
+ }
+ return ($self->{'LangHandle'});
+}
+
+sub loc {
+ my $self = shift;
+ return '' if $_[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 };
+ }
+
+ return $handle->maketext(@_);
+}
+
+sub loc_fuzzy {
+ my $self = shift;
+ return '' if $_[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 ($password eq $auth_digest);
+ return($result);
}
+# }}}
-RT::Base->_ImportOverlays();
+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 408bd108d..e2563481f 100644
--- a/rt/lib/RT/CustomField.pm
+++ b/rt/lib/RT/CustomField.pm
@@ -122,6 +122,7 @@ sub Create {
Disabled => '0',
LinkToValue => '',
IncludeContentForValue => '',
+ Required => '0',
@_);
$self->SUPER::Create(
@@ -381,11 +382,30 @@ sub _CoreAccessible {
{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'},
+ Required =>
+ {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::CustomField_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/CustomField_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::CustomField_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/CustomField_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::CustomField_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/CustomField_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
diff --git a/rt/lib/RT/CustomFieldValues/Queues.pm b/rt/lib/RT/CustomFieldValues/Queues.pm
new file mode 100644
index 000000000..59529b6ac
--- /dev/null
+++ b/rt/lib/RT/CustomFieldValues/Queues.pm
@@ -0,0 +1,30 @@
+package RT::CustomFieldValues::Queues;
+
+use strict;
+use warnings;
+
+use base qw(RT::CustomFieldValues::External);
+
+sub SourceDescription {
+ return 'RT ticket queues';
+}
+
+sub ExternalValues {
+ my $self = shift;
+
+ my @res;
+ my $i = 0;
+ my $queues = RT::Queues->new( $self->CurrentUser );
+ $queues->UnLimit;
+ $queues->OrderByCols( { FIELD => 'Name' } );
+ while( my $queue = $queues->Next ) {
+ push @res, {
+ name => $queue->Name,
+ description => $queue->Description,
+ sortorder => $i++,
+ };
+ }
+ return \@res;
+}
+
+1;
diff --git a/rt/lib/RT/CustomField_Overlay.pm b/rt/lib/RT/CustomField_Overlay.pm
index 9cf608e5a..5e868d1c5 100644
--- a/rt/lib/RT/CustomField_Overlay.pm
+++ b/rt/lib/RT/CustomField_Overlay.pm
@@ -97,6 +97,16 @@ our %FieldTypes = (
'Enter one value with autocompletion', # loc
'Enter up to [_1] values with autocompletion', # loc
],
+ Date => [
+ 'Select multiple dates', # loc
+ 'Select date', # loc
+ 'Select up to [_1] dates', # loc
+ ],
+ TimeValue => [
+ 'Enter multiple time values (UNSUPPORTED)',
+ 'Enter a time value',
+ 'Enter [_1] time values (UNSUPPORTED)',
+ ],
);
@@ -256,6 +266,10 @@ sub Create {
$self->SetBasedOn( $args{'BasedOn'} );
}
+ if ( exists $args{'UILocation'} ) {
+ $self->SetUILocation( $args{'UILocation'} );
+ }
+
return ($rv, $msg) unless exists $args{'Queue'};
# Compat code -- create a new ObjectCustomField mapping
@@ -830,7 +844,7 @@ Returns an array of all possible composite values for custom fields.
sub TypeComposites {
my $self = shift;
- return grep !/(?:[Tt]ext|Combobox)-0/, map { ("$_-1", "$_-0") } $self->Types;
+ return grep !/(?:[Tt]ext|Combobox|Date|TimeValue)-0/, map { ("$_-1", "$_-0") } $self->Types;
}
=head2 SetLookupType
@@ -1161,6 +1175,15 @@ sub AddValueForObject {
$extra_values--;
}
}
+ # For date, we need to store Content as ISO date
+ if ($self->Type eq 'Date') {
+ my $DateObj = new RT::Date( $self->CurrentUser );
+ $DateObj->Set(
+ Format => 'unknown',
+ Value => $args{'Content'},
+ );
+ $args{'Content'} = $DateObj->ISO;
+ }
my $newval = RT::ObjectCustomFieldValue->new( $self->CurrentUser );
my $val = $newval->Create(
ObjectType => ref($obj),
@@ -1433,4 +1456,21 @@ sub BasedOnObj {
return $obj;
}
+sub UILocation {
+ my $self = shift;
+ my $tag = $self->FirstAttribute( 'UILocation' );
+ return $tag ? $tag->Content : '';
+}
+
+sub SetUILocation {
+ my $self = shift;
+ my $tag = shift;
+ if ( $tag ) {
+ return $self->SetAttribute( Name => 'UILocation', Content => $tag );
+ }
+ else {
+ return $self->DeleteAttribute('UILocation');
+ }
+}
+
1;
diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm
index 2b6a3e3f4..e68526c07 100644
--- a/rt/lib/RT/Date.pm
+++ b/rt/lib/RT/Date.pm
@@ -273,6 +273,41 @@ sub SetToMidnight {
return $self->Unix( $new );
}
+=head2 SetToStart PERIOD[, Timezone => 'utc' ]
+
+Set to the beginning of the current PERIOD, which can be
+"year", "month", "day", "hour", or "minute".
+
+=cut
+
+sub SetToStart {
+ my $self = shift;
+ my $p = uc(shift);
+ my %args = @_;
+ my $tz = $args{'Timezone'} || '';
+ my @localtime = $self->Localtime($tz);
+ #remove 'offset' so that DST is figured based on the resulting time.
+ pop @localtime;
+
+ # This is the cleanest way to implement it, I swear.
+ {
+ $localtime[0]=0;
+ last if ($p eq 'MINUTE');
+ $localtime[1]=0;
+ last if ($p eq 'HOUR');
+ $localtime[2]=0;
+ last if ($p eq 'DAY');
+ $localtime[3]=1;
+ last if ($p eq 'MONTH');
+ $localtime[4]=0;
+ last if ($p eq 'YEAR');
+ $RT::Logger->warning("Couldn't find start date of '$p'.");
+ return;
+ }
+ my $new = $self->Timelocal($tz, @localtime);
+ return $self->Unix($new);
+}
+
=head2 Diff
Takes either an C<RT::Date> object or the date in unixtime format as a string,
@@ -479,6 +514,30 @@ Adds 24 hours to the current time. Returns new unix time.
sub AddDay { return $_[0]->AddSeconds($DAY) }
+=head2 AddMonth
+
+Adds one month to the current time. Returns new
+unix time.
+
+=cut
+
+sub AddMonth {
+ my $self = shift;
+ my %args = @_;
+ my @localtime = $self->Localtime($args{'Timezone'});
+ # remove offset, as with SetToStart
+ pop @localtime;
+
+ $localtime[4]++; #month
+ if ( $localtime[4] == 12 ) {
+ $localtime[4] = 0;
+ $localtime[5]++; #year
+ }
+
+ my $new = $self->Timelocal($args{'Timezone'}, @localtime);
+ return $self->Unix($new);
+}
+
=head2 Unix [unixtime]
Optionally takes a date in unix seconds since the epoch format.
@@ -1040,6 +1099,9 @@ sub Timezone {
}
-RT::Base->_ImportOverlays();
+eval "require RT::Date_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Date_Vendor.pm});
+eval "require RT::Date_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Date_Local.pm});
1;
diff --git a/rt/lib/RT/Extension/ActivityReports.pm b/rt/lib/RT/Extension/ActivityReports.pm
new file mode 100644
index 000000000..52d8ba6ab
--- /dev/null
+++ b/rt/lib/RT/Extension/ActivityReports.pm
@@ -0,0 +1,3 @@
+package RT::Extension::ActivityReports;
+
+our $VERSION = '0.2';
diff --git a/rt/lib/RT/Extension/SearchResults/XLS.pm b/rt/lib/RT/Extension/SearchResults/XLS.pm
new file mode 100644
index 000000000..b5d242b97
--- /dev/null
+++ b/rt/lib/RT/Extension/SearchResults/XLS.pm
@@ -0,0 +1,82 @@
+package RT::Extension::SearchResults::XLS;
+
+use warnings;
+use strict;
+
+=head1 NAME
+
+RT::Extension::SearchResults::XLS - Add Excel format export to RT search results
+
+=head1 VERSION
+
+Version 0.06
+
+=cut
+
+our $VERSION = '0.06';
+
+
+=head1 SYNOPSIS
+
+This RT Extension allow users to download search results in Microsoft Excel
+binary format. This typically fix encoding problems for non-ascii chars with
+the standard TSV export included in RT.
+
+=head1 AUTHOR
+
+Emmanuel Lacour, C<< <elacour at home-dn.net> >>
+
+=head1 BUGS
+
+Please report any bugs or feature requests to C<bug-rt-extension-searchresults-xls at rt.cpan.org>, or through
+the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=RT-Extension-SearchResults-XLS>. I will be notified, and then you'll
+automatically be notified of progress on your bug as I make changes.
+
+
+
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc RT::Extension::SearchResults::XLS
+
+
+You can also look for information at:
+
+=over 4
+
+=item * RT: CPAN's request tracker
+
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=RT-Extension-SearchResults-XLS>
+
+=item * AnnoCPAN: Annotated CPAN documentation
+
+L<http://annocpan.org/dist/RT-Extension-SearchResults-XLS>
+
+=item * CPAN Ratings
+
+L<http://cpanratings.perl.org/d/RT-Extension-SearchResults-XLS>
+
+=item * Search CPAN
+
+L<http://search.cpan.org/dist/RT-Extension-SearchResults-XLS>
+
+=back
+
+
+=head1 ACKNOWLEDGEMENTS
+
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2008-2010 Emmanuel Lacour, all rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+Request Tracker (RT) is Copyright Best Practical Solutions, LLC.
+
+=cut
+
+1; # End of RT::Extension::SearchResults::XLS
diff --git a/rt/lib/RT/Group.pm b/rt/lib/RT/Group.pm
index 7af79ce42..4dcef3f07 100755
--- a/rt/lib/RT/Group.pm
+++ b/rt/lib/RT/Group.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -94,7 +69,7 @@ Create takes a hash of values and creates a row in the database:
varchar(255) 'Description'.
varchar(64) 'Domain'.
varchar(64) 'Type'.
- int(11) 'Instance'.
+ varchar(64) 'Instance'.
=cut
@@ -123,7 +98,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -132,14 +107,14 @@ Returns the current value of id.
=cut
-=head2 Name
+=item Name
Returns the current value of Name.
(In the database, Name is stored as varchar(200).)
-=head2 SetName VALUE
+=item SetName VALUE
Set Name to VALUE.
@@ -150,14 +125,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Description
+=item Description
Returns the current value of Description.
(In the database, Description is stored as varchar(255).)
-=head2 SetDescription VALUE
+=item SetDescription VALUE
Set Description to VALUE.
@@ -168,14 +143,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Domain
+=item Domain
Returns the current value of Domain.
(In the database, Domain is stored as varchar(64).)
-=head2 SetDomain VALUE
+=item SetDomain VALUE
Set Domain to VALUE.
@@ -186,14 +161,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Type
+=item Type
Returns the current value of Type.
(In the database, Type is stored as varchar(64).)
-=head2 SetType VALUE
+=item SetType VALUE
Set Type to VALUE.
@@ -204,45 +179,62 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Instance
+=item Instance
Returns the current value of Instance.
-(In the database, Instance is stored as int(11).)
+(In the database, Instance is stored as varchar(64).)
-=head2 SetInstance VALUE
+=item SetInstance VALUE
Set Instance to VALUE.
Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, Instance will be stored as a int(11).)
+(In the database, Instance will be stored as a varchar(64).)
=cut
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Name =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Description =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
Domain =>
- {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''},
+ {read => 1, write => 1, type => 'varchar(64)', default => ''},
Type =>
- {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''},
+ {read => 1, write => 1, type => 'varchar(64)', default => ''},
Instance =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, write => 1, type => 'varchar(64)', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Group_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Group_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Group_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Group_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Group_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Group_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -252,7 +244,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/GroupMember.pm b/rt/lib/RT/GroupMember.pm
index ae0160c9f..8de1a73fe 100755
--- a/rt/lib/RT/GroupMember.pm
+++ b/rt/lib/RT/GroupMember.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -114,7 +89,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -123,14 +98,14 @@ Returns the current value of id.
=cut
-=head2 GroupId
+=item GroupId
Returns the current value of GroupId.
(In the database, GroupId is stored as int(11).)
-=head2 SetGroupId VALUE
+=item SetGroupId VALUE
Set GroupId to VALUE.
@@ -141,14 +116,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 MemberId
+=item MemberId
Returns the current value of MemberId.
(In the database, MemberId is stored as int(11).)
-=head2 SetMemberId VALUE
+=item SetMemberId VALUE
Set MemberId to VALUE.
@@ -160,20 +135,37 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
GroupId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
MemberId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::GroupMember_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/GroupMember_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::GroupMember_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/GroupMember_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::GroupMember_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/GroupMember_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -183,7 +175,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/GroupMembers.pm b/rt/lib/RT/GroupMembers.pm
index 5d821ad59..31cb9536f 100755
--- a/rt/lib/RT/GroupMembers.pm
+++ b/rt/lib/RT/GroupMembers.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::GroupMember item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::GroupMember->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::GroupMembers_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/GroupMembers_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::GroupMembers_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/GroupMembers_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::GroupMembers_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/GroupMembers_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Groups.pm b/rt/lib/RT/Groups.pm
index 2ec2f7979..29f12a5a0 100755
--- a/rt/lib/RT/Groups.pm
+++ b/rt/lib/RT/Groups.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Group item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Group->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Groups_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Groups_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Groups_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Groups_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Groups_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Groups_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Groups_Overlay.pm b/rt/lib/RT/Groups_Overlay.pm
index ed18939f1..fa39e8c3e 100644
--- a/rt/lib/RT/Groups_Overlay.pm
+++ b/rt/lib/RT/Groups_Overlay.pm
@@ -323,6 +323,7 @@ sub WithRight {
$from_group->WithGroupRight( %args );
#XXX: DIRTY HACK
+ use DBIx::SearchBuilder 1.50; #no version on ::Union :(
use DBIx::SearchBuilder::Union;
my $union = new DBIx::SearchBuilder::Union;
$union->add($from_role);
diff --git a/rt/lib/RT/Handle.pm b/rt/lib/RT/Handle.pm
index 38905de83..5cdb65e5b 100644
--- a/rt/lib/RT/Handle.pm
+++ b/rt/lib/RT/Handle.pm
@@ -1,1087 +1,101 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
=head1 NAME
-RT::Handle - RT's database handle
+ RT::Handle - RT's database handle
=head1 SYNOPSIS
- use RT;
- BEGIN { RT::LoadConfig() };
- use RT::Handle;
+ use RT::Handle;
=head1 DESCRIPTION
-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
+=begin testing
-package RT::Handle;
+ok(require RT::Handle);
-use strict;
-use warnings;
-use vars qw/@ISA/;
+=end testing
=head1 METHODS
-=head2 FinalizeDatabaseType
-
-Sets RT::Handle's superclass to the correct subclass of
-L<DBIx::SearchBuilder::Handle>, using the C<DatabaseType> configuration.
-
=cut
-sub FinalizeDatabaseType {
- eval {
- use base "DBIx::SearchBuilder::Handle::". RT->Config->Get('DatabaseType');
- };
+package RT::Handle;
- 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".
- $@;
- }
-}
+use strict;
+use vars qw/@ISA/;
+
+eval "use DBIx::SearchBuilder::Handle::$RT::DatabaseType;
+\@ISA= qw(DBIx::SearchBuilder::Handle::$RT::DatabaseType);";
+#TODO check for errors here.
=head2 Connect
-Connects to RT's database using credentials and options from the RT config.
-Takes nothing.
+Connects to RT's database handle.
+Takes nothing. Calls SUPER::Connect with the needed args
=cut
sub Connect {
- my $self = shift;
-
- 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->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;
- }
-
+my $self=shift;
- if ( $db_type eq 'Pg' ) {
- my $version = $self->DatabaseVersion;
- ($version) = $version =~ /^(\d+\.\d+)/;
- $self->dbh->do("SET bytea_output = 'escape'") if $version >= 9.0;
- }
+# Unless the database port is a positive integer, we really don't want to pass it.
-
-
- $self->dbh->{'LongReadLen'} = RT->Config->Get('MaxAttachmentSize');
+$self->SUPER::Connect(
+ User => $RT::DatabaseUser,
+ Password => $RT::DatabasePassword,
+ );
+
}
-=head2 BuildDSN
+=item BuildDSN
-Build the DSN for the RT database. Doesn't take any parameters, draws all that
-from the config.
+Build the DSN for the RT database. doesn't take any parameters, draws all that
+from the config file.
=cut
-require File::Spec;
sub BuildDSN {
my $self = shift;
- # 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;
+$RT::DatabasePort = undef unless (defined $RT::DatabasePort && $RT::DatabasePort =~ /^(\d+)$/);
+$RT::DatabaseHost = undef unless (defined $RT::DatabaseHost && $RT::DatabaseHost ne '');
- my $db_name = RT->Config->Get('DatabaseName');
- my $db_type = RT->Config->Get('DatabaseType');
+ $self->SUPER::BuildDSN(Host => $RT::DatabaseHost,
+ Database => $RT::DatabaseName,
+ Port => $RT::DatabasePort,
+ Driver => $RT::DatabaseType,
+ RequireSSL => $RT::DatabaseRequireSSL,
+ DisconnectHandleOnDestroy => 1
+ );
+
- 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 ) or die $!;
-
- 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;
- };
-
- 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;
- }
-
- if ( $item->{'BasedOn'} ) {
- my $basedon = RT::CustomField->new($RT::SystemUser);
- my ($ok, $msg ) = $basedon->LoadByCols( Name => $item->{'BasedOn'},
- LookupType => $new_entry->LookupType );
- if ($ok) {
- ($ok, $msg) = $new_entry->SetBasedOn( $basedon );
- if ($ok) {
- $RT::Logger->debug("Added BasedOn $item->{BasedOn}: $msg");
- } else {
- $RT::Logger->error("Failed to add basedOn $item->{BasedOn}: $msg");
- }
- } else {
- $RT::Logger->error("Unable to load $item->{BasedOn} as a $item->{LookupType} CF. Skipping BasedOn");
- }
- }
-
- 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;
-
-RT::Base->_ImportOverlays();
+eval "require RT::Handle_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Handle_Vendor.pm});
+eval "require RT::Handle_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Handle_Local.pm});
1;
diff --git a/rt/lib/RT/I18N/en_malkovich.po b/rt/lib/RT/I18N/en_malkovich.po
deleted file mode 100644
index 74769f1a3..000000000
--- a/rt/lib/RT/I18N/en_malkovich.po
+++ /dev/null
@@ -1,3973 +0,0 @@
-msgid ""
-msgstr ""
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: html/Approvals/Elements/Approve:26 html/Approvals/Elements/ShowDependency:49 html/SelfService/Display.html:24 html/Ticket/Display.html:25 html/Ticket/Display.html:29
-#. ($TicketObj->Id, $TicketObj->Subject)
-#. ($Ticket->id, $Ticket->Subject)
-#. ($ticket->Id, $ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "#%1: %2"
-msgstr "#%1: %2"
-
-#: html/Search/Elements/SelectPersonType:30 lib/RT/Date.pm:337
-#. ($s, $time_unit)
-#. ($option, $subtype)
-msgid "%1 %2"
-msgstr "%1 %2"
-
-#: lib/RT/Tickets_Overlay.pm:828
-#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
-msgid "%1 %2 %3"
-msgstr "%1 %2 %3"
-
-#: lib/RT/Date.pm:373
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
-msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%1 %2 %3 %4:%5:%6 %7"
-
-#: lib/RT/Ticket_Overlay.pm:3451 lib/RT/Transaction_Overlay.pm:550 lib/RT/Transaction_Overlay.pm:593
-#. ($cf->Name, $new_value->Content)
-#. ($field, $self->NewValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 added"
-msgstr "%1 %2 Malkovich"
-
-#: lib/RT/Date.pm:334
-#. ($s, $time_unit)
-msgid "%1 %2 ago"
-msgstr "%1 %2 ago"
-
-#: lib/RT/Ticket_Overlay.pm:3457 lib/RT/Transaction_Overlay.pm:557
-#. ($cf->Name, $old_value, $new_value->Content)
-#. ($field, $self->OldValue, $self->NewValue)
-msgid "%1 %2 changed to %3"
-msgstr "%1 %2 Malkovich to %3"
-
-#: lib/RT/Ticket_Overlay.pm:3454 lib/RT/Transaction_Overlay.pm:553 lib/RT/Transaction_Overlay.pm:599
-#. ($cf->Name, $old_value)
-#. ($field, $self->OldValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 deleted"
-msgstr "%1 %2 Malkovich"
-
-#: html/Admin/Elements/EditScrips:43 html/Admin/Elements/ListGlobalScrips:27 html/Ticket/Elements/PreviewScrips:53
-#. ($scrip->ConditionObj->Name, $scrip->ActionObj->Name, $scrip->TemplateObj->Name)
-#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
-msgid "%1 %2 with template %3"
-msgstr "%1 %2 Malkovich %3"
-
-#: bin/rt-crontool:165 bin/rt-crontool:172 bin/rt-crontool:178
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-msgid "%1 - An argument to pass to %2"
-msgstr "%1 - A Malkovich to pass to %2"
-
-#: bin/rt-crontool:181
-#. ("--verbose")
-msgid "%1 - Output status updates to STDOUT"
-msgstr "%1 - Malkovich Malkovich to MALKOVICH"
-
-#: bin/rt-crontool:175
-#. ("--action")
-msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - Malkovich the Malkovich Malkovich to use"
-
-#: bin/rt-crontool:169
-#. ("--condition")
-msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - Malkovich the Malkovich Malkovich to use"
-
-#: bin/rt-crontool:162
-#. ("--search")
-msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - Malkovich the Malkovich Malkovich to use"
-
-#: lib/RT/ScripAction_Overlay.pm:114
-#. ($self->Id)
-msgid "%1 ScripAction loaded"
-msgstr "%1 Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3484
-#. ($args{'Value'}, $cf->Name)
-msgid "%1 added as a value for %2"
-msgstr "%1 Malkovich as a Malkovich %2"
-
-#: lib/RT/Link_Overlay.pm:111 lib/RT/Link_Overlay.pm:118
-#. ($args{'Base'})
-#. ($args{'Target'})
-msgid "%1 appears to be a local object, but can't be found in the database"
-msgstr "%1 Malkovich to be a Malkovich, but can't be Malkovich in the Malkovich"
-
-#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:458
-#. ($self->BriefDescription , $self->CreatorObj->Name)
-#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
-msgid "%1 by %2"
-msgstr "%1 by %2"
-
-#: lib/RT/Transaction_Overlay.pm:512 lib/RT/Transaction_Overlay.pm:688 lib/RT/Transaction_Overlay.pm:697 lib/RT/Transaction_Overlay.pm:700
-#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue)
-#. ($self->Field , $q1->Name , $q2->Name)
-#. ($self->Field, $t2->AsString, $t1->AsString)
-#. ($self->Field, $self->OldValue, $self->NewValue)
-msgid "%1 changed from %2 to %3"
-msgstr "%1 Malkovich %2 to %3"
-
-#: lib/RT/Record.pm:739
-msgid "%1 could not be set to %2."
-msgstr "%1 Malkovich be set to %2."
-
-#: lib/RT/Ticket_Overlay.pm:2739
-#. ($self)
-msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr "%1 couldn't Malkovich to Malkovich. RT's Malkovich be Malkovich."
-
-#: NOT FOUND IN SOURCE
-msgid "%1 highest priority tickets I own..."
-msgstr "%1 Malkovich Malkovich I Malkovich..."
-
-#: html/Elements/MyTickets:26
-#. ($rows)
-msgid "%1 highest priority tickets I requested..."
-msgstr "%1 Malkovich Malkovich I Malkovich..."
-
-#: bin/rt-crontool:157
-#. ($0)
-msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr "%1 is a tool to act on Malkovich a Malkovich Malkovich, such as cron."
-
-#: lib/RT/Queue_Overlay.pm:784
-#. ($principal->Object->Name, $args{'Type'})
-msgid "%1 is no longer a %2 for this queue."
-msgstr "%1 is no Malkovich a %2 Malkovich."
-
-#: lib/RT/Ticket_Overlay.pm:3540
-#. ($args{'Value'}, $cf->Name)
-msgid "%1 is no longer a value for custom field %2"
-msgstr "%1 is no Malkovich a Malkovich Malkovich %2"
-
-#: html/Ticket/Create.html:155 html/Ticket/Create.html:156 html/Ticket/Elements/ShowBasics:36 html/Ticket/Elements/ShowBasics:42 html/Ticket/Elements/ShowBasics:47
-#. ('<input size=3 name="TimeWorked" value="'.$ARGS{TimeWorked}.'">')
-#. ('<input size=3 name="TimeLeft" value="'.$ARGS{TimeLeft}.'">')
-#. ($Ticket->TimeEstimated)
-#. ($Ticket->TimeWorked)
-#. ($Ticket->TimeLeft)
-msgid "%1 min"
-msgstr "%1 min"
-
-#: html/User/Elements/DelegateRights:75
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "%1 Malkovich"
-
-#: lib/RT/Action/ResolveMembers.pm:41
-#. (ref $self)
-msgid "%1 will resolve all members of a resolved group ticket."
-msgstr "%1 Malkovich Malkovich of a Malkovich Malkovich."
-
-#: lib/RT/Transaction_Overlay.pm:408
-#. ($self)
-msgid "%1: no attachment specified"
-msgstr "%1: no Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:56
-#. ($size)
-msgid "%1b"
-msgstr "%1b"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:53
-#. (int( $size / 102.4 ) / 10)
-msgid "%1k"
-msgstr "%1k"
-
-#: lib/RT/Ticket_Overlay.pm:1252
-#. ($args{'Status'})
-msgid "'%1' is an invalid value for status"
-msgstr "'%1' is a Malkovich Malkovich"
-
-#: html/Admin/Elements/EditCustomFieldValues:24 html/Admin/Elements/EditQueueWatchers:28 html/Admin/Elements/EditScrips:34 html/Admin/Elements/EditTemplates:35 html/Admin/Groups/Members.html:51 html/Elements/EditLinks:32 html/Ticket/Elements/EditPeople:45 html/User/Groups/Members.html:54
-msgid "(Check box to delete)"
-msgstr "(Malkovich to Malkovich)"
-
-#: html/Ticket/Elements/PreviewScrips:49
-msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr "(Malkovich to Malkovich Malkovich to the Malkovich Malkovich)"
-
-#: html/Ticket/Elements/PreviewScrips:71
-msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr "(Malkovich to Malkovich Malkovich to the Malkovich Malkovich)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Enter ticket ids or URLs, seperated with spaces)"
-msgstr "(Malkovich Malkovich or URLs, Malkovich Malkovich)"
-
-#: html/Admin/Queues/Modify.html:53 html/Admin/Queues/Modify.html:59
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
-msgid "(If left blank, will default to %1"
-msgstr "(If Malkovich, Malkovich to %1"
-
-#: html/Admin/Elements/EditCustomFields:32 html/Admin/Elements/ListGlobalCustomFields:31
-msgid "(No custom fields)"
-msgstr "(No Malkovich)"
-
-#: html/Admin/Groups/Members.html:49 html/User/Groups/Members.html:52
-msgid "(No members)"
-msgstr "(No Malkovich)"
-
-#: html/Admin/Elements/EditScrips:31 html/Admin/Elements/ListGlobalScrips:31
-msgid "(No scrips)"
-msgstr "(No Malkovich)"
-
-#: html/Admin/Elements/EditTemplates:30
-msgid "(No templates)"
-msgstr "(No Malkovich)"
-
-#: html/Ticket/Update.html:66
-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 "(Malkovich a Malkovich-copy of Malkovich to a Malkovich-Malkovich of Malkovich. Does <b>not</b> Malkovich Malkovich Malkovich Malkovich.)"
-
-#: html/Ticket/Create.html:78
-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 "(Malkovich a Malkovich-copy of Malkovich to a Malkovich-Malkovich of Malkovich Malkovich Malkovich. Malkovich <b>will</b> Malkovich Malkovich.)"
-
-#: html/Ticket/Update.html:62
-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 "(Malkovich a Malkovich-copy of Malkovich to a Malkovich-Malkovich of Malkovich. Does <b>not</b> Malkovich Malkovich Malkovich Malkovich.)"
-
-#: html/Ticket/Create.html:68
-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 "(Malkovich a Malkovich-copy of Malkovich to a Malkovich-Malkovich of Malkovich. Malkovich <b>will</b> Malkovich Malkovich.)"
-
-#: html/Admin/Groups/index.html:32 html/User/Groups/index.html:32
-msgid "(empty)"
-msgstr "(Malkovich)"
-
-#: html/Admin/Users/index.html:38
-msgid "(no name listed)"
-msgstr "(no Malkovich)"
-
-#: html/Admin/Elements/SelectRights:47 html/Elements/SelectCustomFieldValue:29 html/Ticket/Elements/EditCustomField:64 html/Ticket/Elements/ShowCustomFields:35 lib/RT/Transaction_Overlay.pm:511
-msgid "(no value)"
-msgstr "(no Malkovich)"
-
-#: html/Elements/EditLinks:105 html/Ticket/Elements/BulkLinks:27
-msgid "(only one ticket)"
-msgstr "(Malkovich)"
-
-#: html/Elements/TicketList:167
-msgid "(pending approval)"
-msgstr "(Malkovich Malkovich)"
-
-#: html/Elements/TicketList:170
-msgid "(pending other Collection)"
-msgstr "(Malkovich Malkovich)"
-
-#: NOT FOUND IN SOURCE
-msgid "(pending other tickets)"
-msgstr "(Malkovich Malkovich)"
-
-#: html/Admin/Users/Modify.html:49
-msgid "(required)"
-msgstr "(Malkovich)"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:60
-msgid "(untitled)"
-msgstr "(Malkovich)"
-
-#: NOT FOUND IN SOURCE
-msgid "..."
-msgstr "..."
-
-#: html/Ticket/Elements/ShowBasics:31
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket->Status %>"
-
-#: html/Elements/SelectTicketTypes:26
-msgid "<% $_ %>"
-msgstr "<% $_ %>"
-
-#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:25 lib/RT/StyleGuide.pod:767
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Malkovich in\">&nbsp;%1"
-
-#: etc/initialdata:218
-msgid "A blank template"
-msgstr "A Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:156 lib/RT/Principal_Overlay.pm:180
-msgid "ACE not found"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:830
-msgid "ACEs can only be created and deleted."
-msgstr "Malkovich be Malkovich and Malkovich."
-
-#: NOT FOUND IN SOURCE
-msgid "Aborting to avoid unintended ticket modifications.\\n"
-msgstr "Malkovich to Malkovich Malkovich Malkovich Malkovich.\\n"
-
-#: html/User/Elements/Tabs:31
-msgid "About me"
-msgstr "Malkovich me"
-
-#: html/Admin/Users/Modify.html:79
-msgid "Access control"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrip:49
-msgid "Action"
-msgstr "Malkovich"
-
-#: lib/RT/Scrip_Overlay.pm:148
-#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "Malkovich %1 Malkovich"
-
-#: bin/rt-crontool:119
-msgid "Action committed."
-msgstr "Malkovich Malkovich."
-
-#: bin/rt-crontool:115
-msgid "Action prepared..."
-msgstr "Malkovich..."
-
-#: html/Search/Bulk.html:93
-msgid "Add AdminCc"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:89
-msgid "Add Cc"
-msgstr "Add Cc"
-
-#: html/Ticket/Create.html:113 html/Ticket/Update.html:81
-msgid "Add More Files"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:85
-msgid "Add Requestor"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/AddCustomFieldValue:24
-msgid "Add Value"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Scrip.html:54
-msgid "Add a scrip which will apply to all queues"
-msgstr "Add a Malkovich Malkovich to Malkovich"
-
-#: html/Search/Bulk.html:125
-msgid "Add comments or replies to selected tickets"
-msgstr "Malkovich or Malkovich to Malkovich Malkovich"
-
-#: html/Admin/Groups/Members.html:41 html/User/Groups/Members.html:38
-msgid "Add members"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/People.html:65 html/Ticket/Elements/AddWatchers:27
-msgid "Add new watchers"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:684
-#. ($args{'Type'})
-msgid "Added principal as a %1 for this queue"
-msgstr "Malkovich as a %1 Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1547
-#. ($self->loc($args{'Type'}))
-msgid "Added principal as a %1 for this ticket"
-msgstr "Malkovich as a %1 Malkovich"
-
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:111
-msgid "Address1"
-msgstr "Malkovich1"
-
-#: html/Admin/Users/Modify.html:124 html/User/Prefs.html:115
-msgid "Address2"
-msgstr "Malkovich2"
-
-#: html/Ticket/Create.html:73
-msgid "Admin Cc"
-msgstr "Malkovich Cc"
-
-#: etc/initialdata:295
-msgid "Admin Comment"
-msgstr "Malkovich"
-
-#: etc/initialdata:274
-msgid "Admin Correspondence"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/index.html:24 html/Admin/Queues/index.html:27
-msgid "Admin queues"
-msgstr "Malkovich"
-
-#: html/Admin/Global/index.html:25 html/Admin/Global/index.html:27
-msgid "Admin/Global configuration"
-msgstr "Malkovich/Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin/Queue/Basics"
-msgstr "Malkovich/Malkovich/Malkovich"
-
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:38 lib/RT/ACE_Overlay.pm:88
-msgid "AdminCc"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:73
-msgid "AdminCustomFields"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Group_Overlay.pm:146
-msgid "AdminGroup"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:148
-msgid "AdminGroupMembership"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/System.pm:58
-msgid "AdminOwnPersonalGroups"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:69
-msgid "AdminQueue"
-msgstr "Malkovich"
-
-#: lib/RT/System.pm:59
-msgid "AdminUsers"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/People.html:47 html/Ticket/Elements/EditPeople:53
-msgid "Administrative Cc"
-msgstr "Malkovich Cc"
-
-#: html/Elements/SelectDateRelation:35
-msgid "After"
-msgstr "Malkovich"
-
-#: etc/initialdata:363
-msgid "All Approvals Passed"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Elements/EditCustomFields:94
-msgid "All Custom Fields"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/index.html:52
-msgid "All Queues"
-msgstr "Malkovich"
-
-#: html/Elements/Tabs:58
-msgid "Approval"
-msgstr "Malkovich"
-
-#: html/Approvals/Display.html:45 html/Approvals/Elements/ShowDependency:41 html/Approvals/index.html:64
-#. ($Ticket->Id, $Ticket->Subject)
-#. ($ticket->id, $msg)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "Approval #%1: %2"
-msgstr "Malkovich #%1: %2"
-
-#: html/Approvals/index.html:53
-#. ($ticket->Id)
-msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr "Malkovich #%1: Malkovich Malkovich to a Malkovich"
-
-#: html/Approvals/index.html:51
-#. ($ticket->Id)
-msgid "Approval #%1: Notes recorded"
-msgstr "Malkovich #%1: Malkovich"
-
-#: etc/initialdata:351
-msgid "Approval Passed"
-msgstr "Malkovich"
-
-#: etc/initialdata:374
-msgid "Approval Rejected"
-msgstr "Malkovich Malkovich"
-
-#: html/Approvals/Elements/Approve:43
-msgid "Approve"
-msgstr "Malkovich"
-
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "Malkovich's Malkovich: %1"
-
-#: lib/RT/Date.pm:414
-msgid "Apr."
-msgstr "Apr."
-
-#: html/Elements/SelectSortOrder:34 html/Search/Elements/DisplayOptions:52
-msgid "Ascending"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:134 html/SelfService/Update.html:47 html/Ticket/ModifyAll.html:82 html/Ticket/Update.html:81
-msgid "Attach"
-msgstr "Malkovich"
-
-#: html/SelfService/Create.html:64 html/Ticket/Create.html:109
-msgid "Attach file"
-msgstr "Malkovich"
-
-#: html/SelfService/Update.html:36 html/Ticket/Create.html:97 html/Ticket/Update.html:70
-msgid "Attached file"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:416
-msgid "Attachment created"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1251
-msgid "Attachment filename"
-msgstr "Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowAttachments:25
-msgid "Attachments"
-msgstr "Malkovich"
-
-#: lib/RT/Attributes_Overlay.pm:158
-msgid "Attribute Deleted"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Date.pm:418
-msgid "Aug."
-msgstr "Aug."
-
-#: NOT FOUND IN SOURCE
-msgid "AuthSystem"
-msgstr "Malkovich"
-
-#: etc/initialdata:221
-msgid "Autoreply"
-msgstr "Malkovich"
-
-#: etc/initialdata:72
-msgid "Autoreply To Requestors"
-msgstr "Malkovich To Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad data in %1"
-msgstr "Malkovich in %1"
-
-#: html/Admin/Elements/GroupTabs:38 html/Admin/Elements/QueueTabs:38 html/Admin/Elements/UserTabs:37 html/Ticket/Elements/Tabs:91 html/User/Elements/GroupTabs:37
-msgid "Basics"
-msgstr "Malkovich"
-
-#: html/Ticket/Update.html:64
-msgid "Bcc"
-msgstr "Bcc"
-
-#: html/Admin/Elements/EditScrip:73
-msgid "Be sure to save your changes"
-msgstr "Be sure to Malkovich Malkovich"
-
-#: html/Elements/SelectDateRelation:33 lib/RT/CurrentUser.pm:336
-msgid "Before"
-msgstr "Malkovich"
-
-#: etc/initialdata:217
-msgid "Blank"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/ShowHistory:38 html/Ticket/Elements/ShowHistory:44
-msgid "Brief headers"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:24 html/Search/Bulk.html:25
-msgid "Bulk ticket update"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:1533
-msgid "Can not modify system users"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:68
-msgid "Can this principal see this queue"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:211
-msgid "Can't add a custom field value without a name"
-msgstr "Can't add a Malkovich Malkovich Malkovich a name"
-
-#: lib/RT/Link_Overlay.pm:126
-msgid "Can't link a ticket to itself"
-msgstr "Can't link a Malkovich to Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2716
-msgid "Can't merge into a merged ticket. You should never get this error"
-msgstr "Can't Malkovich a Malkovich. Malkovich Malkovich Malkovich"
-
-#: lib/RT/Record.pm:1060 lib/RT/Record.pm:1138
-msgid "Can't specifiy both base and target"
-msgstr "Can't Malkovich Malkovich and Malkovich"
-
-#: html/autohandler:132
-#. ($msg)
-msgid "Cannot create user: %1"
-msgstr "Malkovich Malkovich: %1"
-
-#: etc/initialdata:50 html/Admin/Queues/People.html:43 html/SelfService/Create.html:48 html/Ticket/Create.html:63 html/Ticket/Elements/EditPeople:50 html/Ticket/Elements/ShowPeople:34 html/Ticket/Update.html:59 lib/RT/ACE_Overlay.pm:87
-msgid "Cc"
-msgstr "Cc"
-
-#: html/SelfService/Prefs.html:30
-msgid "Change password"
-msgstr "Malkovich"
-
-#: html/SelfService/Update.html:39 html/Ticket/Create.html:100 html/Ticket/Update.html:73
-msgid "Check box to delete"
-msgstr "Malkovich to Malkovich"
-
-#: html/Admin/Elements/SelectRights:30
-msgid "Check box to revoke right"
-msgstr "Malkovich to Malkovich"
-
-#: html/Elements/EditLinks:121 html/Elements/EditLinks:63 html/Elements/ShowLinks:56 html/Ticket/Create.html:183 html/Ticket/Elements/BulkLinks:42
-msgid "Children"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:129 html/User/Prefs.html:119
-msgid "City"
-msgstr "City"
-
-#: html/Ticket/Elements/ShowDates:47
-msgid "Closed"
-msgstr "Malkovich"
-
-#: html/SelfService/Closed.html:24
-msgid "Closed Tickets"
-msgstr "Malkovich"
-
-#: html/SelfService/Elements/Tabs:44
-msgid "Closed tickets"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/ShowTransaction:152 html/Ticket/Elements/Tabs:154
-msgid "Comment"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/Modify.html:57
-msgid "Comment Address"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:88
-msgid "Comment on tickets"
-msgstr "Malkovich on Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:88
-msgid "CommentOnTicket"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Comments"
-msgstr "Malkovich"
-
-#: html/Ticket/ModifyAll.html:69 html/Ticket/Update.html:51
-msgid "Comments (Not sent to requestors)"
-msgstr "Malkovich (Malkovich to Malkovich)"
-
-#: html/Search/Bulk.html:129
-msgid "Comments (not sent to requestors)"
-msgstr "Malkovich (Malkovich to Malkovich)"
-
-#: NOT FOUND IN SOURCE
-msgid "Comments about %1"
-msgstr "Malkovich %1"
-
-#: html/Admin/Users/Modify.html:182 html/Ticket/Elements/ShowRequestor:45
-msgid "Comments about this user"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:537
-msgid "Comments added"
-msgstr "Malkovich"
-
-#: lib/RT/Action/Generic.pm:149
-msgid "Commit Stubbed"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrip:41
-msgid "Condition"
-msgstr "Malkovich"
-
-#: bin/rt-crontool:105
-msgid "Condition matches..."
-msgstr "Malkovich Malkovich..."
-
-#: lib/RT/Scrip_Overlay.pm:164
-msgid "Condition not found"
-msgstr "Malkovich Malkovich"
-
-#: html/Elements/Tabs:52
-msgid "Configuration"
-msgstr "Malkovich"
-
-#: html/SelfService/Prefs.html:32
-msgid "Confirm"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "ContactInfoSystem"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Elements/ModifyTemplate:43 html/Elements/SelectAttachmentField:26 html/Ticket/ModifyAll.html:86
-msgid "Content"
-msgstr "Malkovich"
-
-#: etc/initialdata:286
-msgid "Correspondence"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:533
-msgid "Correspondence added"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3471
-msgid "Could not add new custom field value for ticket. "
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich. "
-
-#: lib/RT/Ticket_Overlay.pm:2967 lib/RT/Ticket_Overlay.pm:2975 lib/RT/Ticket_Overlay.pm:2992
-msgid "Could not change owner. "
-msgstr "Malkovich Malkovich. "
-
-#: html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditCustomFields:164
-#. ($msg)
-msgid "Could not create CustomField"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/User/Groups/Modify.html:76 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481
-msgid "Could not create group"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Global/Template.html:74 html/Admin/Queues/Template.html:71
-#. ($msg)
-msgid "Could not create template: %1"
-msgstr "Malkovich Malkovich: %1"
-
-#: lib/RT/Ticket_Overlay.pm:1185 lib/RT/Ticket_Overlay.pm:364
-msgid "Could not create ticket. Queue not set"
-msgstr "Malkovich Malkovich. Malkovich"
-
-#: lib/RT/User_Overlay.pm:226 lib/RT/User_Overlay.pm:240 lib/RT/User_Overlay.pm:249 lib/RT/User_Overlay.pm:258 lib/RT/User_Overlay.pm:267 lib/RT/User_Overlay.pm:281 lib/RT/User_Overlay.pm:291 lib/RT/User_Overlay.pm:462
-msgid "Could not create user"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:662 lib/RT/Ticket_Overlay.pm:1515
-msgid "Could not find or create that user"
-msgstr "Malkovich or Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:723 lib/RT/Ticket_Overlay.pm:1596
-msgid "Could not find that principal"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Groups/Members.html:87 html/User/Groups/Members.html:89 html/User/Groups/Modify.html:81
-msgid "Could not load group"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:682
-#. ($args{'Type'})
-msgid "Could not make that principal a %1 for this queue"
-msgstr "Malkovich Malkovich Malkovich a %1 Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1536
-#. ($self->loc($args{'Type'}))
-msgid "Could not make that principal a %1 for this ticket"
-msgstr "Malkovich Malkovich Malkovich a %1 Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:781
-#. ($args{'Type'})
-msgid "Could not remove that principal as a %1 for this queue"
-msgstr "Malkovich Malkovich Malkovich as a %1 Malkovich"
-
-#: lib/RT/Group_Overlay.pm:977
-msgid "Couldn't add member to group"
-msgstr "Couldn't Malkovich to Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3481 lib/RT/Ticket_Overlay.pm:3537
-#. ($Msg)
-msgid "Couldn't create a transaction: %1"
-msgstr "Couldn't Malkovich a Malkovich: %1"
-
-#: lib/RT/Record.pm:748
-msgid "Couldn't find row"
-msgstr "Couldn't Malkovich"
-
-#: lib/RT/Group_Overlay.pm:951
-msgid "Couldn't find that principal"
-msgstr "Couldn't Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:245
-msgid "Couldn't find that value"
-msgstr "Couldn't Malkovich"
-
-#: lib/RT/CurrentUser.pm:123
-#. ($self->Id)
-msgid "Couldn't load %1 from the users database.\\n"
-msgstr "Couldn't load %1 from the Malkovich.\\n"
-
-#: html/Admin/Groups/GroupRights.html:87 html/Admin/Groups/UserRights.html:74
-#. ($id)
-msgid "Couldn't load group %1"
-msgstr "Couldn't Malkovich %1"
-
-#: lib/RT/Link_Overlay.pm:169 lib/RT/Link_Overlay.pm:178 lib/RT/Link_Overlay.pm:205
-msgid "Couldn't load link"
-msgstr "Couldn't Malkovich"
-
-#: html/Admin/Elements/EditCustomFields:145 html/Admin/Queues/CustomFields.html:35 html/Admin/Queues/People.html:120
-#. ($id)
-msgid "Couldn't load queue"
-msgstr "Couldn't Malkovich"
-
-#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:71
-#. ($id)
-msgid "Couldn't load queue %1"
-msgstr "Couldn't Malkovich %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load that user (%1)"
-msgstr "Couldn't Malkovich (%1)"
-
-#: html/SelfService/Display.html:116
-#. ($id)
-msgid "Couldn't load ticket '%1'"
-msgstr "Couldn't Malkovich '%1'"
-
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:131
-msgid "Country"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/CreateUserCalled:25 html/Admin/Elements/EditCustomField:62 html/Admin/Elements/EditScrip:110 html/Admin/Groups/Modify.html:55 html/Admin/Queues/Template.html:44 html/Elements/QuickCreate:23 html/Ticket/Create.html:134 html/Ticket/Create.html:195 html/User/Groups/Modify.html:55
-msgid "Create"
-msgstr "Malkovich"
-
-#: etc/initialdata:135
-msgid "Create Tickets"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomField:74
-msgid "Create a CustomField"
-msgstr "Malkovich a Malkovich"
-
-#: html/Admin/Queues/CustomField.html:47
-#. ($QueueObj->Name())
-msgid "Create a CustomField for queue %1"
-msgstr "Malkovich a Malkovich Malkovich %1"
-
-#: html/Admin/Global/CustomField.html:47
-msgid "Create a CustomField which applies to all queues"
-msgstr "Malkovich a Malkovich Malkovich to Malkovich"
-
-#: html/Admin/Groups/Modify.html:66 html/Admin/Groups/Modify.html:92
-msgid "Create a new group"
-msgstr "Malkovich a Malkovich"
-
-#: html/User/Groups/Modify.html:66 html/User/Groups/Modify.html:91
-msgid "Create a new personal group"
-msgstr "Malkovich a Malkovich Malkovich"
-
-#: html/Ticket/Create.html:24 html/Ticket/Create.html:27 html/Ticket/Create.html:35
-msgid "Create a new ticket"
-msgstr "Malkovich a Malkovich"
-
-#: html/Admin/Users/Modify.html:211 html/Admin/Users/Modify.html:268
-msgid "Create a new user"
-msgstr "Malkovich a Malkovich"
-
-#: html/Admin/Queues/Modify.html:103
-msgid "Create a queue"
-msgstr "Malkovich a Malkovich"
-
-#: html/Admin/Queues/Scrip.html:58
-#. ($QueueObj->Name)
-msgid "Create a scrip for queue %1"
-msgstr "Malkovich a Malkovich %1"
-
-#: html/Admin/Global/Template.html:68 html/Admin/Queues/Template.html:64
-msgid "Create a template"
-msgstr "Malkovich a Malkovich"
-
-#: html/SelfService/Create.html:24
-msgid "Create a ticket"
-msgstr "Malkovich a Malkovich"
-
-#: etc/initialdata:137
-msgid "Create new tickets based on this scrip's template"
-msgstr "Malkovich Malkovich on Malkovich's Malkovich"
-
-#: html/SelfService/Create.html:77
-msgid "Create ticket"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:86
-msgid "Create tickets in this queue"
-msgstr "Malkovich in Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:73
-msgid "Create, delete and modify custom fields"
-msgstr "Malkovich, Malkovich and Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:69
-msgid "Create, delete and modify queues"
-msgstr "Malkovich, Malkovich and Malkovich"
-
-#: lib/RT/System.pm:58
-msgid "Create, delete and modify the members of personal groups"
-msgstr "Malkovich, Malkovich and Malkovich the Malkovich of Malkovich"
-
-#: lib/RT/System.pm:59
-msgid "Create, delete and modify users"
-msgstr "Malkovich, Malkovich and Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:86
-msgid "CreateTicket"
-msgstr "Malkovich"
-
-#: html/Elements/SelectDateType:25 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1279
-msgid "Created"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomField:87
-#. ($CustomFieldObj->Name())
-msgid "Created CustomField %1"
-msgstr "Malkovich Malkovich %1"
-
-#: html/Elements/EditLinks:27
-msgid "Current Links"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Elements/EditScrips:29
-msgid "Current Scrips"
-msgstr "Malkovich"
-
-#: html/Admin/Groups/Members.html:38 html/User/Groups/Members.html:41
-msgid "Current members"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectRights:28
-msgid "Current rights"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Current search criteria"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/People.html:40 html/Ticket/Elements/EditPeople:44
-msgid "Current watchers"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Global/CustomField.html:54
-#. ($CustomField)
-msgid "Custom Field #%1"
-msgstr "Malkovich #%1"
-
-#: html/Admin/Elements/QueueTabs:52 html/Admin/Elements/SystemTabs:39 html/Admin/Global/index.html:49 html/Ticket/Elements/ShowSummary:35
-msgid "Custom Fields"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrip:101
-msgid "Custom action cleanup code"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Elements/EditScrip:93
-msgid "Custom action preparation code"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Elements/EditScrip:85
-msgid "Custom condition"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1693
-#. ($CF->Name , $args{OPERATOR} , $args{VALUE})
-msgid "Custom field %1 %2 %3"
-msgstr "Malkovich %1 %2 %3"
-
-#: lib/RT/Tickets_Overlay.pm:1688
-#. ($CF->Name)
-msgid "Custom field %1 has a value."
-msgstr "Malkovich %1 has a Malkovich."
-
-#: lib/RT/Tickets_Overlay.pm:1685
-#. ($CF->Name)
-msgid "Custom field %1 has no value."
-msgstr "Malkovich %1 has no Malkovich."
-
-#: lib/RT/Ticket_Overlay.pm:3373
-#. ($args{'Field'})
-msgid "Custom field %1 not found"
-msgstr "Malkovich %1 Malkovich"
-
-#: html/Admin/Elements/EditCustomFields:195
-msgid "Custom field deleted"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3523
-msgid "Custom field not found"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:355
-#. ($args{'Content'}, $self->Name)
-msgid "Custom field value %1 could not be found for custom field %2"
-msgstr "Malkovich Malkovich %1 Malkovich be Malkovich Malkovich %2"
-
-#: lib/RT/CustomField_Overlay.pm:255
-msgid "Custom field value could not be deleted"
-msgstr "Malkovich Malkovich Malkovich be Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:361
-msgid "Custom field value could not be found"
-msgstr "Malkovich Malkovich Malkovich be Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:253 lib/RT/CustomField_Overlay.pm:363
-msgid "Custom field value deleted"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:541
-msgid "CustomField"
-msgstr "Malkovich"
-
-#: html/SelfService/Display.html:38 html/Ticket/Create.html:160 html/Ticket/Elements/ShowSummary:54 html/Ticket/Elements/Tabs:94 html/Ticket/ModifyAll.html:43
-msgid "Dates"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:422
-msgid "Dec."
-msgstr "Dec."
-
-#: etc/initialdata:222
-msgid "Default Autoresponse template"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: etc/initialdata:296
-msgid "Default admin comment template"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: etc/initialdata:287
-msgid "Default correspondence template"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: etc/initialdata:253
-msgid "Default transaction template"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:519
-#. ($type, $self->Field, $self->OldValue, $self->NewValue)
-msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "Malkovich: %1/%2 Malkovich %3 to %4"
-
-#: html/User/Delegation.html:24 html/User/Delegation.html:27
-msgid "Delegate rights"
-msgstr "Malkovich"
-
-#: lib/RT/System.pm:62
-msgid "Delegate specific rights which have been granted to you."
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich to you."
-
-#: lib/RT/System.pm:62
-msgid "DelegateRights"
-msgstr "Malkovich"
-
-#: html/User/Elements/Tabs:37
-msgid "Delegation"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrips:53 html/Search/Elements/EditFormat:66 html/Search/Elements/EditSearches:15
-msgid "Delete"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrips:52
-msgid "Delete selected scrips"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:91
-msgid "Delete tickets"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:91
-msgid "DeleteTicket"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:162
-msgid "Deleting this object could break referential integrity"
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:329
-msgid "Deleting this object would break referential integrity"
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:478
-msgid "Deleting this object would violate referential integrity"
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich Malkovich"
-
-#: html/Approvals/Elements/Approve:44
-msgid "Deny"
-msgstr "Deny"
-
-#: html/Elements/EditLinks:113 html/Elements/EditLinks:44 html/Elements/ShowLinks:36 html/Ticket/Create.html:181 html/Ticket/Elements/BulkLinks:34 html/Ticket/Elements/ShowDependencies:31
-msgid "Depended on by"
-msgstr "Malkovich on by"
-
-#: lib/RT/Transaction_Overlay.pm:621
-#. ($value)
-msgid "Dependency by %1 added"
-msgstr "Malkovich by %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:661
-#. ($value)
-msgid "Dependency by %1 deleted"
-msgstr "Malkovich by %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:618
-#. ($value)
-msgid "Dependency on %1 added"
-msgstr "Malkovich on %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:658
-#. ($value)
-msgid "Dependency on %1 deleted"
-msgstr "Malkovich on %1 Malkovich"
-
-#: html/Elements/EditLinks:109 html/Elements/EditLinks:35 html/Elements/SelectLinkType:26 html/Elements/ShowLinks:26 html/Ticket/Create.html:180 html/Ticket/Elements/BulkLinks:30 html/Ticket/Elements/ShowDependencies:24
-msgid "Depends on"
-msgstr "Malkovich on"
-
-#: html/Elements/SelectSortOrder:34 html/Search/Elements/DisplayOptions:57
-msgid "Descending"
-msgstr "Malkovich"
-
-#: html/SelfService/Create.html:72 html/Ticket/Create.html:118
-msgid "Describe the issue below"
-msgstr "Malkovich the Malkovich"
-
-#: html/Admin/Elements/AddCustomFieldValue:35 html/Admin/Elements/EditCustomField:38 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyTemplate:35 html/Admin/Groups/Modify.html:48 html/Admin/Queues/Modify.html:47 html/Elements/SelectGroups:26 html/Search/Elements/EditSearches:8 html/User/Groups/Modify.html:48
-msgid "Description"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/Tabs:86
-msgid "Display"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:70
-msgid "Display Access Control List"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:76
-msgid "Display Scrip templates for this queue"
-msgstr "Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:79
-msgid "Display Scrips for this queue"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowHistory:34
-msgid "Display mode"
-msgstr "Malkovich"
-
-#: lib/RT/System.pm:53
-msgid "Do anything and everything"
-msgstr "Do Malkovich and Malkovich"
-
-#: html/Elements/Refresh:29
-msgid "Don't refresh this page."
-msgstr "Don't Malkovich Malkovich."
-
-#: NOT FOUND IN SOURCE
-msgid "Don't show search results"
-msgstr "Don't Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:60
-msgid "Download"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Download all the tickets as a tab delimited file"
-msgstr "Malkovich the Malkovich as a Malkovich Malkovich"
-
-#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:44 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1283
-msgid "Due"
-msgstr "Due"
-
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "MALKOVICH: Couldn't Malkovich '%1': %2.\\n"
-
-#: html/Admin/Queues/CustomFields.html:45
-#. ($Queue->Name)
-msgid "Edit Custom Fields for %1"
-msgstr "Malkovich Malkovich %1"
-
-#: html/Search/Bulk.html:141 html/Ticket/ModifyLinks.html:35
-msgid "Edit Links"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/Templates.html:41
-#. ($QueueObj->Name)
-msgid "Edit Templates for queue %1"
-msgstr "Malkovich Malkovich %1"
-
-#: html/Admin/Global/index.html:45
-msgid "Edit system templates"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/Modify.html:118
-#. ($QueueObj->Name)
-msgid "Editing Configuration for queue %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Editing Configuration for user %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: html/Admin/Elements/EditCustomField:90
-#. ($CustomFieldObj->Name())
-msgid "Editing CustomField %1"
-msgstr "Malkovich Malkovich %1"
-
-#: html/Admin/Groups/Members.html:31
-#. ($Group->Name)
-msgid "Editing membership for group %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: html/User/Groups/Members.html:128
-#. ($Group->Name)
-msgid "Editing membership for personal group %1"
-msgstr "Malkovich Malkovich Malkovich Malkovich %1"
-
-#: lib/RT/Record.pm:1075 lib/RT/Record.pm:1152
-msgid "Either base or target must be specified"
-msgstr "Malkovich or Malkovich be Malkovich"
-
-#: html/Admin/Users/Modify.html:52 html/Elements/SelectUsers:26 html/Ticket/Elements/AddWatchers:55 html/User/Prefs.html:43
-msgid "Email"
-msgstr "Malkovich"
-
-#: lib/RT/User_Overlay.pm:206
-msgid "Email address in use"
-msgstr "Malkovich in use"
-
-#: NOT FOUND IN SOURCE
-msgid "EmailAddress"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "EmailEncoding"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomField:50
-msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "Malkovich (Malkovich Malkovich Malkovich Malkovich Malkovich)"
-
-#: html/Admin/Groups/Modify.html:52 html/User/Groups/Modify.html:52
-msgid "Enabled (Unchecking this box disables this group)"
-msgstr "Malkovich (Malkovich Malkovich Malkovich Malkovich)"
-
-#: html/Admin/Queues/Modify.html:83
-msgid "Enabled (Unchecking this box disables this queue)"
-msgstr "Malkovich (Malkovich Malkovich Malkovich Malkovich)"
-
-#: html/Admin/Elements/EditCustomFields:97
-msgid "Enabled Custom Fields"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/index.html:55
-msgid "Enabled Queues"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomField:106 html/Admin/Groups/Modify.html:116 html/Admin/Queues/Modify.html:140 html/Admin/Users/Modify.html:308 html/User/Groups/Modify.html:116
-#. (loc_fuzzy($msg))
-msgid "Enabled status %1"
-msgstr "Malkovich %1"
-
-#: lib/RT/CustomField_Overlay.pm:433
-msgid "Enter multiple values"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:430
-msgid "Enter one value"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:142
-msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces."
-msgstr "Malkovich or URIs to Malkovich to. Malkovich Malkovich Malkovich Malkovich."
-
-#: html/Elements/Login:39 html/SelfService/Error.html:24 html/SelfService/Error.html:25
-msgid "Error"
-msgstr "Error"
-
-#: lib/RT/Queue_Overlay.pm:593
-msgid "Error in parameters to Queue->AddWatcher"
-msgstr "Malkovich in Malkovich to Malkovich->Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Queue->DelWatcher"
-msgstr "Malkovich in Malkovich to Malkovich->Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1468
-msgid "Error in parameters to Ticket->AddWatcher"
-msgstr "Malkovich in Malkovich to Malkovich->Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Ticket->DelWatcher"
-msgstr "Malkovich in Malkovich to Malkovich->Malkovich"
-
-#: etc/initialdata:20
-msgid "Everyone"
-msgstr "Malkovich"
-
-#: bin/rt-crontool:190
-msgid "Example:"
-msgstr "Malkovich:"
-
-#: NOT FOUND IN SOURCE
-msgid "ExternalAuthId"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "ExternalContactInfoId"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Users/Modify.html:72
-msgid "Extra info"
-msgstr "Malkovich"
-
-#: lib/RT/User_Overlay.pm:342
-msgid "Failed to find 'Privileged' users pseudogroup."
-msgstr "Malkovich to find 'Malkovich' Malkovich Malkovich."
-
-#: lib/RT/User_Overlay.pm:349
-msgid "Failed to find 'Unprivileged' users pseudogroup"
-msgstr "Malkovich to find 'Malkovich' Malkovich Malkovich"
-
-#: bin/rt-crontool:134
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr "Malkovich to Malkovich %1. (%2)"
-
-#: lib/RT/Date.pm:412
-msgid "Feb."
-msgstr "Feb."
-
-#: html/Search/Elements/PickBasics:60 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:57 lib/RT/Tickets_Overlay.pm:1153
-msgid "Final Priority"
-msgstr "Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1274
-msgid "FinalPriority"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/People.html:60 html/Ticket/Elements/EditPeople:33
-msgid "Find group whose"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Queues/People.html:56 html/Admin/Users/index.html:45 html/Ticket/Elements/EditPeople:29
-msgid "Find people whose"
-msgstr "Malkovich Malkovich"
-
-#: html/Search/Results.html:72
-msgid "Find tickets"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/Tabs:59
-msgid "First"
-msgstr "Malkovich"
-
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:746
-msgid "Foo Bar Baz"
-msgstr "Malkovich"
-
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:737
-msgid "Foo!"
-msgstr "Foo!"
-
-#: html/Search/Bulk.html:84
-msgid "Force change"
-msgstr "Malkovich"
-
-#: html/Search/Results.html:70
-#. ($ticketcount)
-msgid "Found %quant(%1,ticket)"
-msgstr "Malkovich %quant(%1,Malkovich)"
-
-#: lib/RT/Record.pm:750
-msgid "Found Object"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "FreeformContactInfo"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:37
-msgid "FreeformMultiple"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:36
-msgid "FreeformSingle"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:392
-msgid "Fri."
-msgstr "Fri."
-
-#: html/Ticket/Elements/ShowHistory:40 html/Ticket/Elements/ShowHistory:50
-msgid "Full headers"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:587
-#. ($New->Name)
-msgid "Given to %1"
-msgstr "Malkovich to %1"
-
-#: html/Admin/Elements/Tabs:40 html/Admin/index.html:37
-msgid "Global"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectTemplate:37
-#. (loc($Template->Name))
-msgid "Global template: %1"
-msgstr "Malkovich: %1"
-
-#: html/Tools/Offline.html:69
-msgid "Go"
-msgstr "Go"
-
-#: html/Admin/Elements/EditCustomFields:73 html/Admin/Groups/index.html:39 html/Admin/Queues/People.html:58 html/Admin/Queues/People.html:62 html/Admin/Queues/index.html:43 html/Admin/Users/index.html:48 html/Ticket/Elements/EditPeople:31 html/Ticket/Elements/EditPeople:35 html/index.html:69
-msgid "Go!"
-msgstr "Go!"
-
-#: html/Elements/GotoTicket:24 html/SelfService/Elements/GotoTicket:24
-msgid "Goto ticket"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/AddWatchers:45 html/Ticket/Elements/ShowGroupMembers:33 html/User/Elements/DelegateRights:77
-msgid "Group"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/GroupTabs:44 html/Admin/Elements/QueueTabs:56 html/Admin/Elements/SystemTabs:43 html/Admin/Global/index.html:54
-msgid "Group Rights"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:957
-msgid "Group already has member"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Groups/Modify.html:76
-#. ($create_msg)
-msgid "Group could not be created: %1"
-msgstr "Malkovich be Malkovich: %1"
-
-#: lib/RT/Group_Overlay.pm:497
-msgid "Group created"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:1129
-msgid "Group has no such member"
-msgstr "Malkovich no Malkovich"
-
-#: lib/RT/Group_Overlay.pm:937 lib/RT/Queue_Overlay.pm:669 lib/RT/Queue_Overlay.pm:729 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1602
-msgid "Group not found"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectNewGroupMembers:34 html/Admin/Elements/Tabs:34 html/Admin/Groups/Members.html:63 html/Admin/Queues/People.html:82 html/Admin/index.html:31 html/User/Groups/Members.html:66
-msgid "Groups"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:963
-msgid "Groups can't be members of their members"
-msgstr "Malkovich can't be Malkovich of Malkovich"
-
-#: lib/RT/Interface/CLI.pm:72 lib/RT/Interface/CLI.pm:72
-msgid "Hello!"
-msgstr "Malkovich!"
-
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:753
-#. ($name)
-msgid "Hello, %1"
-msgstr "Malkovich, %1"
-
-#: html/Ticket/Elements/ShowHistory:29 html/Ticket/Elements/Tabs:89
-msgid "History"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "HomePhone"
-msgstr "Malkovich"
-
-#: html/Elements/Tabs:43
-msgid "Homepage"
-msgstr "Malkovich"
-
-#: lib/RT/Base.pm:86
-#. (6)
-msgid "I have %quant(%1,concrete mixer)."
-msgstr "I have %quant(%1,Malkovich)."
-
-#: html/Search/Elements/PickBasics:104 html/Ticket/Elements/ShowBasics:26 lib/RT/Tickets_Overlay.pm:1080
-msgid "Id"
-msgstr "Id"
-
-#: html/Admin/Users/Modify.html:43 html/User/Prefs.html:38
-msgid "Identity"
-msgstr "Malkovich"
-
-#: etc/initialdata:429
-msgid "If an approval is rejected, reject the original and delete pending approvals"
-msgstr "If a Malkovich is Malkovich, Malkovich the Malkovich and Malkovich Malkovich"
-
-#: bin/rt-crontool:186
-msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
-msgstr "If Malkovich Malkovich, a Malkovich Malkovich Malkovich Malkovich to Malkovich Malkovich Malkovich to RT."
-
-#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyPeople.html:37
-msgid "If you've updated anything above, be sure to"
-msgstr "If you've Malkovich Malkovich, be sure to"
-
-#: lib/RT/Record.pm:742
-msgid "Illegal value for %1"
-msgstr "Malkovich Malkovich %1"
-
-#: lib/RT/Record.pm:745
-msgid "Immutable field"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomFields:72
-msgid "Include disabled custom fields in listing."
-msgstr "Malkovich Malkovich Malkovich in Malkovich."
-
-#: html/Admin/Queues/index.html:42
-msgid "Include disabled queues in listing."
-msgstr "Malkovich Malkovich in Malkovich."
-
-#: html/Admin/Users/index.html:46
-msgid "Include disabled users in search."
-msgstr "Malkovich Malkovich in Malkovich."
-
-#: html/Search/Elements/PickBasics:59 lib/RT/Tickets_Overlay.pm:1129
-msgid "Initial Priority"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1273 lib/RT/Ticket_Overlay.pm:1275
-msgid "InitialPriority"
-msgstr "Malkovich"
-
-#: lib/RT/ScripAction_Overlay.pm:97
-msgid "Input error"
-msgstr "Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3797
-msgid "Internal Error"
-msgstr "Malkovich"
-
-#: lib/RT/Record.pm:186
-#. ($id->{error_message})
-msgid "Internal Error: %1"
-msgstr "Malkovich: %1"
-
-#: lib/RT/Group_Overlay.pm:644
-msgid "Invalid Group Type"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Principal_Overlay.pm:127
-msgid "Invalid Right"
-msgstr "Malkovich"
-
-#: lib/RT/Record.pm:747
-msgid "Invalid data"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "Malkovich. Malkovich to 'Malkovich'."
-
-#: lib/RT/Scrip_Overlay.pm:133 lib/RT/Template_Overlay.pm:251
-msgid "Invalid queue"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:269 lib/RT/ACE_Overlay.pm:274
-msgid "Invalid right"
-msgstr "Malkovich"
-
-#: lib/RT/Record.pm:161
-#. ($key)
-msgid "Invalid value for %1"
-msgstr "Malkovich Malkovich %1"
-
-#: lib/RT/Ticket_Overlay.pm:3380
-msgid "Invalid value for custom field"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:385
-msgid "Invalid value for status"
-msgstr "Malkovich Malkovich"
-
-#: bin/rt-crontool:187
-msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
-msgstr "It is Malkovich Malkovich Malkovich Malkovich Malkovich be Malkovich to Malkovich."
-
-#: bin/rt-crontool:188
-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 "It is Malkovich Malkovich a non-Malkovich Malkovich the Malkovich Malkovich and RT Malkovich to Malkovich."
-
-#: bin/rt-crontool:159
-msgid "It takes several arguments:"
-msgstr "It Malkovich Malkovich:"
-
-#: lib/RT/Date.pm:411
-msgid "Jan."
-msgstr "Jan."
-
-#: lib/RT/Group_Overlay.pm:149
-msgid "Join or leave this group"
-msgstr "Join or Malkovich Malkovich"
-
-#: lib/RT/Date.pm:417
-msgid "Jul."
-msgstr "Jul."
-
-#: html/Ticket/Elements/Tabs:100
-msgid "Jumbo"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:416
-msgid "Jun."
-msgstr "Jun."
-
-#: NOT FOUND IN SOURCE
-msgid "Lang"
-msgstr "Lang"
-
-#: html/User/Prefs.html:54
-msgid "Language"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/Tabs:74
-msgid "Last"
-msgstr "Last"
-
-#: html/Ticket/Elements/EditDates:37 html/Ticket/Elements/ShowDates:39
-msgid "Last Contact"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Last Contact</a>"
-msgstr "Malkovich</a>"
-
-#: html/Elements/SelectDateType:28
-msgid "Last Contacted"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Last Notified"
-msgstr "Malkovich"
-
-#: html/Elements/SelectDateType:29
-msgid "Last Updated"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:82
-msgid "Let this user access RT"
-msgstr "Malkovich Malkovich RT"
-
-#: html/Admin/Users/Modify.html:86
-msgid "Let this user be granted rights"
-msgstr "Malkovich be Malkovich"
-
-#: lib/RT/Record.pm:1086
-msgid "Link already exists"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Record.pm:1100
-msgid "Link could not be created"
-msgstr "Malkovich be Malkovich"
-
-#: lib/RT/Record.pm:1106
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr "Malkovich (%1)"
-
-#: lib/RT/Record.pm:1167
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr "Malkovich (%1)"
-
-#: lib/RT/Record.pm:1173
-msgid "Link not found"
-msgstr "Malkovich"
-
-#: html/Ticket/ModifyLinks.html:24 html/Ticket/ModifyLinks.html:28
-#. ($Ticket->Id)
-msgid "Link ticket #%1"
-msgstr "Malkovich #%1"
-
-#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:61 html/Ticket/Elements/Tabs:98 html/Ticket/ModifyAll.html:56
-msgid "Links"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:111 html/User/Prefs.html:104
-msgid "Location"
-msgstr "Malkovich"
-
-#: lib/RT.pm:184
-#. ($RT::LogDir)
-msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
-msgstr "Malkovich %1 Malkovich or couldn't be Malkovich.\\n RT can't run."
-
-#: html/Elements/Header:69
-#. ("<b>".$session{'CurrentUser'}->Name."</b>")
-msgid "Logged in as %1"
-msgstr "Malkovich in as %1"
-
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:35 html/Elements/Login:44 html/Elements/Login:54 lib/RT/StyleGuide.pod:777
-msgid "Login"
-msgstr "Malkovich"
-
-#: html/Elements/Header:66
-msgid "Logout"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:83
-msgid "Make Owner"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:107
-msgid "Make Status"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:115
-msgid "Make date Due"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:117
-msgid "Make date Resolved"
-msgstr "Malkovich Malkovich"
-
-#: html/Search/Bulk.html:111
-msgid "Make date Started"
-msgstr "Malkovich Malkovich"
-
-#: html/Search/Bulk.html:109
-msgid "Make date Starts"
-msgstr "Malkovich Malkovich"
-
-#: html/Search/Bulk.html:113
-msgid "Make date Told"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:103
-msgid "Make priority"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:105
-msgid "Make queue"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:101
-msgid "Make subject"
-msgstr "Malkovich"
-
-#: html/Admin/index.html:32
-msgid "Manage groups and group membership"
-msgstr "Malkovich and Malkovich Malkovich"
-
-#: html/Admin/index.html:38
-msgid "Manage properties and configuration which apply to all queues"
-msgstr "Malkovich Malkovich and Malkovich Malkovich to Malkovich"
-
-#: html/Admin/index.html:35
-msgid "Manage queues and queue-specific properties"
-msgstr "Malkovich and Malkovich-Malkovich Malkovich"
-
-#: html/Admin/index.html:29
-msgid "Manage users and passwords"
-msgstr "Malkovich and Malkovich"
-
-#: lib/RT/Date.pm:413
-msgid "Mar."
-msgstr "Mar."
-
-#: lib/RT/Date.pm:415
-msgid "May."
-msgstr "May."
-
-#: lib/RT/Transaction_Overlay.pm:634
-#. ($value)
-msgid "Member %1 added"
-msgstr "Malkovich %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:674
-#. ($value)
-msgid "Member %1 deleted"
-msgstr "Malkovich %1 Malkovich"
-
-#: lib/RT/Group_Overlay.pm:974
-msgid "Member added"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:1136
-msgid "Member deleted"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:1140
-msgid "Member not deleted"
-msgstr "Malkovich Malkovich"
-
-#: html/Elements/SelectLinkType:25
-msgid "Member of"
-msgstr "Malkovich of"
-
-#: html/Admin/Elements/GroupTabs:41 html/User/Elements/GroupTabs:41
-msgid "Members"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:631
-#. ($value)
-msgid "Membership in %1 added"
-msgstr "Malkovich in %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:671
-#. ($value)
-msgid "Membership in %1 deleted"
-msgstr "Malkovich in %1 Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2813
-msgid "Merge Successful"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2733
-msgid "Merge failed. Couldn't set EffectiveId"
-msgstr "Malkovich. Couldn't Malkovich"
-
-#: html/Elements/EditLinks:104 html/Ticket/Elements/BulkLinks:26
-msgid "Merge into"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:135 html/Ticket/Update.html:83
-msgid "Message"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Message body not shown because it is too large or is not plain text."
-msgstr "Malkovich Malkovich Malkovich it is Malkovich or is Malkovich."
-
-#: lib/RT/Ticket_Overlay.pm:2514
-msgid "Message could not be recorded"
-msgstr "Malkovich Malkovich be Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Message recipients"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2517
-msgid "Message recorded"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Record.pm:749
-msgid "Missing a primary key?: %1"
-msgstr "Malkovich a Malkovich?: %1"
-
-#: html/Admin/Users/Modify.html:166 html/User/Prefs.html:71
-msgid "Mobile"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "MobilePhone"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:71
-msgid "Modify Access Control List"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Global/CustomFields.html:43 html/Admin/Global/index.html:50
-msgid "Modify Custom Fields which apply to all queues"
-msgstr "Malkovich Malkovich Malkovich to Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:74
-msgid "Modify Scrip templates for this queue"
-msgstr "Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:77
-msgid "Modify Scrips for this queue"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Queues/CustomField.html:44
-#. ($QueueObj->Name())
-msgid "Modify a CustomField for queue %1"
-msgstr "Malkovich a Malkovich Malkovich %1"
-
-#: html/Admin/Global/CustomField.html:52
-msgid "Modify a CustomField which applies to all queues"
-msgstr "Malkovich a Malkovich Malkovich to Malkovich"
-
-#: html/Admin/Queues/Scrip.html:53
-#. ($QueueObj->Name)
-msgid "Modify a scrip for queue %1"
-msgstr "Malkovich a Malkovich %1"
-
-#: html/Admin/Global/Scrip.html:47
-msgid "Modify a scrip which applies to all queues"
-msgstr "Malkovich a Malkovich Malkovich to Malkovich"
-
-#: html/Ticket/ModifyDates.html:24 html/Ticket/ModifyDates.html:28
-#. ($TicketObj->Id)
-msgid "Modify dates for #%1"
-msgstr "Malkovich Malkovich #%1"
-
-#: html/Ticket/ModifyDates.html:34
-#. ($TicketObj->Id)
-msgid "Modify dates for ticket # %1"
-msgstr "Malkovich Malkovich # %1"
-
-#: html/Admin/Global/GroupRights.html:24 html/Admin/Global/GroupRights.html:27 html/Admin/Global/index.html:55
-msgid "Modify global group rights"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Global/GroupRights.html:32
-msgid "Modify global group rights."
-msgstr "Malkovich Malkovich Malkovich."
-
-#: html/Admin/Global/UserRights.html:24 html/Admin/Global/UserRights.html:27 html/Admin/Global/index.html:59
-msgid "Modify global user rights"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Global/UserRights.html:32
-msgid "Modify global user rights."
-msgstr "Malkovich Malkovich."
-
-#: lib/RT/Group_Overlay.pm:146
-msgid "Modify group metadata or delete group"
-msgstr "Malkovich Malkovich or Malkovich"
-
-#: html/Admin/Groups/GroupRights.html:24 html/Admin/Groups/GroupRights.html:28 html/Admin/Groups/GroupRights.html:34
-#. ($GroupObj->Name)
-msgid "Modify group rights for group %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: html/Admin/Queues/GroupRights.html:24 html/Admin/Queues/GroupRights.html:28
-#. ($QueueObj->Name)
-msgid "Modify group rights for queue %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: lib/RT/Group_Overlay.pm:148
-msgid "Modify membership roster for this group"
-msgstr "Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/System.pm:60
-msgid "Modify one's own RT account"
-msgstr "Malkovich's own RT Malkovich"
-
-#: html/Admin/Queues/People.html:24 html/Admin/Queues/People.html:28
-#. ($QueueObj->Name)
-msgid "Modify people related to queue %1"
-msgstr "Malkovich Malkovich to Malkovich %1"
-
-#: html/Ticket/ModifyPeople.html:24 html/Ticket/ModifyPeople.html:28 html/Ticket/ModifyPeople.html:34
-#. ($Ticket->id)
-#. ($Ticket->Id)
-msgid "Modify people related to ticket #%1"
-msgstr "Malkovich Malkovich to Malkovich #%1"
-
-#: html/Admin/Queues/Scrips.html:45
-#. ($QueueObj->Name)
-msgid "Modify scrips for queue %1"
-msgstr "Malkovich Malkovich %1"
-
-#: html/Admin/Global/Scrips.html:43 html/Admin/Global/index.html:41
-msgid "Modify scrips which apply to all queues"
-msgstr "Malkovich Malkovich to Malkovich"
-
-#: html/Admin/Global/Template.html:24 html/Admin/Global/Template.html:29 html/Admin/Global/Template.html:80 html/Admin/Queues/Template.html:77
-#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-msgid "Modify template %1"
-msgstr "Malkovich %1"
-
-#: html/Admin/Global/Templates.html:43
-msgid "Modify templates which apply to all queues"
-msgstr "Malkovich Malkovich Malkovich to Malkovich"
-
-#: html/Admin/Groups/Modify.html:86 html/User/Groups/Modify.html:85
-#. ($Group->Name)
-msgid "Modify the group %1"
-msgstr "Malkovich the Malkovich %1"
-
-#: lib/RT/Queue_Overlay.pm:72
-msgid "Modify the queue watchers"
-msgstr "Malkovich the Malkovich"
-
-#: html/Admin/Users/Modify.html:263
-#. ($UserObj->Name)
-msgid "Modify the user %1"
-msgstr "Malkovich the user %1"
-
-#: html/Ticket/ModifyAll.html:36
-#. ($Ticket->Id)
-msgid "Modify ticket # %1"
-msgstr "Malkovich # %1"
-
-#: html/Ticket/Modify.html:24 html/Ticket/Modify.html:27 html/Ticket/Modify.html:33
-#. ($TicketObj->Id)
-msgid "Modify ticket #%1"
-msgstr "Malkovich #%1"
-
-#: lib/RT/Queue_Overlay.pm:90
-msgid "Modify tickets"
-msgstr "Malkovich"
-
-#: html/Admin/Groups/UserRights.html:24 html/Admin/Groups/UserRights.html:28 html/Admin/Groups/UserRights.html:34
-#. ($GroupObj->Name)
-msgid "Modify user rights for group %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: html/Admin/Queues/UserRights.html:24 html/Admin/Queues/UserRights.html:28
-#. ($QueueObj->Name)
-msgid "Modify user rights for queue %1"
-msgstr "Malkovich Malkovich Malkovich %1"
-
-#: lib/RT/Queue_Overlay.pm:71
-msgid "ModifyACL"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:149
-msgid "ModifyOwnMembership"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:72
-msgid "ModifyQueueWatchers"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:77
-msgid "ModifyScrips"
-msgstr "Malkovich"
-
-#: lib/RT/System.pm:60
-msgid "ModifySelf"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:74
-msgid "ModifyTemplate"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:90
-msgid "ModifyTicket"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:388
-msgid "Mon."
-msgstr "Mon."
-
-#: html/Ticket/Elements/ShowRequestor:40
-#. ($name)
-msgid "More about %1"
-msgstr "Malkovich %1"
-
-#: html/Admin/Elements/EditCustomFields:60
-msgid "Move down"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:26
-msgid "Multiple"
-msgstr "Malkovich"
-
-#: lib/RT/User_Overlay.pm:197
-msgid "Must specify 'Name' attribute"
-msgstr "Malkovich 'Name' Malkovich"
-
-#: html/SelfService/Elements/MyRequests:48
-#. ($friendly_status)
-msgid "My %1 tickets"
-msgstr "My %1 Malkovich"
-
-#: html/Approvals/index.html:24 html/Approvals/index.html:25
-msgid "My approvals"
-msgstr "My Malkovich"
-
-#: html/Admin/Elements/AddCustomFieldValue:31 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/ModifyTemplate:27 html/Admin/Groups/Modify.html:43 html/Elements/SelectGroups:25 html/Elements/SelectUsers:27 html/User/Groups/Modify.html:43
-msgid "Name"
-msgstr "Name"
-
-#: lib/RT/User_Overlay.pm:204
-msgid "Name in use"
-msgstr "Name in use"
-
-#: html/Ticket/Elements/ShowDates:52
-msgid "Never"
-msgstr "Malkovich"
-
-#: html/Elements/Quicksearch:29
-msgid "New"
-msgstr "New"
-
-#: html/Elements/EditLinks:93
-msgid "New Links"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Users/Modify.html:92 html/User/Prefs.html:87
-msgid "New Password"
-msgstr "Malkovich"
-
-#: etc/initialdata:332
-msgid "New Pending Approval"
-msgstr "Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "New Search"
-msgstr "Malkovich"
-
-#: html/Admin/Global/CustomField.html:40 html/Admin/Global/CustomFields.html:38 html/Admin/Queues/CustomField.html:51 html/Admin/Queues/CustomFields.html:40
-msgid "New custom field"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Elements/GroupTabs:53 html/User/Elements/GroupTabs:51
-msgid "New group"
-msgstr "Malkovich"
-
-#: html/SelfService/Prefs.html:31
-msgid "New password"
-msgstr "Malkovich"
-
-#: lib/RT/User_Overlay.pm:773
-msgid "New password notification sent"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Elements/QueueTabs:69
-msgid "New queue"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectRights:41
-msgid "New rights"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Scrip.html:39 html/Admin/Global/Scrips.html:38 html/Admin/Queues/Scrip.html:42 html/Admin/Queues/Scrips.html:54
-msgid "New scrip"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Template.html:59 html/Admin/Global/Templates.html:38 html/Admin/Queues/Template.html:57 html/Admin/Queues/Templates.html:49
-msgid "New template"
-msgstr "Malkovich"
-
-#: html/SelfService/Elements/Tabs:47
-msgid "New ticket"
-msgstr "Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2700
-msgid "New ticket doesn't exist"
-msgstr "Malkovich doesn't Malkovich"
-
-#: html/Admin/Elements/UserTabs:50
-msgid "New user"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/CreateUserCalled:25
-msgid "New user called"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/People.html:54 html/Ticket/Elements/EditPeople:28
-msgid "New watchers"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "Malkovich Malkovich"
-
-#: html/Ticket/Elements/Tabs:70
-msgid "Next"
-msgstr "Next"
-
-#: NOT FOUND IN SOURCE
-msgid "NickName"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:62 html/User/Prefs.html:50
-msgid "Nickname"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomField:89 html/Admin/Elements/EditCustomFields:103
-msgid "No CustomField"
-msgstr "No Malkovich"
-
-#: html/Admin/Groups/GroupRights.html:83 html/Admin/Groups/UserRights.html:70
-msgid "No Group defined"
-msgstr "No Malkovich"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:452
-msgid "No Query"
-msgstr "No Malkovich"
-
-#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:67
-msgid "No Queue defined"
-msgstr "No Malkovich"
-
-#: bin/rt-crontool:52
-msgid "No RT user found. Please consult your RT administrator.\\n"
-msgstr "No RT Malkovich. Malkovich Malkovich RT Malkovich.\\n"
-
-#: html/Admin/Global/Template.html:78 html/Admin/Queues/Template.html:75
-msgid "No Template"
-msgstr "No Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "No Ticket specified. Aborting ticket "
-msgstr "No Malkovich Malkovich. Malkovich "
-
-#: html/Approvals/Elements/Approve:45
-msgid "No action"
-msgstr "No Malkovich"
-
-#: lib/RT/Record.pm:744
-msgid "No column specified"
-msgstr "No Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowRequestor:46
-msgid "No comment entered about this user"
-msgstr "No Malkovich Malkovich Malkovich"
-
-#: lib/RT/Action/Generic.pm:159 lib/RT/Condition/Generic.pm:175 lib/RT/Search/ActiveTicketsInQueue.pm:55 lib/RT/Search/Generic.pm:112
-#. (ref $self)
-msgid "No description for %1"
-msgstr "No Malkovich %1"
-
-#: lib/RT/Users_Overlay.pm:159
-msgid "No group specified"
-msgstr "No Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2475
-msgid "No message attached"
-msgstr "No Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:991
-msgid "No password set"
-msgstr "No Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:296
-msgid "No permission to create queues"
-msgstr "No Malkovich to Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "No permission to create tickets in the queue '%1'"
-msgstr "No Malkovich to Malkovich in the Malkovich '%1'"
-
-#: lib/RT/User_Overlay.pm:157
-msgid "No permission to create users"
-msgstr "No Malkovich to Malkovich"
-
-#: html/SelfService/Display.html:125
-msgid "No permission to display that ticket"
-msgstr "No Malkovich to Malkovich Malkovich"
-
-#: html/SelfService/Update.html:68
-msgid "No permission to view update ticket"
-msgstr "No Malkovich to Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:716 lib/RT/Ticket_Overlay.pm:1581
-msgid "No principal specified"
-msgstr "No Malkovich Malkovich"
-
-#: html/Admin/Queues/People.html:153 html/Admin/Queues/People.html:163
-msgid "No principals selected."
-msgstr "No Malkovich Malkovich."
-
-#: html/Admin/Queues/index.html:34
-msgid "No queues matching search criteria found."
-msgstr "No Malkovich Malkovich Malkovich Malkovich."
-
-#: html/Admin/Elements/SelectRights:81
-msgid "No rights found"
-msgstr "No Malkovich"
-
-#: html/Admin/Elements/SelectRights:32
-msgid "No rights granted."
-msgstr "No Malkovich."
-
-#: html/Search/Bulk.html:162
-msgid "No search to operate on."
-msgstr "No Malkovich to Malkovich on."
-
-#: lib/RT/Transaction_Overlay.pm:455 lib/RT/Transaction_Overlay.pm:493
-msgid "No transaction type specified"
-msgstr "No Malkovich Malkovich Malkovich"
-
-#: html/Admin/Users/index.html:35
-msgid "No users matching search criteria found."
-msgstr "No Malkovich Malkovich Malkovich Malkovich."
-
-#: NOT FOUND IN SOURCE
-msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n"
-msgstr "No Malkovich RT Malkovich. RT Malkovich Malkovich. Malkovich Malkovich RT Malkovich.\\n"
-
-#: lib/RT/Record.pm:741
-msgid "No value sent to _Set!\\n"
-msgstr "No Malkovich to _Set!\\n"
-
-#: lib/RT/Record.pm:746
-msgid "Nonexistant field?"
-msgstr "Malkovich Malkovich?"
-
-#: html/Elements/Header:71
-msgid "Not logged in."
-msgstr "Malkovich in."
-
-#: lib/RT/Date.pm:369
-msgid "Not set"
-msgstr "Malkovich"
-
-#: html/NoAuth/Reminder.html:26
-msgid "Not yet implemented."
-msgstr "Malkovich Malkovich."
-
-#: html/Approvals/Elements/Approve:48
-msgid "Notes"
-msgstr "Malkovich"
-
-#: lib/RT/User_Overlay.pm:776
-msgid "Notification could not be sent"
-msgstr "Malkovich Malkovich be sent"
-
-#: etc/initialdata:101
-msgid "Notify AdminCcs"
-msgstr "Malkovich"
-
-#: etc/initialdata:97
-msgid "Notify AdminCcs as Comment"
-msgstr "Malkovich as Malkovich"
-
-#: etc/initialdata:128
-msgid "Notify Other Recipients"
-msgstr "Malkovich Malkovich"
-
-#: etc/initialdata:124
-msgid "Notify Other Recipients as Comment"
-msgstr "Malkovich Malkovich as Malkovich"
-
-#: etc/initialdata:85
-msgid "Notify Owner"
-msgstr "Malkovich"
-
-#: etc/initialdata:81
-msgid "Notify Owner as Comment"
-msgstr "Malkovich as Malkovich"
-
-#: etc/initialdata:376
-msgid "Notify Owner of their rejected ticket"
-msgstr "Malkovich of Malkovich Malkovich"
-
-#: etc/initialdata:365
-msgid "Notify Owner of their ticket has been approved by all approvers"
-msgstr "Malkovich of Malkovich Malkovich Malkovich by Malkovich"
-
-#: etc/initialdata:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr "Malkovich of Malkovich Malkovich Malkovich by Malkovich"
-
-#: etc/initialdata:334
-msgid "Notify Owners and AdminCcs of new items pending their approval"
-msgstr "Malkovich and Malkovich of Malkovich Malkovich Malkovich"
-
-#: etc/initialdata:77
-msgid "Notify Requestors"
-msgstr "Malkovich Malkovich"
-
-#: etc/initialdata:111
-msgid "Notify Requestors and Ccs"
-msgstr "Malkovich Malkovich and Ccs"
-
-#: etc/initialdata:106
-msgid "Notify Requestors and Ccs as Comment"
-msgstr "Malkovich Malkovich and Ccs as Malkovich"
-
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
-msgstr "Malkovich Malkovich, Ccs and Malkovich"
-
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr "Malkovich Malkovich, Ccs and Malkovich as Malkovich"
-
-#: lib/RT/Date.pm:421
-msgid "Nov."
-msgstr "Nov."
-
-#: lib/RT/Record.pm:200
-msgid "Object could not be created"
-msgstr "Malkovich Malkovich be Malkovich"
-
-#: lib/RT/Record.pm:219
-msgid "Object created"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:420
-msgid "Oct."
-msgstr "Oct."
-
-#: html/Elements/SelectDateRelation:34
-msgid "On"
-msgstr "On"
-
-#: etc/initialdata:163
-msgid "On Comment"
-msgstr "On Malkovich"
-
-#: etc/initialdata:156
-msgid "On Correspond"
-msgstr "On Malkovich"
-
-#: etc/initialdata:145
-msgid "On Create"
-msgstr "On Malkovich"
-
-#: etc/initialdata:184
-msgid "On Owner Change"
-msgstr "On Malkovich"
-
-#: etc/initialdata:192
-msgid "On Queue Change"
-msgstr "On Malkovich"
-
-#: etc/initialdata:198
-msgid "On Resolve"
-msgstr "On Malkovich"
-
-#: etc/initialdata:169
-msgid "On Status Change"
-msgstr "On Malkovich"
-
-#: etc/initialdata:150
-msgid "On Transaction"
-msgstr "On Malkovich"
-
-#: html/Approvals/Elements/PendingMyApproval:49
-#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>")
-msgid "Only show approvals for requests created after %1"
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich %1"
-
-#: html/Approvals/Elements/PendingMyApproval:47
-#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>")
-msgid "Only show approvals for requests created before %1"
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich %1"
-
-#: html/Elements/Quicksearch:30
-msgid "Open"
-msgstr "Open"
-
-#: html/Ticket/Elements/Tabs:137
-msgid "Open it"
-msgstr "Open it"
-
-#: html/SelfService/Elements/Tabs:41
-msgid "Open tickets"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Open tickets (from listing) in a new window"
-msgstr "Malkovich (Malkovich) in a Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Open tickets (from listing) in another window"
-msgstr "Malkovich (Malkovich) in Malkovich"
-
-#: etc/initialdata:140
-msgid "Open tickets on correspondence"
-msgstr "Malkovich on Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "Malkovich and Malkovich"
-
-#: html/Admin/Users/Modify.html:114 html/Elements/SelectUsers:28 html/User/Prefs.html:107
-msgid "Organization"
-msgstr "Malkovich"
-
-#: html/Approvals/Elements/Approve:32
-#. ($approving->Id, $approving->Subject)
-msgid "Originating ticket: #%1"
-msgstr "Malkovich Malkovich: #%1"
-
-#: html/Admin/Queues/Modify.html:68
-msgid "Over time, priority moves toward"
-msgstr "Malkovich, Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:89
-msgid "Own tickets"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:89
-msgid "OwnTicket"
-msgstr "Malkovich"
-
-#: etc/initialdata:38 html/Elements/QuickCreate:13 html/Search/Elements/PickBasics:114 html/SelfService/Elements/MyRequests:29 html/Ticket/Create.html:47 html/Ticket/Elements/EditPeople:42 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/ShowPeople:26 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:85 lib/RT/Tickets_Overlay.pm:1306
-msgid "Owner"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:575
-#. ($Old->Name , $New->Name)
-msgid "Owner forcibly changed from %1 to %2"
-msgstr "Malkovich Malkovich Malkovich %1 to %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner is"
-msgstr "Malkovich is"
-
-#: html/Admin/Users/Modify.html:171 html/User/Prefs.html:75
-msgid "Pager"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "PagerPhone"
-msgstr "Malkovich"
-
-#: html/Elements/EditLinks:117 html/Elements/EditLinks:54 html/Elements/ShowLinks:46 html/Ticket/Create.html:182 html/Ticket/Elements/BulkLinks:38
-msgid "Parents"
-msgstr "Malkovich"
-
-#: html/Elements/Login:52 html/User/Prefs.html:83
-msgid "Password"
-msgstr "Malkovich"
-
-#: html/NoAuth/Reminder.html:24
-msgid "Password Reminder"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:185 lib/RT/User_Overlay.pm:994
-msgid "Password too short"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Users/Modify.html:316 html/User/Prefs.html:209
-#. (loc_fuzzy($msg))
-msgid "Password: %1"
-msgstr "Malkovich: %1"
-
-#: html/Admin/Users/Modify.html:318
-msgid "Passwords do not match."
-msgstr "Malkovich do Malkovich."
-
-#: html/User/Prefs.html:211
-msgid "Passwords do not match. Your password has not been changed"
-msgstr "Malkovich do Malkovich. Malkovich Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowSummary:44 html/Ticket/Elements/Tabs:97 html/Ticket/ModifyAll.html:50
-msgid "People"
-msgstr "Malkovich"
-
-#: etc/initialdata:133
-msgid "Perform a user-defined action"
-msgstr "Malkovich a user-Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:236 lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:572 lib/RT/ACE_Overlay.pm:582 lib/RT/ACE_Overlay.pm:647 lib/RT/Attribute_Overlay.pm:135 lib/RT/Attribute_Overlay.pm:141 lib/RT/Attribute_Overlay.pm:379 lib/RT/Attribute_Overlay.pm:388 lib/RT/Attribute_Overlay.pm:401 lib/RT/CurrentUser.pm:103 lib/RT/CurrentUser.pm:94 lib/RT/CustomField_Overlay.pm:100 lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:239 lib/RT/CustomField_Overlay.pm:517 lib/RT/CustomField_Overlay.pm:90 lib/RT/Group_Overlay.pm:1091 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1104 lib/RT/Group_Overlay.pm:1155 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1165 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:896 lib/RT/Group_Overlay.pm:900 lib/RT/Group_Overlay.pm:913 lib/RT/Queue_Overlay.pm:117 lib/RT/Queue_Overlay.pm:135 lib/RT/Queue_Overlay.pm:578 lib/RT/Queue_Overlay.pm:588 lib/RT/Queue_Overlay.pm:602 lib/RT/Queue_Overlay.pm:740 lib/RT/Queue_Overlay.pm:749 lib/RT/Queue_Overlay.pm:762 lib/RT/Queue_Overlay.pm:975 lib/RT/Scrip_Overlay.pm:125 lib/RT/Scrip_Overlay.pm:136 lib/RT/Scrip_Overlay.pm:201 lib/RT/Scrip_Overlay.pm:473 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:87 lib/RT/Template_Overlay.pm:93 lib/RT/Ticket_Overlay.pm:1453 lib/RT/Ticket_Overlay.pm:1463 lib/RT/Ticket_Overlay.pm:1477 lib/RT/Ticket_Overlay.pm:1614 lib/RT/Ticket_Overlay.pm:1624 lib/RT/Ticket_Overlay.pm:1638 lib/RT/Ticket_Overlay.pm:1755 lib/RT/Ticket_Overlay.pm:2075 lib/RT/Ticket_Overlay.pm:2213 lib/RT/Ticket_Overlay.pm:2381 lib/RT/Ticket_Overlay.pm:2428 lib/RT/Ticket_Overlay.pm:2582 lib/RT/Ticket_Overlay.pm:2640 lib/RT/Ticket_Overlay.pm:2691 lib/RT/Ticket_Overlay.pm:2706 lib/RT/Ticket_Overlay.pm:2905 lib/RT/Ticket_Overlay.pm:2915 lib/RT/Ticket_Overlay.pm:2920 lib/RT/Ticket_Overlay.pm:3143 lib/RT/Ticket_Overlay.pm:3147 lib/RT/Ticket_Overlay.pm:3350 lib/RT/Ticket_Overlay.pm:3512 lib/RT/Ticket_Overlay.pm:3564 lib/RT/Ticket_Overlay.pm:3791 lib/RT/Transaction_Overlay.pm:443 lib/RT/Transaction_Overlay.pm:450 lib/RT/Transaction_Overlay.pm:479 lib/RT/Transaction_Overlay.pm:486 lib/RT/User_Overlay.pm:1088 lib/RT/User_Overlay.pm:1536 lib/RT/User_Overlay.pm:335 lib/RT/User_Overlay.pm:696 lib/RT/User_Overlay.pm:731 lib/RT/User_Overlay.pm:987
-msgid "Permission Denied"
-msgstr "Malkovich Malkovich"
-
-#: html/User/Elements/Tabs:34
-msgid "Personal Groups"
-msgstr "Malkovich"
-
-#: html/User/Groups/index.html:29 html/User/Groups/index.html:39
-msgid "Personal groups"
-msgstr "Malkovich"
-
-#: html/User/Elements/DelegateRights:36
-msgid "Personal groups:"
-msgstr "Malkovich:"
-
-#: html/Admin/Users/Modify.html:153 html/User/Prefs.html:60
-msgid "Phone numbers"
-msgstr "Malkovich"
-
-#: html/Elements/Header:63 html/Elements/Tabs:55 html/SelfService/Elements/Tabs:50 html/SelfService/Prefs.html:24 html/User/Prefs.html:24 html/User/Prefs.html:27
-msgid "Preferences"
-msgstr "Malkovich"
-
-#: lib/RT/Action/Generic.pm:169
-msgid "Prepare Stubbed"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/Tabs:62
-msgid "Prev"
-msgstr "Prev"
-
-#: lib/RT/ACE_Overlay.pm:132 lib/RT/ACE_Overlay.pm:207 lib/RT/ACE_Overlay.pm:551
-#. ($args{'PrincipalId'})
-msgid "Principal %1 not found."
-msgstr "Malkovich %1 Malkovich."
-
-#: html/Search/Elements/PickBasics:58 html/Ticket/Create.html:153 html/Ticket/Elements/EditBasics:52 html/Ticket/Elements/ShowBasics:50 lib/RT/Tickets_Overlay.pm:1104
-msgid "Priority"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/Modify.html:64
-msgid "Priority starts at"
-msgstr "Malkovich at"
-
-#: etc/initialdata:25
-msgid "Privileged"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:296 html/User/Prefs.html:200
-#. (loc_fuzzy($msg))
-msgid "Privileged status: %1"
-msgstr "Malkovich Malkovich: %1"
-
-#: html/Admin/Users/index.html:61
-msgid "Privileged users"
-msgstr "Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Projects"
-msgstr "Malkovich"
-
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
-msgid "Pseudogroup for internal use"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Elements/QuickCreate:10 html/Elements/Quicksearch:28 html/Search/Elements/PickBasics:94 html/SelfService/Create.html:32 html/Ticket/Create.html:37 html/Ticket/Elements/EditBasics:35 html/Ticket/Elements/ShowBasics:54 html/User/Elements/DelegateRights:79 lib/RT/Tickets_Overlay.pm:945
-msgid "Queue"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/CustomField.html:41 html/Admin/Queues/Scrip.html:49 html/Admin/Queues/Scrips.html:47 html/Admin/Queues/Templates.html:43
-#. ($Queue)
-#. ($id)
-msgid "Queue %1 not found"
-msgstr "Malkovich %1 Malkovich"
-
-#: html/Admin/Queues/Modify.html:42
-msgid "Queue Name"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:300
-msgid "Queue already exists"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:309 lib/RT/Queue_Overlay.pm:315
-msgid "Queue could not be created"
-msgstr "Malkovich not be Malkovich"
-
-#: html/Ticket/Create.html:208
-msgid "Queue could not be loaded."
-msgstr "Malkovich be Malkovich."
-
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:319 lib/RT/StyleGuide.pod:789
-msgid "Queue created"
-msgstr "Malkovich"
-
-#: html/SelfService/Display.html:72 lib/RT/CustomField_Overlay.pm:97
-msgid "Queue not found"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/Tabs:37 html/Admin/index.html:34
-msgid "Queues"
-msgstr "Malkovich"
-
-#: html/Elements/Quicksearch:24
-msgid "Quick search"
-msgstr "Malkovich"
-
-#: html/Elements/Login:44
-#. ($RT::VERSION)
-msgid "RT %1"
-msgstr "RT %1"
-
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:776
-#. ($RT::VERSION, $RT::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 from <a href=\"http://Malkovich.com\">Malkovich Malkovich, LLC</a>."
-
-#: html/Admin/index.html:24 html/Admin/index.html:25
-msgid "RT Administration"
-msgstr "RT Malkovich"
-
-#: html/Elements/Error:41 html/SelfService/Error.html:40
-msgid "RT Error"
-msgstr "RT Malkovich"
-
-#: html/index.html:50 html/index.html:53
-msgid "RT at a glance"
-msgstr "RT at a Malkovich"
-
-#: html/Elements/PageLayout:85
-#. ($RT::rtname)
-msgid "RT for %1"
-msgstr "RT for %1"
-
-#: 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 is &copy; Malkovich 1996-%1 Malkovich <Malkovich@Malkovich.com>. It is Malkovich Malkovich <a href=\"http://www.gnu.org/copyleft/gpl.html\">Malkovich 2 of the Malkovich Malkovich Malkovich.</a>"
-
-#: html/Admin/Users/Modify.html:57 html/User/Prefs.html:47
-msgid "Real Name"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "RealName"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:628
-#. ($value)
-msgid "Reference by %1 added"
-msgstr "Malkovich by %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:668
-#. ($value)
-msgid "Reference by %1 deleted"
-msgstr "Malkovich by %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:625
-#. ($value)
-msgid "Reference to %1 added"
-msgstr "Malkovich to %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:665
-#. ($value)
-msgid "Reference to %1 deleted"
-msgstr "Malkovich to %1 Malkovich"
-
-#: html/Elements/EditLinks:129 html/Elements/EditLinks:81 html/Elements/ShowLinks:70 html/Ticket/Create.html:185 html/Ticket/Elements/BulkLinks:50
-msgid "Referred to by"
-msgstr "Malkovich to by"
-
-#: html/Elements/EditLinks:125 html/Elements/EditLinks:72 html/Elements/SelectLinkType:27 html/Elements/ShowLinks:60 html/Ticket/Create.html:184 html/Ticket/Elements/BulkLinks:46
-msgid "Refers to"
-msgstr "Malkovich to"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "Malkovich"
-
-#: html/Elements/Refresh:35
-#. ($value/60)
-msgid "Refresh this page every %1 minutes."
-msgstr "Malkovich Malkovich %1 Malkovich."
-
-#: html/Search/Bulk.html:95
-msgid "Remove AdminCc"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:91
-msgid "Remove Cc"
-msgstr "Malkovich Cc"
-
-#: html/Search/Bulk.html:87
-msgid "Remove Requestor"
-msgstr "Malkovich Malkovich"
-
-#: html/Ticket/Elements/ShowTransaction:142 html/Ticket/Elements/Tabs:123
-msgid "Reply"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:87
-msgid "Reply to tickets"
-msgstr "Malkovich to Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:87
-msgid "ReplyToTicket"
-msgstr "Malkovich"
-
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:86
-msgid "Requestor"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Requestor email address"
-msgstr "Malkovich Malkovich"
-
-#: html/SelfService/Create.html:40 html/Ticket/Create.html:55 html/Ticket/Elements/EditPeople:47 html/Ticket/Elements/ShowPeople:30
-msgid "Requestors"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/Modify.html:74
-msgid "Requests should be due in"
-msgstr "Malkovich be due in"
-
-#: html/Elements/Submit:61
-msgid "Reset"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:63
-msgid "Residence"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/Tabs:133
-msgid "Resolve"
-msgstr "Malkovich"
-
-#: html/Ticket/Update.html:119
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Resolve ticket #%1 (%2)"
-msgstr "Malkovich #%1 (%2)"
-
-#: etc/initialdata:323 html/Elements/SelectDateType:27 lib/RT/Ticket_Overlay.pm:1282
-msgid "Resolved"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "Malkovich to Malkovich"
-
-#: html/Elements/ListActions:25 html/Search/Elements/NewListActions:25
-msgid "Results"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Users/Modify.html:99 html/User/Prefs.html:94
-msgid "Retype Password"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:612
-msgid "Right Delegated"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:302
-msgid "Right Granted"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:160
-msgid "Right Loaded"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:677 lib/RT/ACE_Overlay.pm:692
-msgid "Right could not be revoked"
-msgstr "Malkovich be Malkovich"
-
-#: html/User/Delegation.html:63
-msgid "Right not found"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:542 lib/RT/ACE_Overlay.pm:637
-msgid "Right not loaded."
-msgstr "Malkovich Malkovich."
-
-#: lib/RT/ACE_Overlay.pm:688
-msgid "Right revoked"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Rights"
-msgstr "Malkovich"
-
-#: lib/RT/Interface/Web.pm:869
-#. ($object_type)
-msgid "Rights could not be granted for %1"
-msgstr "Malkovich Malkovich be Malkovich %1"
-
-#: lib/RT/Interface/Web.pm:899
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr "Malkovich Malkovich be Malkovich %1"
-
-#: html/Admin/Global/GroupRights.html:50 html/Admin/Queues/GroupRights.html:52
-msgid "Roles"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:393
-msgid "Sat."
-msgstr "Sat."
-
-#: html/Admin/Global/Template.html:45 html/Admin/Queues/Modify.html:89 html/Admin/Queues/People.html:104 html/Admin/Users/Modify.html:198 html/SelfService/Prefs.html:36 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyDates.html:38 html/Ticket/ModifyLinks.html:38 html/Ticket/ModifyPeople.html:37
-msgid "Save Changes"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/PreviewScrips:79
-msgid "Save changes"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Scrip.html:48 html/Admin/Queues/Scrip.html:54
-#. ($id)
-#. ($ARGS{'id'})
-msgid "Scrip #%1"
-msgstr "Malkovich #%1"
-
-#: lib/RT/Scrip_Overlay.pm:180
-msgid "Scrip Created"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrips:85
-msgid "Scrip deleted"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/QueueTabs:45 html/Admin/Elements/SystemTabs:32 html/Admin/Global/index.html:40
-msgid "Scrips"
-msgstr "Malkovich"
-
-#: html/Admin/Queues/Scrips.html:33
-msgid "Scrips which apply to all queues"
-msgstr "Malkovich Malkovich to Malkovich"
-
-#: html/Elements/SimpleSearch:26 html/Search/Elements/DisplayOptions:73
-msgid "Search"
-msgstr "Malkovich"
-
-#: html/Approvals/Elements/PendingMyApproval:38
-msgid "Search for approvals"
-msgstr "Malkovich Malkovich"
-
-#: bin/rt-crontool:184
-msgid "Security:"
-msgstr "Malkovich:"
-
-#: lib/RT/Queue_Overlay.pm:68
-msgid "SeeQueue"
-msgstr "Malkovich"
-
-#: html/Admin/Groups/index.html:50
-msgid "Select a group"
-msgstr "Malkovich a Malkovich"
-
-#: html/Admin/Users/index.html:24 html/Admin/Users/index.html:27
-msgid "Select a user"
-msgstr "Malkovich a user"
-
-#: html/Admin/Global/CustomField.html:37 html/Admin/Global/CustomFields.html:35
-msgid "Select custom field"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Elements/GroupTabs:51 html/User/Elements/GroupTabs:49
-msgid "Select group"
-msgstr "Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:427
-msgid "Select multiple values"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:424
-msgid "Select one value"
-msgstr "Malkovich Malkovich"
-
-#: html/Admin/Elements/QueueTabs:66
-msgid "Select queue"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Scrip.html:36 html/Admin/Global/Scrips.html:35 html/Admin/Queues/Scrip.html:39 html/Admin/Queues/Scrips.html:51
-msgid "Select scrip"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Template.html:56 html/Admin/Global/Templates.html:35 html/Admin/Queues/Template.html:54 html/Admin/Queues/Templates.html:46
-msgid "Select template"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/UserTabs:46
-msgid "Select user"
-msgstr "Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:35
-msgid "SelectMultiple"
-msgstr "Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:34
-msgid "SelectSingle"
-msgstr "Malkovich"
-
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
-msgstr "Malkovich to Malkovich"
-
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
-msgstr "Malkovich to Malkovich as a \"Malkovich\""
-
-#: etc/initialdata:112
-msgid "Send mail to requestors and Ccs"
-msgstr "Malkovich to Malkovich and Ccs"
-
-#: etc/initialdata:107
-msgid "Send mail to requestors and Ccs as a comment"
-msgstr "Malkovich to Malkovich and Ccs as a Malkovich"
-
-#: etc/initialdata:78
-msgid "Sends a message to the requestors"
-msgstr "Malkovich a Malkovich to the Malkovich"
-
-#: etc/initialdata:125 etc/initialdata:129
-msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr "Malkovich to Malkovich Malkovich and Bccs"
-
-#: etc/initialdata:102
-msgid "Sends mail to the administrative Ccs"
-msgstr "Malkovich to the Malkovich Malkovich"
-
-#: etc/initialdata:98
-msgid "Sends mail to the administrative Ccs as a comment"
-msgstr "Malkovich to the Malkovich Malkovich as a Malkovich"
-
-#: etc/initialdata:82 etc/initialdata:86
-msgid "Sends mail to the owner"
-msgstr "Malkovich to the Malkovich"
-
-#: lib/RT/Date.pm:419
-msgid "Sep."
-msgstr "Sep."
-
-#: html/Approvals/Elements/PendingMyApproval:43
-msgid "Show approved requests"
-msgstr "Malkovich Malkovich"
-
-#: html/Ticket/Create.html:143 html/Ticket/Create.html:33
-msgid "Show basics"
-msgstr "Malkovich"
-
-#: html/Approvals/Elements/PendingMyApproval:44
-msgid "Show denied requests"
-msgstr "Malkovich Malkovich"
-
-#: html/Ticket/Create.html:143 html/Ticket/Create.html:33
-msgid "Show details"
-msgstr "Malkovich"
-
-#: html/Approvals/Elements/PendingMyApproval:42
-msgid "Show pending requests"
-msgstr "Malkovich Malkovich"
-
-#: html/Approvals/Elements/PendingMyApproval:45
-msgid "Show requests awaiting other approvals"
-msgstr "Malkovich Malkovich Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Show ticket private commentary"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Show ticket summaries"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:70
-msgid "ShowACL"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:79
-msgid "ShowScrips"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:76
-msgid "ShowTemplate"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:80
-msgid "ShowTicket"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:81
-msgid "ShowTicketComments"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:84
-msgid "Sign up as a ticket Requestor or ticket or queue Cc"
-msgstr "Sign up as a Malkovich Malkovich or Malkovich or Malkovich Cc"
-
-#: lib/RT/Queue_Overlay.pm:85
-msgid "Sign up as a ticket or queue AdminCc"
-msgstr "Sign up as a Malkovich or Malkovich"
-
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:145
-msgid "Signature"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:25
-msgid "Single"
-msgstr "Malkovich"
-
-#: html/Elements/Header:62
-msgid "Skip Menu"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/AddCustomFieldValue:27
-msgid "Sort"
-msgstr "Sort"
-
-#: NOT FOUND IN SOURCE
-msgid "Sort results by"
-msgstr "Malkovich by"
-
-#: NOT FOUND IN SOURCE
-msgid "Squelched message recipients"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/Admin/Elements/EditScrip:65
-msgid "Stage"
-msgstr "Malkovich"
-
-#: html/Elements/SelectDateType:26 html/Ticket/Elements/EditDates:31 html/Ticket/Elements/ShowDates:35
-msgid "Started"
-msgstr "Malkovich"
-
-#: html/Elements/SelectDateType:30 html/Ticket/Create.html:165 html/Ticket/Elements/EditDates:26 html/Ticket/Elements/ShowDates:31
-msgid "Starts"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:135 html/User/Prefs.html:123
-msgid "State"
-msgstr "Malkovich"
-
-#: html/Search/Elements/PickBasics:77 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:30 html/Ticket/Create.html:41 html/Ticket/Elements/EditBasics:31 html/Ticket/Elements/ShowBasics:30 html/Ticket/Update.html:37 lib/RT/Ticket_Overlay.pm:1276 lib/RT/Tickets_Overlay.pm:970
-msgid "Status"
-msgstr "Malkovich"
-
-#: etc/initialdata:309
-msgid "Status Change"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:505
-#. ($self->loc($self->OldValue), $self->loc($self->NewValue))
-msgid "Status changed from %1 to %2"
-msgstr "Malkovich Malkovich %1 to %2"
-
-#: html/Ticket/Elements/Tabs:148
-msgid "Steal"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "Steal tickets"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "StealTicket"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:581
-#. ($Old->Name)
-msgid "Stolen from %1 "
-msgstr "Malkovich %1 "
-
-#: html/Elements/QuickCreate:7 html/Elements/SelectAttachmentField:25 html/Search/Bulk.html:133 html/SelfService/Create.html:56 html/SelfService/Elements/MyRequests:27 html/SelfService/Update.html:31 html/Ticket/Create.html:83 html/Ticket/Elements/EditBasics:26 html/Ticket/ModifyAll.html:78 html/Ticket/Update.html:58 lib/RT/Ticket_Overlay.pm:1272 lib/RT/Tickets_Overlay.pm:1049
-msgid "Subject"
-msgstr "Malkovich"
-
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:795 lib/RT/Transaction_Overlay.pm:603
-#. ($self->Data)
-msgid "Subject changed to %1"
-msgstr "Malkovich to %1"
-
-#: html/Elements/Submit:58
-msgid "Submit"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:749
-msgid "Succeeded"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:394
-msgid "Sun."
-msgstr "Sun."
-
-#: lib/RT/System.pm:53
-msgid "SuperUser"
-msgstr "Malkovich"
-
-#: html/User/Elements/DelegateRights:76
-msgid "System"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:566 lib/RT/Interface/Web.pm:868 lib/RT/Interface/Web.pm:898
-msgid "System Error"
-msgstr "Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:615
-msgid "System error. Right not delegated."
-msgstr "Malkovich. Malkovich Malkovich."
-
-#: lib/RT/ACE_Overlay.pm:145 lib/RT/ACE_Overlay.pm:222 lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:897
-msgid "System error. Right not granted."
-msgstr "Malkovich. Malkovich Malkovich."
-
-#: html/Admin/Global/GroupRights.html:34 html/Admin/Groups/GroupRights.html:36 html/Admin/Queues/GroupRights.html:35
-msgid "System groups"
-msgstr "Malkovich"
-
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/CurrentUser.pm:334
-msgid "TEST_STRING"
-msgstr "TEST_MALKOVICH"
-
-#: html/Elements/MyRequests:27 html/Ticket/Elements/Tabs:144
-msgid "Take"
-msgstr "Take"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "Take tickets"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "TakeTicket"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:566
-msgid "Taken"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditScrip:57 html/Tools/Offline.html:56
-msgid "Template"
-msgstr "Malkovich"
-
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:89
-#. ($TemplateObj->Id())
-msgid "Template #%1"
-msgstr "Malkovich #%1"
-
-#: html/Admin/Elements/EditTemplates:88
-msgid "Template deleted"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Scrip_Overlay.pm:156
-msgid "Template not found"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Template_Overlay.pm:348
-msgid "Template parsed"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/QueueTabs:48 html/Admin/Elements/SystemTabs:35 html/Admin/Global/index.html:44
-msgid "Templates"
-msgstr "Malkovich"
-
-#: lib/RT/Record.pm:740
-msgid "That is already the current value"
-msgstr "That is Malkovich the Malkovich"
-
-#: lib/RT/CustomField_Overlay.pm:248
-msgid "That is not a value for this custom field"
-msgstr "That is not a Malkovich Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2086
-msgid "That is the same value"
-msgstr "That is the Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:287 lib/RT/ACE_Overlay.pm:596
-msgid "That principal already has that right"
-msgstr "Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:674
-#. ($args{'Type'})
-msgid "That principal is already a %1 for this queue"
-msgstr "Malkovich is Malkovich a %1 Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1527
-#. ($self->loc($args{'Type'}))
-msgid "That principal is already a %1 for this ticket"
-msgstr "Malkovich is Malkovich a %1 Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:773
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this queue"
-msgstr "That Malkovich is not a %1 Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2082
-msgid "That queue does not exist"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3152
-msgid "That ticket has unresolved dependencies"
-msgstr "Malkovich Malkovich Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2956
-msgid "That user already owns that ticket"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2928
-msgid "That user does not exist"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:355
-msgid "That user is already privileged"
-msgstr "Malkovich is Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:376
-msgid "That user is already unprivileged"
-msgstr "Malkovich is Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:368
-msgid "That user is now privileged"
-msgstr "Malkovich is Malkovich"
-
-#: lib/RT/User_Overlay.pm:389
-msgid "That user is now unprivileged"
-msgstr "Malkovich is Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:2949
-msgid "That user may not own tickets in that queue"
-msgstr "Malkovich Malkovich Malkovich in Malkovich"
-
-#: lib/RT/Link_Overlay.pm:200
-msgid "That's not a numerical id"
-msgstr "That's not a Malkovich id"
-
-#: html/SelfService/Display.html:31 html/Ticket/Create.html:149 html/Ticket/Elements/ShowSummary:27
-msgid "The Basics"
-msgstr "The Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:87
-msgid "The CC of a ticket"
-msgstr "The CC of a Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:88
-msgid "The administrative CC of a ticket"
-msgstr "The Malkovich CC of a Malkovich"
-
-#: bin/rt-crontool:194
-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 "The Malkovich Malkovich Malkovich Malkovich Malkovich in the Malkovich 'Malkovich' and Malkovich Malkovich to 99 if they haven't Malkovich in 4 Malkovich:"
-
-#: NOT FOUND IN SOURCE
-msgid "The following commands were not proccessed:\\n\\n"
-msgstr "The Malkovich Malkovich Malkovich Malkovich:\\n\\n"
-
-#: lib/RT/Record.pm:743
-msgid "The new value has been set."
-msgstr "The Malkovich Malkovich."
-
-#: lib/RT/ACE_Overlay.pm:85
-msgid "The owner of a ticket"
-msgstr "The Malkovich of a Malkovich"
-
-#: lib/RT/ACE_Overlay.pm:86
-msgid "The requestor of a ticket"
-msgstr "The Malkovich of a Malkovich"
-
-#: html/Admin/Elements/EditUserComments:25
-msgid "These comments aren't generally visible to the user"
-msgstr "Malkovich aren't Malkovich Malkovich to the user"
-
-#: bin/rt-crontool:185
-msgid "This tool allows the user to run arbitrary perl modules from within RT."
-msgstr "Malkovich Malkovich the user to Malkovich Malkovich Malkovich Malkovich RT."
-
-#: lib/RT/Transaction_Overlay.pm:226
-msgid "This transaction appears to have no content"
-msgstr "Malkovich Malkovich to have no Malkovich"
-
-#: html/Ticket/Elements/ShowRequestor:48
-#. ($rows)
-msgid "This user's %1 highest priority tickets"
-msgstr "Malkovich's %1 Malkovich Malkovich"
-
-#: lib/RT/Date.pm:391
-msgid "Thu."
-msgstr "Thu."
-
-#: html/Ticket/ModifyAll.html:24 html/Ticket/ModifyAll.html:28
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket #%1 Jumbo update: %2"
-msgstr "Malkovich #%1 Malkovich: %2"
-
-#: html/Approvals/Elements/ShowDependency:45
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "Ticket #%1: %2"
-msgstr "Malkovich #%1: %2"
-
-#: lib/RT/Ticket_Overlay.pm:696 lib/RT/Ticket_Overlay.pm:720
-#. ($self->Id, $QueueObj->Name)
-msgid "Ticket %1 created in queue '%2'"
-msgstr "Malkovich %1 Malkovich in Malkovich '%2'"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket %1 loaded\\n"
-msgstr "Malkovich %1 Malkovich\\n"
-
-#: html/Search/Bulk.html:216
-#. ($Ticket->Id,$_)
-msgid "Ticket %1: %2"
-msgstr "Malkovich %1: %2"
-
-#: html/Ticket/History.html:24 html/Ticket/History.html:27
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket History # %1 %2"
-msgstr "Malkovich # %1 %2"
-
-#: etc/initialdata:324
-msgid "Ticket Resolved"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket attachment"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1228
-msgid "Ticket content"
-msgstr "Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1274
-msgid "Ticket content type"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:565 lib/RT/Ticket_Overlay.pm:579 lib/RT/Ticket_Overlay.pm:590 lib/RT/Ticket_Overlay.pm:707
-msgid "Ticket could not be created due to an internal error"
-msgstr "Malkovich Malkovich be Malkovich to a Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:497
-msgid "Ticket created"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:502
-msgid "Ticket deleted"
-msgstr "Malkovich"
-
-#: etc/initialdata:310
-msgid "Ticket status changed"
-msgstr "Malkovich Malkovich"
-
-#: html/Elements/Tabs:46
-msgid "Tickets"
-msgstr "Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1452
-#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'}))
-msgid "Tickets %1 %2"
-msgstr "Malkovich %1 %2"
-
-#: lib/RT/Tickets_Overlay.pm:1410
-#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'}))
-msgid "Tickets %1 by %2"
-msgstr "Malkovich %1 by %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets from %1"
-msgstr "Malkovich %1"
-
-#: html/Approvals/Elements/ShowDependency:26
-msgid "Tickets which depend on this approval:"
-msgstr "Malkovich Malkovich on Malkovich:"
-
-#: html/Search/Elements/PickBasics:70 html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:47
-msgid "Time Left"
-msgstr "Malkovich"
-
-#: html/Search/Elements/PickBasics:68 html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:43
-msgid "Time Worked"
-msgstr "Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1201
-msgid "Time left"
-msgstr "Malkovich"
-
-#: html/Elements/Footer:44
-msgid "Time to display"
-msgstr "Time to Malkovich"
-
-#: lib/RT/Tickets_Overlay.pm:1177
-msgid "Time worked"
-msgstr "Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:1277
-msgid "TimeWorked"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "To generate a diff of this commit:"
-msgstr "To Malkovich a diff of Malkovich:"
-
-#: NOT FOUND IN SOURCE
-msgid "To generate a diff of this commit:\\n"
-msgstr "To Malkovich a diff of Malkovich:\\n"
-
-#: lib/RT/Ticket_Overlay.pm:1280
-msgid "Told"
-msgstr "Told"
-
-#: etc/initialdata:252
-msgid "Transaction"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:705
-#. ($self->Data)
-msgid "Transaction %1 purged"
-msgstr "Malkovich %1 Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:136
-msgid "Transaction Created"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:92
-msgid "Transaction->Create couldn't, as you didn't specify a ticket id"
-msgstr "Malkovich->Malkovich couldn't, as you didn't Malkovich a Malkovich id"
-
-#: lib/RT/Transaction_Overlay.pm:760
-msgid "Transactions are immutable"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Date.pm:389
-msgid "Tue."
-msgstr "Tue."
-
-#: html/Admin/Elements/EditCustomField:43 html/Ticket/Elements/AddWatchers:32 html/Ticket/Elements/AddWatchers:43 html/Ticket/Elements/AddWatchers:53 lib/RT/Ticket_Overlay.pm:1278 lib/RT/Tickets_Overlay.pm:1021
-msgid "Type"
-msgstr "Type"
-
-#: lib/RT/ScripCondition_Overlay.pm:103
-msgid "Unimplemented"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:67
-msgid "Unix login"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "Malkovich"
-
-#: lib/RT/Attachment_Overlay.pm:233 lib/RT/Attachment_Overlay.pm:265
-#. ($self->ContentEncoding)
-msgid "Unknown ContentEncoding %1"
-msgstr "Malkovich Malkovich %1"
-
-#: html/Elements/SelectResultsPerPage:36
-msgid "Unlimited"
-msgstr "Malkovich"
-
-#: etc/initialdata:32
-msgid "Unprivileged"
-msgstr "Malkovich"
-
-#: lib/RT/Transaction_Overlay.pm:562
-msgid "Untaken"
-msgstr "Malkovich"
-
-#: html/Search/Bulk.html:32
-msgid "Update"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "Malkovich ID"
-
-#: html/Search/Bulk.html:127 html/Ticket/ModifyAll.html:65 html/Ticket/Update.html:48
-msgid "Update Type"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Update all these tickets at once"
-msgstr "Malkovich Malkovich at once"
-
-#: NOT FOUND IN SOURCE
-msgid "Update email"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Update name"
-msgstr "Malkovich"
-
-#: lib/RT/Action/CreateTickets.pm:655 lib/RT/Interface/Web.pm:479
-msgid "Update not recorded."
-msgstr "Malkovich Malkovich."
-
-#: html/Search/Bulk.html:78
-msgid "Update selected tickets"
-msgstr "Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "Update signature"
-msgstr "Malkovich Malkovich"
-
-#: html/Ticket/ModifyAll.html:62
-msgid "Update ticket"
-msgstr "Malkovich"
-
-#: html/SelfService/Update.html:24 html/SelfService/Update.html:63
-#. ($Ticket->id)
-msgid "Update ticket #%1"
-msgstr "Malkovich #%1"
-
-#: html/Ticket/Update.html:121
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Update ticket #%1 (%2)"
-msgstr "Malkovich #%1 (%2)"
-
-#: lib/RT/Action/CreateTickets.pm:653 lib/RT/Interface/Web.pm:477
-msgid "Update type was neither correspondence nor comment."
-msgstr "Malkovich Malkovich Malkovich Malkovich Malkovich."
-
-#: html/Elements/SelectDateType:32 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1281
-msgid "Updated"
-msgstr "Malkovich"
-
-#: etc/initialdata:132 etc/initialdata:206
-msgid "User Defined"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "User ID"
-msgstr "User ID"
-
-#: html/Elements/SelectUsers:25
-msgid "User Id"
-msgstr "User Id"
-
-#: html/Admin/Elements/GroupTabs:46 html/Admin/Elements/QueueTabs:59 html/Admin/Elements/SystemTabs:46 html/Admin/Global/index.html:58
-msgid "User Rights"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:252
-#. ($msg)
-msgid "User could not be created: %1"
-msgstr "Malkovich be Malkovich: %1"
-
-#: lib/RT/User_Overlay.pm:296
-msgid "User created"
-msgstr "Malkovich"
-
-#: html/Admin/Global/GroupRights.html:66 html/Admin/Groups/GroupRights.html:53 html/Admin/Queues/GroupRights.html:68
-msgid "User defined groups"
-msgstr "Malkovich Malkovich"
-
-#: lib/RT/User_Overlay.pm:558 lib/RT/User_Overlay.pm:575
-msgid "User loaded"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "User view"
-msgstr "Malkovich"
-
-#: html/Admin/Users/Modify.html:47 html/Elements/Login:51 html/Ticket/Elements/AddWatchers:34
-msgid "Username"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/SelectNewGroupMembers:25 html/Admin/Elements/Tabs:31 html/Admin/Groups/Members.html:54 html/Admin/Queues/People.html:67 html/Admin/index.html:28 html/User/Groups/Members.html:57
-msgid "Users"
-msgstr "Malkovich"
-
-#: html/Admin/Users/index.html:64
-msgid "Users matching search criteria"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:494
-msgid "Valid Query"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/EditCustomField:56
-msgid "Values"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:84
-msgid "Watch"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:85
-msgid "WatchAsAdminCc"
-msgstr "Malkovich"
-
-#: html/Admin/Elements/QueueTabs:41
-msgid "Watchers"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:390
-msgid "Wed."
-msgstr "Wed."
-
-#: etc/initialdata:521
-msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
-msgstr "When a Malkovich Malkovich by Malkovich, Malkovich Malkovich to the Malkovich"
-
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "When a Malkovich Malkovich by Malkovich, Malkovich Malkovich to the Malkovich"
-
-#: etc/initialdata:146
-msgid "When a ticket is created"
-msgstr "When a Malkovich is Malkovich"
-
-#: etc/initialdata:418
-msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
-msgstr "When a Malkovich is Malkovich, Malkovich the Malkovich and Malkovich of the Malkovich Malkovich Malkovich"
-
-#: etc/initialdata:151
-msgid "When anything happens"
-msgstr "Malkovich Malkovich"
-
-#: etc/initialdata:199
-msgid "Whenever a ticket is resolved"
-msgstr "Malkovich a Malkovich is Malkovich"
-
-#: etc/initialdata:185
-msgid "Whenever a ticket's owner changes"
-msgstr "Malkovich a Malkovich's Malkovich"
-
-#: etc/initialdata:193
-msgid "Whenever a ticket's queue changes"
-msgstr "Malkovich a Malkovich's Malkovich"
-
-#: etc/initialdata:170
-msgid "Whenever a ticket's status changes"
-msgstr "Malkovich a Malkovich's Malkovich"
-
-#: etc/initialdata:207
-msgid "Whenever a user-defined condition occurs"
-msgstr "Malkovich a user-Malkovich Malkovich"
-
-#: etc/initialdata:164
-msgid "Whenever comments come in"
-msgstr "Malkovich Malkovich in"
-
-#: etc/initialdata:157
-msgid "Whenever correspondence comes in"
-msgstr "Malkovich Malkovich Malkovich in"
-
-#: html/Admin/Users/Modify.html:161 html/User/Prefs.html:67
-msgid "Work"
-msgstr "Work"
-
-#: NOT FOUND IN SOURCE
-msgid "WorkPhone"
-msgstr "Malkovich"
-
-#: html/Ticket/Elements/ShowBasics:41 html/Ticket/Update.html:42
-msgid "Worked"
-msgstr "Malkovich"
-
-#: html/autohandler:150
-msgid "XXX CHANGEME You are not an authorized user"
-msgstr "MALKOVICH Malkovich a Malkovich"
-
-#: lib/RT/Ticket_Overlay.pm:3059
-msgid "You already own this ticket"
-msgstr "Malkovich Malkovich Malkovich"
-
-#: html/autohandler:142
-msgid "You are not an authorized user"
-msgstr "Malkovich a Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "You can access it with the Download button on the right."
-msgstr "Malkovich it with the Malkovich on the Malkovich."
-
-#: lib/RT/Ticket_Overlay.pm:2941
-msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "Malkovich Malkovich Malkovich Malkovich or Malkovich Malkovich"
-
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:760
-#. ($num, $queue)
-msgid "You found %1 tickets in queue %2"
-msgstr "Malkovich %1 Malkovich in Malkovich %2"
-
-#: html/NoAuth/Logout.html:30
-msgid "You have been logged out of RT."
-msgstr "Malkovich Malkovich of RT."
-
-#: html/SelfService/Display.html:79
-msgid "You have no permission to create tickets in that queue."
-msgstr "Malkovich no Malkovich to Malkovich in that Malkovich."
-
-#: lib/RT/Ticket_Overlay.pm:2095
-msgid "You may not create requests in that queue."
-msgstr "Malkovich Malkovich Malkovich in Malkovich."
-
-#: html/NoAuth/Logout.html:34
-msgid "You're welcome to login again"
-msgstr "You're Malkovich to Malkovich"
-
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr "Malkovich Malkovich Malkovich by %1. Malkovich Malkovich be Malkovich."
-
-#: etc/initialdata:540
-msgid "Your request has been approved."
-msgstr "Malkovich Malkovich Malkovich."
-
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "Malkovich Malkovich."
-
-#: html/autohandler:177
-msgid "Your username or password is incorrect"
-msgstr "Malkovich or Malkovich is Malkovich"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:127
-msgid "Zip"
-msgstr "Zip"
-
-#: html/User/Elements/DelegateRights:58
-#. ($right->PrincipalObj->Object->SelfDescription)
-msgid "as granted to %1"
-msgstr "as Malkovich to %1"
-
-#: html/SelfService/Closed.html:27
-msgid "closed"
-msgstr "Malkovich"
-
-#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:33
-msgid "contains"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "content"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "content-type"
-msgstr "Malkovich-type"
-
-#: html/Admin/Queues/Modify.html:76 lib/RT/Date.pm:319
-msgid "days"
-msgstr "days"
-
-#: lib/RT/Queue_Overlay.pm:64
-msgid "deleted"
-msgstr "Malkovich"
-
-#: html/Search/Elements/PickBasics:33
-msgid "does not match"
-msgstr "Malkovich"
-
-#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:34
-msgid "doesn't contain"
-msgstr "doesn't Malkovich"
-
-#: html/Elements/SelectEqualityOperator:37
-msgid "equal to"
-msgstr "Malkovich to"
-
-#: NOT FOUND IN SOURCE
-msgid "filename"
-msgstr "Malkovich"
-
-#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37
-msgid "greater than"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:196
-#. ($self->Name)
-msgid "group '%1'"
-msgstr "Malkovich '%1'"
-
-#: lib/RT/Date.pm:315
-msgid "hours"
-msgstr "Malkovich"
-
-#: html/Elements/SelectBoolean:31 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:35 html/Search/Elements/PickBasics:49 html/Search/Elements/PickBasics:80 html/Search/Elements/PickBasics:97 html/Search/Elements/PickCFs:37
-msgid "is"
-msgstr "is"
-
-#: html/Elements/SelectBoolean:35 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:36 html/Search/Elements/PickBasics:50 html/Search/Elements/PickBasics:81 html/Search/Elements/PickBasics:98 html/Search/Elements/PickCFs:38
-msgid "isn't"
-msgstr "isn't"
-
-#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37
-msgid "less than"
-msgstr "Malkovich"
-
-#: html/Search/Elements/PickBasics:32
-msgid "matches"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:311
-msgid "min"
-msgstr "min"
-
-#: html/Ticket/Update.html:42
-msgid "minutes"
-msgstr "Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "modifications\\n\\n"
-msgstr "Malkovich\\n\\n"
-
-#: lib/RT/Date.pm:327
-msgid "months"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:59
-msgid "new"
-msgstr "new"
-
-#: html/Admin/Elements/EditCustomFields:42
-msgid "no name"
-msgstr "no name"
-
-#: html/Admin/Elements/EditScrips:42
-msgid "no value"
-msgstr "no Malkovich"
-
-#: html/Admin/Elements/EditQueueWatchers:26 html/Ticket/Elements/EditWatchers:27
-msgid "none"
-msgstr "none"
-
-#: html/Elements/SelectEqualityOperator:37
-msgid "not equal to"
-msgstr "Malkovich to"
-
-#: html/SelfService/Elements/MyRequests:61 lib/RT/Queue_Overlay.pm:60
-msgid "open"
-msgstr "open"
-
-#: lib/RT/Group_Overlay.pm:201
-#. ($self->Name, $user->Name)
-msgid "personal group '%1' for user '%2'"
-msgstr "Malkovich '%1' Malkovich '%2'"
-
-#: lib/RT/Group_Overlay.pm:209
-#. ($queue->Name, $self->Type)
-msgid "queue %1 %2"
-msgstr "Malkovich %1 %2"
-
-#: lib/RT/Queue_Overlay.pm:63
-msgid "rejected"
-msgstr "Malkovich"
-
-#: lib/RT/Queue_Overlay.pm:62
-msgid "resolved"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:307
-msgid "sec"
-msgstr "sec"
-
-#: lib/RT/Queue_Overlay.pm:61
-msgid "stalled"
-msgstr "Malkovich"
-
-#: lib/RT/Group_Overlay.pm:204
-#. ($self->Type)
-msgid "system %1"
-msgstr "Malkovich %1"
-
-#: lib/RT/Group_Overlay.pm:215
-#. ($self->Type)
-msgid "system group '%1'"
-msgstr "Malkovich '%1'"
-
-#: html/Elements/Error:42 html/SelfService/Error.html:41
-msgid "the calling component did not specify why"
-msgstr "the Malkovich Malkovich Malkovich Malkovich"
-
-#: NOT FOUND IN SOURCE
-msgid "ticket #%1"
-msgstr "Malkovich #%1"
-
-#: lib/RT/Group_Overlay.pm:212
-#. ($self->Instance, $self->Type)
-msgid "ticket #%1 %2"
-msgstr "Malkovich #%1 %2"
-
-#: lib/RT/Group_Overlay.pm:218
-#. ($self->Id)
-msgid "undescribed group %1"
-msgstr "Malkovich Malkovich %1"
-
-#: lib/RT/Group_Overlay.pm:193
-#. ($user->Object->Name)
-msgid "user %1"
-msgstr "user %1"
-
-#: lib/RT/Date.pm:323
-msgid "weeks"
-msgstr "Malkovich"
-
-#: lib/RT/Date.pm:331
-msgid "years"
-msgstr "Malkovich"
-
diff --git a/rt/lib/RT/I18N/no.po b/rt/lib/RT/I18N/no.po
deleted file mode 100644
index 113239724..000000000
--- a/rt/lib/RT/I18N/no.po
+++ /dev/null
@@ -1,6563 +0,0 @@
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"POT-Creation-Date: 2003-04-01 06:06+0200\n"
-"PO-Revision-Date: 2006-12-20 20:59+0100\n"
-"Last-Translator: Ronny Pettersen <ronny.pettersen@edb.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"
-
-#: 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 ""
-
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "#"
-msgstr "#"
-
-#: NOT FOUND IN SOURCE
-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
-#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
-msgid "#%1: %2"
-msgstr "#%1: %2"
-
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr "$1"
-
-#: lib/RT/Record.pm:940
-#. ($label)
-msgid "$prefix %1"
-msgstr "$prefix %1"
-
-#: lib/RT/URI/fsck_com_rt.pm:256
-#. ($self->ObjectType, $self->Object->Id)
-msgid "%1 #%2"
-msgstr ""
-
-#: lib/RT/Date.pm:365
-#. ($s, $time_unit)
-msgid "%1 %2"
-msgstr "%1 %2"
-
-#: NOT FOUND IN SOURCE
-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))
-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)
-#. ($field, $self->NewValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 added"
-msgstr "%1 %2 lagt til"
-
-#: lib/RT/Date.pm:362
-#. ($s, $time_unit)
-msgid "%1 %2 ago"
-msgstr "%1 %2 siden"
-
-#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654
-#. ($cf->Name, $old_content, $new_value->Content)
-#. ($field, $self->OldValue, $self->NewValue)
-msgid "%1 %2 changed to %3"
-msgstr "%1 %2 ble endret til %3"
-
-#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696
-#. ($cf->Name, $old_value->Content)
-#. ($field, $self->OldValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 deleted"
-msgstr "%1 %2 slettet"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 %2 of group %3"
-msgstr "%1 %2 av gruppen %3"
-
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
-#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->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"
-
-#: html/Ticket/Elements/ShowAttachments:72
-#. ($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))
-#. (loc($Ticket->Status()))
-#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-msgid "%1 (Unchanged)"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "%1 - %2 shown"
-msgstr "%1 - %2 vist"
-
-#: 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"
-msgstr "%1 - Et parameter til %2"
-
-#: bin/rt-crontool:262
-#. ("--verbose")
-msgid "%1 - Output status updates to STDOUT"
-msgstr "%1 - Viser statusoppdateringer til STDOUT"
-
-#: bin/rt-crontool:253
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
-msgstr ""
-
-#: bin/rt-crontool:256
-#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
-msgstr ""
-
-#: bin/rt-crontool:247
-#. ("--action")
-msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - Oppgi kommandomodulen du ønsker å bruke"
-
-#: bin/rt-crontool:241
-#. ("--condition")
-msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - Oppgi betingelsesmodulen du ønsker å bruke"
-
-#: bin/rt-crontool:234
-#. ("--search")
-msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - Oppgi søkemodulen du ønsker å bruke"
-
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-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>',)
-msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
-
-#: lib/RT/ScripAction_Overlay.pm:150
-#. ($self->Id)
-msgid "%1 ScripAction loaded"
-msgstr "%1 KommandoScript lastet"
-
-#: lib/RT/Record.pm:1722
-#. ($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"
-
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
-#. ($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"
-
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531
-#. ($self->BriefDescription , $self->CreatorObj->Name)
-#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
-msgid "%1 by %2"
-msgstr "%1 av %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."'")
-msgid "%1 changed from %2 to %3"
-msgstr "%1 ble endret fra %2 til %3"
-
-#: html/Search/Build.html:213
-#. ($Description)
-msgid "%1 copy"
-msgstr "%1 kopi"
-
-#: lib/RT/Record.pm:944
-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:2787
-#. ($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:571
-#. ($obj_type)
-msgid "%1 created"
-msgstr "%1 opprettet"
-
-#: lib/RT/Transaction_Overlay.pm:576
-#. ($obj_type)
-msgid "%1 deleted"
-msgstr "%1 slettet"
-
-#: etc/initialdata:593
-msgid "%1 highest priority tickets I own"
-msgstr ""
-
-#: 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:229
-#. ($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."
-
-#: lib/RT/Queue_Overlay.pm:863
-#. ($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."
-
-#: NOT FOUND IN SOURCE
-msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 er ikke lenger en %2 for denne saken."
-
-#: NOT FOUND IN SOURCE
-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."
-
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
-#. ($minutes)
-msgid "%1 min"
-msgstr "%1 min"
-
-#: etc/initialdata:601
-msgid "%1 newest unowned tickets"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "%1 not shown"
-msgstr "%1 vises ikke"
-
-#: lib/RT/CustomField_Overlay.pm:893
-msgid "%1 objects"
-msgstr ""
-
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "%1 rettigheter"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 succeeded\\n"
-msgstr "%1 var velykket\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "%1 er ukjent type for $saksnummer"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "%1 er ukjent type for %2"
-
-#: 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:63
-#. (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:894
-msgid "%1's %2 objects"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:895
-msgid "%1's %2's %3 objects"
-msgstr ""
-
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57
-#. ($object->Name)
-#. ($Object->Name)
-msgid "%1's saved searches"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:481
-#. ($self)
-msgid "%1: no attachment specified"
-msgstr "%1: ingen vedlegg oppgitt"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:78
-#. ($size)
-msgid "%1b"
-msgstr "%1b"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:75
-#. (int( $size / 102.4 ) / 10)
-msgid "%1k"
-msgstr "%1k"
-
-#: html/Ticket/Elements/ShowTime:49
-#. (sprintf("%.1f",$minutes / 60))
-msgid "%quant(%1,hour)"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1142
-#. ($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)"
-
-#: 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
-msgid "(Check box to delete)"
-msgstr "(Merk for å slette)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Check boxes to delete)"
-msgstr "(Merk boksene for å slette)"
-
-#: html/Ticket/Elements/PreviewScrips:99
-msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr ""
-
-#: html/Ticket/Elements/PreviewScrips:123
-msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr ""
-
-#: html/Ticket/Create.html:218
-msgid "(Enter ticket ids or URLs, separated with spaces)"
-msgstr "(Skriv inn referansenummer eller URler, separert med mellomrom)"
-
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
-#. ($RT::CorrespondAddress)
-#. ($RT::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)"
-
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
-msgid "(No custom fields)"
-msgstr "(Ingen fleksifelt)"
-
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
-msgid "(No members)"
-msgstr "(Ingen medlemmer)"
-
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
-msgid "(No scrips)"
-msgstr "(Ingen scrips)"
-
-#: html/Admin/Elements/EditTemplates:52
-msgid "(No templates)"
-msgstr "(Ingen maler)"
-
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
-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 "(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.)"
-
-#: 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 "(Sender en kopi av denne oppdateringen til en kommaseparert liste av administrative epostaddresser. Disse vil <b>vil</b> motta fremtidige oppdateringer.)"
-
-#: html/Ticket/Create.html:103
-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 "(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å."
-
-#: 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 "(Sender en kopi av dette oppdateringen til en kommaseparert liste med epostaddresser. Disse <b>vill</b> motta fremtidige oppdateringer.)"
-
-#: html/Ticket/Create.html:93
-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
-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
-msgid "(Will not be sent email)"
-msgstr ""
-
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
-msgid "(empty)"
-msgstr "(tom)"
-
-#: html/Admin/Users/index.html:60
-msgid "(no name listed)"
-msgstr "(navn ikke oppgitt)"
-
-#: NOT FOUND IN SOURCE
-msgid "(no subject)"
-msgstr "(ingen overskrift)"
-
-#: 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
-msgid "(no value)"
-msgstr "(ingen verdi)"
-
-#: html/Admin/Elements/EditCustomFieldValues:47
-msgid "(no values)"
-msgstr ""
-
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
-msgid "(only one ticket)"
-msgstr "(bare en sak)"
-
-#: html/Elements/RT__Ticket/ColumnMap:149
-msgid "(pending approval)"
-msgstr "(Venter på godkjenning)"
-
-#: html/Elements/RT__Ticket/ColumnMap:152
-msgid "(pending other Collection)"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "(pending other tickets)"
-msgstr "(venter på andre saker)"
-
-#: NOT FOUND IN SOURCE
-msgid "(requestor's group)"
-msgstr "(kundens gruppe)"
-
-#: html/Admin/Users/Modify.html:71
-msgid "(required)"
-msgstr "(nødvendig)"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "(untitled)"
-msgstr "(ingen tittel)"
-
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr ""
-
-#: html/Elements/EditCustomFieldSelect:57
-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 "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..."
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket-:Status%>"
-
-#: 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'))
-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
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Ny sak i\">&nbsp;%1"
-
-#: NOT FOUND IN SOURCE
-msgid "??????"
-msgstr "??????"
-
-#: etc/initialdata:218
-msgid "A blank template"
-msgstr "En tom mal"
-
-#: html/Admin/Users/Modify.html:371
-msgid "A password was not set, so user won't be able to login."
-msgstr ""
-
-#: 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:174 lib/RT/Principal_Overlay.pm:219
-msgid "ACE not found"
-msgstr "ACE ikke funnet"
-
-#: lib/RT/ACE_Overlay.pm:853
-msgid "ACEs can only be created and deleted."
-msgstr "ACEr kan bare opprettes og slettes."
-
-#: html/Search/Elements/SelectAndOr:46
-msgid "AND"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Aborting to avoid unintended ticket modifications.\\n"
-msgstr "Avbryter for å ungå uånsket saksendring"
-
-#: html/User/Elements/Tabs:53
-msgid "About me"
-msgstr "Om meg"
-
-#: html/Admin/Users/Modify.html:106
-msgid "Access control"
-msgstr "Aksesskontroll"
-
-#: html/Admin/Elements/EditScrip:65
-msgid "Action"
-msgstr "Handling"
-
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "Handling %1 finnes ikke"
-
-#: NOT FOUND IN SOURCE
-msgid "Action committed."
-msgstr "Handling skrevet."
-
-#: bin/rt-crontool:171
-msgid "Action committed.\\n"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:168
-msgid "Action is mandatory argument"
-msgstr ""
-
-#: bin/rt-crontool:167
-msgid "Action prepared..."
-msgstr "Handling forberedt"
-
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr ""
-
-#: html/Search/Bulk.html:92
-msgid "Add AdminCc"
-msgstr "Legg til AdminCc"
-
-#: html/Search/Bulk.html:88
-msgid "Add Cc"
-msgstr "Legg til Cc"
-
-#: html/Search/Elements/EditFormat:49
-msgid "Add Columns"
-msgstr ""
-
-#: html/Search/Elements/PickCriteria:46
-msgid "Add Criteria"
-msgstr ""
-
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
-msgid "Add More Files"
-msgstr "Legg til flere filer"
-
-#: NOT FOUND IN SOURCE
-msgid "Add Next State"
-msgstr "Legg til neste status"
-
-#: html/Search/Bulk.html:84
-msgid "Add Requestor"
-msgstr "Legg til kunde"
-
-#: html/Admin/Elements/AddCustomFieldValue:46
-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"
-
-#: html/Admin/Global/Scrip.html:83
-msgid "Add a scrip which will apply to all queues"
-msgstr "Legg til et Scrip som vil gjelde for alle køer"
-
-#: html/Search/Build.html:109 html/Search/Build.html:94
-msgid "Add and Search"
-msgstr ""
-
-#: html/Search/Bulk.html:124
-msgid "Add comments or replies to selected tickets"
-msgstr "Legg til kommentarer eller svar til denne saken"
-
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
-msgid "Add members"
-msgstr "Legg til medlemmer"
-
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
-msgid "Add new watchers"
-msgstr "Legg til overvåkere"
-
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
-msgstr ""
-
-#: html/Search/Bulk.html:158
-msgid "Add values"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "Add, delete and modify custom field values for objects"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "AddNextState"
-msgstr "AddNextState"
-
-#: lib/RT/Queue_Overlay.pm:763
-#. ($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:1455
-#. ($self->loc($args{'Type'}))
-msgid "Added principal as a %1 for this ticket"
-msgstr "La til primær som en %1 for denne saken"
-
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
-msgid "Address1"
-msgstr "Adresse1"
-
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
-msgid "Address2"
-msgstr "Adresse2"
-
-#: html/Ticket/Create.html:98
-msgid "Admin Cc"
-msgstr "Admin Cc"
-
-#: etc/initialdata:295
-msgid "Admin Comment"
-msgstr "Admin Kommentar"
-
-#: etc/initialdata:274
-msgid "Admin Correspondence"
-msgstr "Admin-korrespondanse"
-
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
-msgid "Admin queues"
-msgstr "Adminkøer"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin users"
-msgstr "Adminbrukere"
-
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
-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"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminAllPersonalGroups"
-msgstr "AdminAllePersonalGrupper"
-
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
-msgid "AdminCc"
-msgstr "AdminCc"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminComment"
-msgstr "AdminKommentar"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCorrespondence"
-msgstr "AdminKorrespondanse"
-
-#: lib/RT/CustomField_Overlay.pm:106
-msgid "AdminCustomField"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCustomFields"
-msgstr "AdminFleksifelt"
-
-#: lib/RT/Group_Overlay.pm:163
-msgid "AdminGroup"
-msgstr "AdminGruppe"
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "AdminGroupMembership"
-msgstr "AdminGruppeMedlemskap"
-
-#: lib/RT/System.pm:80
-msgid "AdminOwnPersonalGroups"
-msgstr "AdminEgnePersonligeGrupper"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "AdminQueue"
-msgstr "AdminKø"
-
-#: lib/RT/System.pm:81
-msgid "AdminUsers"
-msgstr "AdminBrukere"
-
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
-msgid "Administrative Cc"
-msgstr "Administrativ Cc"
-
-#: NOT FOUND IN SOURCE
-msgid "Admins"
-msgstr "Admin"
-
-#: html/Ticket/Elements/Tabs:216
-msgid "Advanced"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Advanced Search"
-msgstr "Avansert Søk"
-
-#: html/Elements/SelectDateRelation:57
-msgid "After"
-msgstr "Etter"
-
-#: NOT FOUND IN SOURCE
-msgid "Age"
-msgstr "Alder"
-
-#: html/Search/Elements/PickCriteria:52
-msgid "Aggregator"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Alias"
-msgstr "Alias"
-
-#: NOT FOUND IN SOURCE
-msgid "Alias for"
-msgstr "Alias for"
-
-#: etc/initialdata:363
-msgid "All Approvals Passed"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "All Custom Fields"
-msgstr "Alle Fleksifelt"
-
-#: html/Admin/Queues/index.html:75
-msgid "All Queues"
-msgstr "Alle køer"
-
-#: 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"
-
-#: html/Search/Elements/EditQuery:56
-msgid "And/Or"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
-msgid "Applies to"
-msgstr ""
-
-#: html/Search/Edit.html:64
-msgid "Apply"
-msgstr ""
-
-#: html/Search/Edit.html:64
-msgid "Apply your changes"
-msgstr ""
-
-#: html/Elements/Tabs:77
-msgid "Approval"
-msgstr "Godkjennelse"
-
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
-#. ($Ticket->Id, $Ticket->Subject)
-#. ($ticket->id, $msg)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "Approval #%1: %2"
-msgstr "Godkjennelse #%1: %2"
-
-#: html/Approvals/index.html:75
-#. ($ticket->Id)
-msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr "Godkjenning # %1: Notater kunne ikke lagres pga. systemfeil"
-
-#: html/Approvals/index.html:73
-#. ($ticket->Id)
-msgid "Approval #%1: Notes recorded"
-msgstr "Godkjenning #%1: Notater lagret"
-
-#: NOT FOUND IN SOURCE
-msgid "Approval Details"
-msgstr "Godkjenning - Detaljer"
-
-#: etc/initialdata:351
-msgid "Approval Passed"
-msgstr ""
-
-#: etc/initialdata:374
-msgid "Approval Rejected"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Approval diagram"
-msgstr "Godkjenningsdiagram"
-
-#: html/Approvals/Elements/Approve:69
-msgid "Approve"
-msgstr "Godkjenn"
-
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "Godkjenners notater: %1"
-
-#: lib/RT/Date.pm:444
-msgid "Apr."
-msgstr "Apr."
-
-#: NOT FOUND IN SOURCE
-msgid "April"
-msgstr "April"
-
-#: html/Search/Elements/DisplayOptions:81
-msgid "Asc"
-msgstr ""
-
-#: html/Elements/SelectSortOrder:56
-msgid "Ascending"
-msgstr "Stigende"
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "Assign and remove custom fields"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "AssignCustomFields"
-msgstr ""
-
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
-msgid "Attach"
-msgstr "Legg Ved"
-
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
-msgid "Attach file"
-msgstr "Legg ved fil"
-
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
-msgid "Attached file"
-msgstr "Vedlagt fil"
-
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
-#. ($Attachment)
-msgid "Attachment '%1' could not be loaded"
-msgstr "Vedlegg '%1' kunne ikke lastes"
-
-#: lib/RT/Transaction_Overlay.pm:489
-msgid "Attachment created"
-msgstr "Vedlegg opprettet"
-
-#: lib/RT/Tickets_Overlay.pm:1945
-msgid "Attachment filename"
-msgstr "Vedleggsnavn"
-
-#: html/Ticket/Elements/ShowAttachments:47
-msgid "Attachments"
-msgstr "Vedlegg"
-
-#: lib/RT/Attributes_Overlay.pm:171
-msgid "Attribute Deleted"
-msgstr ""
-
-#: lib/RT/Date.pm:448
-msgid "Aug."
-msgstr "Aug."
-
-#: NOT FOUND IN SOURCE
-msgid "August"
-msgstr "August"
-
-#: NOT FOUND IN SOURCE
-msgid "AuthSystem"
-msgstr "AutSystem"
-
-#: etc/initialdata:221
-msgid "Autoreply"
-msgstr "Autosvar"
-
-#: etc/initialdata:72
-msgid "Autoreply To Requestors"
-msgstr "Autosvar Til Kunde"
-
-#: NOT FOUND IN SOURCE
-msgid "AutoreplyToRequestors"
-msgstr "AutosvarTilKunde"
-
-#: html/Widgets/SelectionBox:185
-msgid "Available"
-msgstr ""
-
-#: 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"
-
-#: 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"
-
-#: 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 "Detaljer"
-
-#: 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
-msgid "Be sure to save your changes"
-msgstr "Sørg for å lagre endringene dine"
-
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361
-msgid "Before"
-msgstr "Før"
-
-#: NOT FOUND IN SOURCE
-msgid "Begin Approval"
-msgstr "Begynn Godkjenning"
-
-#: html/Elements/Logo:47
-msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
-
-#: etc/initialdata:217
-msgid "Blank"
-msgstr "Blank"
-
-#: html/Search/Elements/EditFormat:84
-msgid "Bold"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Bookmarkable URL for this search"
-msgstr "URL som kan brukes som bokmerke for dette søket"
-
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
-msgstr ""
-
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
-msgid "Brief headers"
-msgstr "Begrens headere"
-
-#: html/Ticket/Elements/Tabs:227
-msgid "Bulk Update"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Bulk ticket update"
-msgstr "Masseoppdatering av saker"
-
-#: lib/RT/User_Overlay.pm:1853
-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:379
-msgid "Can't add a custom field value without a name"
-msgstr "Kan ikke legge til en verdi for et fleksifelt uten navn"
-
-#: html/Admin/CustomFields/Objects.html:86
-#. ($Class)
-msgid "Can't find a collection class for '%1'"
-msgstr ""
-
-#: html/Search/Build.html:286
-msgid "Can't find a saved search to work with"
-msgstr ""
-
-#: lib/RT/Link_Overlay.pm:159
-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"
-
-#: html/Widgets/SavedSearch:63
-#. (loc($self->{SearchType}))
-msgid "Can't save %1"
-msgstr ""
-
-#: html/Search/Build.html:290
-msgid "Can't save this search"
-msgstr ""
-
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
-msgid "Can't specifiy both base and target"
-msgstr "Kan ikke spesifisere både base og mål."
-
-#: html/autohandler:204
-#. ($msg)
-msgid "Cannot create user: %1"
-msgstr "Kunne ikke oprette bruker: %1"
-
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
-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
-msgid "Cc"
-msgstr "Cc"
-
-#: html/SelfService/Prefs.html:52
-msgid "Change password"
-msgstr "Endre passord"
-
-#: html/Elements/Submit:78
-msgid "Check All"
-msgstr ""
-
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
-msgid "Check box to delete"
-msgstr "Merk for å slette"
-
-#: html/Admin/Elements/SelectRights:55
-msgid "Check box to revoke right"
-msgstr "Merk for å trekke tilbake rettighet"
-
-#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64
-msgid "Children"
-msgstr "Barn"
-
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
-msgid "City"
-msgstr "By"
-
-#: html/Elements/Submit:80
-msgid "Clear All"
-msgstr ""
-
-#: html/Helpers/CalPopup.html:51
-msgid "Close window"
-msgstr ""
-
-#: html/Ticket/Elements/ShowDates:68
-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"
-
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
-msgid "Closed tickets"
-msgstr "Lukkede saker"
-
-#: NOT FOUND IN SOURCE
-msgid "Code"
-msgstr "Kode"
-
-#: lib/RT/CustomField_Overlay.pm:89
-msgid "Combobox: Select or enter multiple values"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:90
-msgid "Combobox: Select or enter one value"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:91
-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"
-
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185
-msgid "Comment"
-msgstr "Kommenter"
-
-#: html/Admin/Queues/Modify.html:79
-msgid "Comment Address"
-msgstr "Kommentaraddresse"
-
-#: NOT FOUND IN SOURCE
-msgid "Comment not recorded"
-msgstr "Kommentaren ble ikke lagret"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "Comment on tickets"
-msgstr "Kommenter saker"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "CommentOnTicket"
-msgstr "KommenterSak"
-
-#: NOT FOUND IN SOURCE
-msgid "Comments"
-msgstr "Kommentarer"
-
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
-msgid "Comments (Not sent to requestors)"
-msgstr "Kommentarer (Ikke send til kunder)"
-
-#: html/Search/Bulk.html:128
-msgid "Comments (not sent to requestors)"
-msgstr "Kommentarer (ikke sendt til kunder)"
-
-#: NOT FOUND IN SOURCE
-msgid "Comments about %1"
-msgstr "Kommentarer til %1"
-
-#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67
-msgid "Comments about this user"
-msgstr "Kommentarer om denne brukeren"
-
-#: lib/RT/Transaction_Overlay.pm:634
-msgid "Comments added"
-msgstr "La til kommentarer "
-
-#: lib/RT/Action/Generic.pm:175
-msgid "Commit Stubbed"
-msgstr "Lagring forkortet"
-
-#: NOT FOUND IN SOURCE
-msgid "Compile Restrictions"
-msgstr "Kompilatorrestriksjoner"
-
-#: html/Admin/Elements/EditScrip:59
-msgid "Condition"
-msgstr "Forutsetning"
-
-#: lib/RT/Scrip_Overlay.pm:184
-msgid "Condition is mandatory argument"
-msgstr ""
-
-#: bin/rt-crontool:151
-msgid "Condition matches..."
-msgstr "Forutsetning gjelder..."
-
-#: lib/RT/Scrip_Overlay.pm:188
-msgid "Condition not found"
-msgstr "Forutsetning ikke funnet"
-
-#: html/Elements/Tabs:84
-msgid "Configuration"
-msgstr "Konfigurasjon"
-
-#: html/SelfService/Prefs.html:54
-msgid "Confirm"
-msgstr "Bekreft"
-
-#: 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"
-
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
-msgid "Content"
-msgstr "Innhold"
-
-#: html/Elements/SelectAttachmentField:49
-msgid "Content-Type"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Coould not create group"
-msgstr "Kunne ikke opprette gruppen"
-
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
-msgstr ""
-
-#: etc/initialdata:286
-msgid "Correspondence"
-msgstr "Korrespondanse"
-
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "Korrespondanseaddresse"
-
-#: lib/RT/Transaction_Overlay.pm:630
-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: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/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073
-msgid "Could not change owner. "
-msgstr "Kunne ikke endre eier. "
-
-#: html/Admin/CustomFields/Modify.html:161
-#. ($msg)
-msgid "Could not create CustomField"
-msgstr "Kunne ikke opprette fleksifelt"
-
-#: html/Admin/Elements/EditCustomField:113
-#. ($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
-msgid "Could not create group"
-msgstr "Kunne ikke opprette gruppe"
-
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
-#. ($msg)
-msgid "Could not create template: %1"
-msgstr "Kunne ikke opprette mal: %1"
-
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
-msgid "Could not create ticket. Queue not set"
-msgstr "Kunne ikke opprette sak. Kø ikke 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
-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:741 lib/RT/Ticket_Overlay.pm:1423
-msgid "Could not find or create that user"
-msgstr "Kunne ikke finne eller lage den brukeren"
-
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
-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."
-
-#: html/Admin/CustomFields/Objects.html:69
-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
-msgid "Could not load group"
-msgstr "Kunne ikke hente gruppen"
-
-#: lib/RT/SavedSearch.pm:119
-#. ($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
-#. ($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:1444
-#. ($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:860
-#. ($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"
-
-#: NOT FOUND IN SOURCE
-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:191
-msgid "Could not set user info"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:159
-msgid "Couldn't add attachment"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:1003
-msgid "Couldn't add member to group"
-msgstr "Kunne ikke legge til medlemmmer i gruppen"
-
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
-#. ($Msg)
-msgid "Couldn't create a transaction: %1"
-msgstr "Kunne ikke opprette en transaksjon: %1"
-
-#: 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:953
-msgid "Couldn't find row"
-msgstr "Kunne ikke finne raden"
-
-#: lib/RT/Group_Overlay.pm:977
-msgid "Couldn't find that principal"
-msgstr "Kunne ikke finne primæren"
-
-#: lib/RT/CustomField_Overlay.pm:409
-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:145
-#. ($self->Id)
-msgid "Couldn't load %1 from the users database.\\n"
-msgstr "Kunne ikke laste %1 fra brukerdatabasen.\\n"
-
-#: html/Admin/CustomFields/UserRights.html:149
-#. ($id)
-msgid "Couldn't load Class %1"
-msgstr ""
-
-#: html/Admin/CustomFields/GroupRights.html:107
-#. ($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:2016
-#. ($self->Id)
-msgid "Couldn't load copy of ticket #%1."
-msgstr ""
-
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
-#. ($id)
-msgid "Couldn't load group %1"
-msgstr "Kunne ikke laste gruppen %1"
-
-#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238
-msgid "Couldn't load link"
-msgstr "Kunne ikke laste linken"
-
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
-#. ($id)
-msgid "Couldn't load object %1"
-msgstr ""
-
-#: html/Admin/Queues/People.html:142
-#. ($id)
-msgid "Couldn't load queue"
-msgstr "Kunne ikke laste køen"
-
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
-#. ($id)
-msgid "Couldn't load queue %1"
-msgstr "Kunne ikke laste køen %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load scrip"
-msgstr "Kunne ikke laste scripet"
-
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
-#. ($id)
-msgid "Couldn't load scrip #%1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load template"
-msgstr "Kunne ikke finne mal"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load that user (%1)"
-msgstr "Kunne ikke laste den brukeren (%1)"
-
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
-#. ($id)
-msgid "Couldn't load ticket '%1'"
-msgstr "Kunne ikke laste saken '%1'"
-
-#: lib/RT/Ticket_Overlay.pm:2643
-#. ($args{'URI'})
-msgid "Couldn't resolve '%1' into a URI."
-msgstr ""
-
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
-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
-msgid "Create"
-msgstr "Opprett"
-
-#: etc/initialdata:135
-msgid "Create Tickets"
-msgstr "Opprett Saker"
-
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
-msgid "Create a CustomField"
-msgstr "Oprett et fleksifelt"
-
-#: html/Admin/Queues/CustomField.html:69
-#. ($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"
-
-#: 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"
-
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
-msgid "Create a new group"
-msgstr "Opprett en ny gruppe"
-
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
-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"
-
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
-msgid "Create a new ticket"
-msgstr "Opprett en ny sak"
-
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
-msgid "Create a new user"
-msgstr "Opprett en ny bruker"
-
-#: html/Admin/Queues/Modify.html:125
-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"
-
-#: html/Admin/Queues/Scrip.html:89
-#. ($QueueObj->Name)
-msgid "Create a scrip for queue %1"
-msgstr "Opprett et scrip for køen %1"
-
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
-msgid "Create a template"
-msgstr "Opprett en mal"
-
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
-msgid "Create a ticket"
-msgstr "Opprett en sak"
-
-#: 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:137
-msgid "Create new tickets based on this scrip's template"
-msgstr "Opprett nye saker basert på dette scripets mal"
-
-#: html/SelfService/Create.html:105
-msgid "Create ticket"
-msgstr "Opprett sak"
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "Create tickets in this queue"
-msgstr "Opprett saker i denne køen"
-
-#: lib/RT/CustomField_Overlay.pm:106
-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"
-
-#: NOT FOUND IN SOURCE
-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:80
-msgid "Create, delete and modify the members of personal groups"
-msgstr "Opprett, slett og modifiser medlemmene av personlige grupper"
-
-#: lib/RT/System.pm:81
-msgid "Create, delete and modify users"
-msgstr "Opprett, slett og modifiser brukere"
-
-#: lib/RT/System.pm:87
-msgid "CreateSavedSearch"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "CreateTicket"
-msgstr "OpprettSak"
-
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
-msgid "Created"
-msgstr "Opprettet"
-
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
-#. ($CustomFieldObj->Name())
-msgid "Created CustomField %1"
-msgstr "Opprettet Fleksifelt %1"
-
-#: html/Tools/Reports/Elements/Tabs:63
-msgid "Created in a date range"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Created template %1"
-msgstr "Opprettet malen %1"
-
-#: html/Tools/Reports/CreatedByDates.html:52
-msgid "Created tickets in period, grouped by status"
-msgstr ""
-
-#: html/Search/Elements/PickBasics:102
-msgid "Creator"
-msgstr ""
-
-#: html/Elements/EditLinks:49
-msgid "Current Links"
-msgstr "Eksisterende Forhold"
-
-#: html/Admin/Elements/EditScrips:51
-msgid "Current Scrips"
-msgstr "Eksisterende Scrips"
-
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
-msgid "Current members"
-msgstr "Eksisterende medlemmer"
-
-#: html/Admin/Elements/SelectRights:51
-msgid "Current rights"
-msgstr "Eksisterende rettigheter"
-
-#: html/Search/Elements/EditQuery:47
-msgid "Current search"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Current search criteria"
-msgstr "Eksisterende søkekriterier"
-
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
-msgid "Current watchers"
-msgstr "Eksisterende overvåkere"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom Field #%1"
-msgstr "Fleksifeltet #%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
-msgid "Custom Fields"
-msgstr "Fleksifelt"
-
-#: html/Admin/CustomFields/index.html:60
-#. ($lookup)
-msgid "Custom Fields for %1"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:107
-msgid "Custom action cleanup code"
-msgstr "Avsluttningskode"
-
-#: html/Admin/Elements/EditScrip:103
-msgid "Custom action preparation code"
-msgstr "Forberedelseskode"
-
-#: html/Admin/Elements/EditScrip:99
-msgid "Custom condition"
-msgstr "Forutsetning"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field %1 %2 %3"
-msgstr "Fleksifeltet %1 %2 %3"
-
-#: lib/RT/Tickets_Overlay.pm:2424
-#. ($CF->Name)
-msgid "Custom field %1 has a value."
-msgstr "Fleksifeltet %1 har en verdi."
-
-#: lib/RT/Tickets_Overlay.pm:2420
-#. ($CF->Name)
-msgid "Custom field %1 has no value."
-msgstr "Fleksifeltet %1 har ingen verdi."
-
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
-#. ($args{'Field'})
-msgid "Custom field %1 not found"
-msgstr "Fleksifeltet %1 kunne ikke finnes"
-
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
-#. ($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:1157
-#. ($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:419
-msgid "Custom field value could not be deleted"
-msgstr "Fleksifeltets verdi kunne ikke slettes"
-
-#: lib/RT/CustomField_Overlay.pm:1169
-msgid "Custom field value could not be found"
-msgstr "Fleksifeltets verdi kunne ikke finnes"
-
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
-msgid "Custom field value deleted"
-msgstr "Fleksifeltverdi slettet"
-
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
-msgid "CustomField"
-msgstr "FleksiFelt"
-
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
-msgid "Customize"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Data error"
-msgstr "Datafeil"
-
-#: 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
-msgid "Dates"
-msgstr "Datoer"
-
-#: lib/RT/Date.pm:452
-msgid "Dec."
-msgstr "Des."
-
-#: NOT FOUND IN SOURCE
-msgid "December"
-msgstr "Desember"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Autoresponse Template"
-msgstr "Standard Autosvarmal"
-
-#: etc/initialdata:222
-msgid "Default Autoresponse template"
-msgstr "Standard Autosvarmal"
-
-#: html/Tools/Offline.html:61
-msgid "Default Queue"
-msgstr ""
-
-#: html/Tools/Offline.html:70
-msgid "Default Requestor"
-msgstr ""
-
-#: etc/initialdata:296
-msgid "Default admin comment template"
-msgstr "Standard Adminkommentarmal"
-
-#: etc/initialdata:275
-msgid "Default admin correspondence template"
-msgstr "Standard Adminkorrespondensemal"
-
-#: etc/initialdata:287
-msgid "Default correspondence template"
-msgstr "Standard korrespondensemal"
-
-#: etc/initialdata:253
-msgid "Default transaction template"
-msgstr "Standard transaksjonsmal"
-
-#: NOT FOUND IN SOURCE
-msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "Standard: %1/%2 endret seg fra %3 til %4"
-
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
-msgid "Delegate rights"
-msgstr "Deleger rettigheter"
-
-#: lib/RT/System.pm:84
-msgid "Delegate specific rights which have been granted to you."
-msgstr "Deleger spesifikke rettigheter som har blitt gitt til deg."
-
-#: lib/RT/System.pm:84
-msgid "DelegateRights"
-msgstr "DelegerRettigheter"
-
-#: html/User/Elements/Tabs:59
-msgid "Delegation"
-msgstr "Delegering"
-
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204
-msgid "Delete"
-msgstr "Slett"
-
-#: html/Admin/Elements/EditTemplates:79
-msgid "Delete Template"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:220
-#. ($msg)
-msgid "Delete failed: %1"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:74
-msgid "Delete selected scrips"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:114
-msgid "Delete tickets"
-msgstr "Slett saker"
-
-#: html/Search/Bulk.html:159
-msgid "Delete values"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:114
-msgid "DeleteTicket"
-msgstr "SlettSak"
-
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted 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:394
-msgid "Deleting this object would break referential integrity"
-msgstr "Sletting av dette objektet vil føre til inkonsistens"
-
-#: lib/RT/User_Overlay.pm:512
-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."
-
-#: html/Approvals/Elements/Approve:73
-msgid "Deny"
-msgstr "Nekt"
-
-#: 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
-msgid "Depended on by"
-msgstr "Avhengighet fra"
-
-#: NOT FOUND IN SOURCE
-msgid "Dependencies: \\n"
-msgstr "Avhengigheter: \\n"
-
-#: lib/RT/Transaction_Overlay.pm:718
-#. ($value)
-msgid "Dependency by %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:758
-#. ($value)
-msgid "Dependency by %1 deleted"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:715
-#. ($value)
-msgid "Dependency on %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:755
-#. ($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
-msgid "Depends on"
-msgstr "Avhengig av"
-
-#: NOT FOUND IN SOURCE
-msgid "DependsOn"
-msgstr "AvhengigAv"
-
-#: html/Search/Elements/DisplayOptions:86
-msgid "Desc"
-msgstr ""
-
-#: html/Elements/SelectSortOrder:56
-msgid "Descending"
-msgstr "Synkende"
-
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
-msgid "Describe the issue below"
-msgstr "Beskriv problemet under"
-
-#: 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
-msgid "Description"
-msgstr "Beskrivelse"
-
-#: NOT FOUND IN SOURCE
-msgid "Details"
-msgstr "Detaljer"
-
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
-msgid "Display"
-msgstr "Vis"
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "Display Access Control List"
-msgstr "Vis Rettigheter"
-
-#: html/Search/Elements/DisplayOptions:46
-msgid "Display Columns"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:99
-msgid "Display Scrip templates for this queue"
-msgstr "Vis Scrip-maler for denne køen"
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "Display Scrips for this queue"
-msgstr "Vis Scrip-maler for denne køen"
-
-#: html/Ticket/Elements/ShowHistory:59
-msgid "Display mode"
-msgstr "Visningsmodus"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "Display saved searches for this group"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "Vis saken #%1"
-
-#: html/Elements/Footer:61
-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
-msgid "Do anything and everything"
-msgstr "Gjør hva som helst"
-
-#: html/Elements/Refresh:51
-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"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "Download"
-msgstr "Last ned"
-
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
-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
-msgid "Due"
-msgstr "Innen"
-
-#: NOT FOUND IN SOURCE
-msgid "Due date '%1' could not be parsed"
-msgstr "Innendato '%1' kunne ikke tolkes"
-
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "FEIL: Kunne ikke laste sak '%1': %2.\\n"
-
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
-msgid "Edit"
-msgstr "Rediger"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Conditions"
-msgstr "Rediger Forhold"
-
-#: html/Search/Bulk.html:149
-msgid "Edit Custom Fields"
-msgstr ""
-
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
-#. ($Object->Name)
-msgid "Edit Custom Fields for %1"
-msgstr "Rediger fleksifelt for %1"
-
-#: html/Admin/Global/CustomFields/Groups.html:54
-msgid "Edit Custom Fields for all groups"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/Users.html:54
-msgid "Edit Custom Fields for all users"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
-msgid "Edit Custom Fields for tickets in all queues"
-msgstr ""
-
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
-msgid "Edit Links"
-msgstr "Rediger Forhold"
-
-#: html/Search/Edit.html:68
-msgid "Edit Query"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:214
-msgid "Edit Search"
-msgstr ""
-
-#: html/Admin/Queues/Templates.html:63
-#. ($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:167
-msgid "Edit saved searches for this group"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Edit scrips"
-msgstr "Rediger scrips"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
-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:167
-msgid "EditSavedSearches"
-msgstr ""
-
-#: html/Admin/Queues/Modify.html:140
-#. ($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"
-
-#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120
-#. ($CustomFieldObj->Name())
-msgid "Editing CustomField %1"
-msgstr "Redigerer Fleksifeltet %1"
-
-#: html/Admin/Groups/Members.html:53
-#. ($Group->Name)
-msgid "Editing membership for group %1"
-msgstr "Redigerer medlemsskap for gruppen %1"
-
-#: html/User/Groups/Members.html:150
-#. ($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/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608
-msgid "Either base or target must be specified"
-msgstr "Enten base eller mål må oppgis"
-
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
-msgid "Email"
-msgstr "Epost"
-
-#: lib/RT/User_Overlay.pm:235
-msgid "Email address in use"
-msgstr "Epostaddresse i bruk"
-
-#: NOT FOUND IN SOURCE
-msgid "EmailAddress"
-msgstr "EpostAddresse"
-
-#: NOT FOUND IN SOURCE
-msgid "EmailEncoding"
-msgstr "EpostFormat"
-
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
-msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "Aktivt (Fjern merkingen for å deaktivere dette fleksifeltet)"
-
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
-msgid "Enabled (Unchecking this box disables this group)"
-msgstr "Aktiv (Fjern merkingen for å deaktivere denne gruppen)"
-
-#: html/Admin/Queues/Modify.html:105
-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"
-
-#: html/Admin/Queues/index.html:78
-msgid "Enabled Queues"
-msgstr "Aktive Køer"
-
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
-#. (loc_fuzzy($msg))
-msgid "Enabled status %1"
-msgstr "Aktiv status %1"
-
-#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:64
-msgid "Enter multiple values"
-msgstr "Skriv multiple verdier"
-
-#: html/Elements/EditLinks:126
-msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:65
-msgid "Enter one value"
-msgstr "Skriv en verdi"
-
-#: html/Elements/EditLinks:123
-msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
-msgstr ""
-
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
-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:66
-msgid "Enter up to %1 values"
-msgstr ""
-
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
-msgid "Error"
-msgstr "Feil"
-
-#: NOT FOUND IN SOURCE
-msgid "Error adding watcher"
-msgstr "Feilet ved opprettelse av Overvåker"
-
-#: lib/RT/Queue_Overlay.pm:672
-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:833
-msgid "Error in parameters to Queue->DeleteWatcher"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1372
-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:1538
-msgid "Error in parameters to Ticket->DeleteWatcher"
-msgstr ""
-
-#: bin/rt-crontool:285
-msgid "Escalate tickets"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:57
-msgid "Estimated"
-msgstr ""
-
-#: etc/initialdata:20
-msgid "Everyone"
-msgstr "Alle"
-
-#: bin/rt-crontool:271
-msgid "Example:"
-msgstr "Eksempel:"
-
-#: NOT FOUND IN SOURCE
-msgid "ExternalAuthId"
-msgstr "EksternAutId"
-
-#: NOT FOUND IN SOURCE
-msgid "ExternalContactInfoId"
-msgstr "EksternKontaktInfoId"
-
-#: html/Admin/Users/Modify.html:99
-msgid "Extra info"
-msgstr "Ekstra info"
-
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:376
-msgid "Failed to find 'Privileged' users pseudogroup."
-msgstr "Kunne ikke finne pseudogruppen 'Privilgerte' brukere."
-
-#: lib/RT/User_Overlay.pm:383
-msgid "Failed to find 'Unprivileged' users pseudogroup"
-msgstr "Kunne ikke finne 'pseudogruppen 'Upriviligerte' brukere"
-
-#: bin/rt-crontool:206
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr "Kunne ikke laste modulen %1. (%2)"
-
-#: lib/RT/SavedSearch.pm:152
-#. ($privacy)
-msgid "Failed to load object for %1"
-msgstr ""
-
-#: lib/RT/Date.pm:442
-msgid "Feb."
-msgstr "Feb."
-
-#: NOT FOUND IN SOURCE
-msgid "February"
-msgstr "Februar"
-
-#: html/Elements/SelectAttachmentField:50
-msgid "Filename"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:69
-msgid "Fill in multiple text areas"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:74
-msgid "Fill in multiple wikitext areas"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:70
-msgid "Fill in one text area"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:75
-msgid "Fill in one wikitext area"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
-msgid "Fill in this field with a URL."
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:71
-msgid "Fill in up to %1 text areas"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:76
-msgid "Fill in up to %1 wikitext areas"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Fin"
-msgstr "End"
-
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
-msgid "Final Priority"
-msgstr "Endelig Prioritet"
-
-#: lib/RT/Ticket_Overlay.pm:1164
-msgid "FinalPriority"
-msgstr "EndeligPrioritet"
-
-#: NOT FOUND IN SOURCE
-msgid "Find group whose"
-msgstr "Finn grupper hvor"
-
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
-msgid "Find groups whose"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Find new/open tickets"
-msgstr "Finn nye/Ã¥pne saker"
-
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
-msgid "Find people whose"
-msgstr "Finn folk hvor"
-
-#: html/Search/Results.html:147
-msgid "Find tickets"
-msgstr "Finn saker"
-
-#: NOT FOUND IN SOURCE
-msgid "Finish Approval"
-msgstr "Fullfør godkjennelse"
-
-#: html/Ticket/Elements/Tabs:81
-msgid "First"
-msgstr "Først"
-
-#: NOT FOUND IN SOURCE
-msgid "First page"
-msgstr "Første side"
-
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
-msgid "Foo Bar Baz"
-msgstr "Foo Bar Baz"
-
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
-msgid "Foo!"
-msgstr "Foo!"
-
-#: html/Search/Bulk.html:83
-msgid "Force change"
-msgstr "Tving gjennom endring"
-
-#: html/Search/Elements/EditFormat:52
-msgid "Format"
-msgstr ""
-
-#: html/Search/Results.html:145
-#. ($ticketcount)
-msgid "Found %quant(%1,ticket)"
-msgstr "Fant %quant(%1) sak(er)"
-
-#: lib/RT/Record.pm:956
-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"
-
-#: lib/RT/Date.pm:421
-msgid "Fri."
-msgstr "Fre."
-
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
-msgid "Full headers"
-msgstr "Fulle headere"
-
-#: html/Tools/Offline.html:85
-msgid "Get template from file"
-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:684
-#. ($New->Name)
-msgid "Given to %1"
-msgstr "Gitt til %1"
-
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
-msgid "Global"
-msgstr "Global"
-
-#: html/Admin/Elements/EditCustomFields:55
-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"
-
-#: html/Admin/Global/CustomFields/index.html:59
-msgid "Global custom field configuration"
-msgstr ""
-
-#: html/Admin/Global/MyRT.html:48
-#. ($pane)
-msgid "Global portlet %1 saved."
-msgstr ""
-
-#: html/Admin/Elements/SelectTemplate:59
-#. (loc($Template->Name))
-msgid "Global template: %1"
-msgstr "Globale maler: %1"
-
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
-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
-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"
-
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
-msgid "Goto ticket"
-msgstr "GÃ¥ til saken"
-
-#: NOT FOUND IN SOURCE
-msgid "Grand"
-msgstr "Stor"
-
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
-msgid "Group"
-msgstr "Gruppe"
-
-#: NOT FOUND IN SOURCE
-msgid "Group %1 %2: %3"
-msgstr "Gruppen %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
-msgid "Group Rights"
-msgstr "Grupperettigheter"
-
-#: lib/RT/Group_Overlay.pm:983
-msgid "Group already has member"
-msgstr "Alt medlem av gruppen"
-
-#: NOT FOUND IN SOURCE
-msgid "Group could not be created."
-msgstr "Gruppen kunne ikke lastes."
-
-#: html/Admin/Groups/Modify.html:109
-#. ($create_msg)
-msgid "Group could not be created: %1"
-msgstr "Gruppen kunne ikke opprettes: %1"
-
-#: lib/RT/Group_Overlay.pm:521
-msgid "Group created"
-msgstr "Gruppen opprettet"
-
-#: lib/RT/Group_Overlay.pm:1155
-msgid "Group has no such member"
-msgstr "Gruppen har ikke det medlemmet"
-
-#: 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
-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"
-
-#: 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
-msgid "Groups"
-msgstr "Grupper"
-
-#: lib/RT/Group_Overlay.pm:989
-msgid "Groups can't be members of their members"
-msgstr "Grupper kan ikke være medlemmer av sine medlemmer"
-
-#: html/Admin/Groups/index.html:86
-msgid "Groups matching search criteria"
-msgstr ""
-
-#: html/Ticket/Elements/ShowRequestor:77
-msgid "Groups this user belongs to"
-msgstr ""
-
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
-msgid "Hello!"
-msgstr "Hallo!"
-
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
-#. ($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
-msgid "History"
-msgstr "Historikk"
-
-#: html/Admin/Groups/History.html:62
-#. ($GroupObj->Name)
-msgid "History of the group %1"
-msgstr ""
-
-#: html/Admin/Users/History.html:62
-#. ($UserObj->Name)
-msgid "History of the user %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "HomePhone"
-msgstr "HjemmeTelefon"
-
-#: html/Elements/Tabs:65
-msgid "Homepage"
-msgstr "Hjemmeside"
-
-#: html/Elements/SelectTimeUnits:48
-msgid "Hours"
-msgstr ""
-
-#: lib/RT/Base.pm:119
-#. (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]."
-
-#: 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
-msgid "Id"
-msgstr "Id"
-
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
-msgid "Identity"
-msgstr "Identitet"
-
-#: etc/initialdata:429
-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"
-
-#: html/Tools/Offline.html:74
-msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr ""
-
-#: html/Tools/Offline.html:65
-msgid "If no queue is specified, create tickets in this queue."
-msgstr ""
-
-#: bin/rt-crontool:267
-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."
-
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60
-msgid "If you've updated anything above, be sure to"
-msgstr "Hvis du har oppdatert noe over, sørg for at"
-
-#: lib/RT/Record.pm:947
-msgid "Illegal value for %1"
-msgstr "Ugyldig verdig for %1"
-
-#: lib/RT/Record.pm:950
-msgid "Immutable field"
-msgstr "LÃ¥st felt"
-
-#: NOT FOUND IN SOURCE
-msgid "Include disabled custom fields in listing."
-msgstr "Inkluder deaktiverte fleksifelt i listen."
-
-#: html/Admin/Groups/index.html:65
-msgid "Include disabled groups in listing."
-msgstr ""
-
-#: html/Admin/Queues/index.html:65
-msgid "Include disabled queues in listing."
-msgstr "Inkluder deaktiverte køer i listen."
-
-#: html/Admin/Users/index.html:71
-msgid "Include disabled users in search."
-msgstr "Inkluder deaktiverte brukere i søket."
-
-#: html/Admin/CustomFields/Modify.html:113
-msgid "Include page"
-msgstr ""
-
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
-msgstr ""
-
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
-msgstr ""
-
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
-msgid "Initial Priority"
-msgstr "Startprioritet"
-
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
-msgid "InitialPriority"
-msgstr "StartPrioritet"
-
-#: lib/RT/ScripAction_Overlay.pm:133
-msgid "Input error"
-msgstr "Feil i inntasting"
-
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
-#. ($self->FriendlyPattern)
-#. ($CF->FriendlyPattern)
-msgid "Input must match %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Interest noted"
-msgstr "Interesse registrert"
-
-#: lib/RT/Ticket_Overlay.pm:3503
-msgid "Internal Error"
-msgstr "Intern Feil"
-
-#: lib/RT/Record.pm:308
-#. ($id->{error_message})
-msgid "Internal Error: %1"
-msgstr "Intern Feil: %1"
-
-#: lib/RT/Group_Overlay.pm:668
-msgid "Invalid Group Type"
-msgstr "Ugyldig gruppetype"
-
-#: lib/RT/Principal_Overlay.pm:161
-msgid "Invalid Right"
-msgstr "Ugyldige rettigheter"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid Type"
-msgstr "Ugyldig Type"
-
-#: lib/RT/Record.pm:952
-msgid "Invalid data"
-msgstr "Ugyldig data"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "Ugydlig eier. Setter til 'nobody'."
-
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
-#. ($msg)
-msgid "Invalid pattern: %1"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
-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
-msgid "Invalid right"
-msgstr "Ugyldige rettigheter"
-
-#: lib/RT/Record.pm:283
-#. ($key)
-msgid "Invalid value for %1"
-msgstr "Ugyldig verdi for %1"
-
-#: lib/RT/Record.pm:1610
-msgid "Invalid value for custom field"
-msgstr "Ugyldig verdi for fleksifeltet."
-
-#: lib/RT/Ticket_Overlay.pm:424
-msgid "Invalid value for status"
-msgstr "Ugyldig verdi for status"
-
-#: bin/rt-crontool:268
-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:269
-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:231
-msgid "It takes several arguments:"
-msgstr "Det tar flere parametere:"
-
-#: html/Search/Elements/EditFormat:85
-msgid "Italic"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Items pending my approval"
-msgstr "Ting som venter på min godkjenning"
-
-#: lib/RT/Date.pm:441
-msgid "Jan."
-msgstr "Jan."
-
-#: NOT FOUND IN SOURCE
-msgid "January"
-msgstr "Januar"
-
-#: lib/RT/Group_Overlay.pm:166
-msgid "Join or leave this group"
-msgstr "Bli med i eller forlat denne gruppen"
-
-#: lib/RT/Date.pm:447
-msgid "Jul."
-msgstr "Jul."
-
-#: NOT FOUND IN SOURCE
-msgid "July"
-msgstr "Juli"
-
-#: html/Ticket/Elements/Tabs:125
-msgid "Jumbo"
-msgstr "Total"
-
-#: lib/RT/Date.pm:446
-msgid "Jun."
-msgstr "Jun."
-
-#: NOT FOUND IN SOURCE
-msgid "June"
-msgstr "Juni"
-
-#: NOT FOUND IN SOURCE
-msgid "Keyword"
-msgstr "Nøkkelord"
-
-#: NOT FOUND IN SOURCE
-msgid "Lang"
-msgstr "Språk"
-
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
-msgid "Language"
-msgstr ""
-
-#: html/Search/Elements/EditFormat:79
-msgid "Large"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:96
-msgid "Last"
-msgstr "Siste"
-
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
-msgid "Last Contact"
-msgstr "Siste Kontakt"
-
-#: html/Elements/SelectDateType:50
-msgid "Last Contacted"
-msgstr "Sist kontaktet"
-
-#: NOT FOUND IN SOURCE
-msgid "Last Notified"
-msgstr "Sist Informert"
-
-#: html/Elements/SelectDateType:51
-msgid "Last Updated"
-msgstr "Sist Oppdatert"
-
-#: NOT FOUND IN SOURCE
-msgid "LastUpdated"
-msgstr "SistOppdatert"
-
-#: html/Search/Elements/PickBasics:103
-msgid "LastUpdatedBy"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:68
-msgid "Left"
-msgstr "Igjen"
-
-#: html/Admin/Users/Modify.html:109
-msgid "Let this user access RT"
-msgstr "La denne brukeren få tilgang til RT"
-
-#: html/Admin/Users/Modify.html:113
-msgid "Let this user be granted rights"
-msgstr "La denne brukeren få rettigheter"
-
-#: 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"
-
-#: html/Search/Elements/EditFormat:68
-msgid "Link"
-msgstr ""
-
-#: lib/RT/Record.pm:1306
-msgid "Link already exists"
-msgstr "Lenke finnes alt"
-
-#: lib/RT/Record.pm:1320
-msgid "Link could not be created"
-msgstr "Lenke kunne ikke opprettes"
-
-#: lib/RT/Record.pm:1326
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr "Lenke opprettet (%1)"
-
-#: lib/RT/Record.pm:1387
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr "Lenke slettet (%1)"
-
-#: lib/RT/Record.pm:1393
-msgid "Link not found"
-msgstr "Lenke ble ikke funnet"
-
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
-#. ($Ticket->Id)
-msgid "Link ticket #%1"
-msgstr "Knytt sak #%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Link ticket %1"
-msgstr "Knytt sak %1"
-
-#: html/Admin/CustomFields/Modify.html:102
-msgid "Link values to"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:700
-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
-msgid "Links"
-msgstr "Lenker"
-
-#: html/Search/Elements/EditSearches:75
-msgid "Load"
-msgstr ""
-
-#: html/Search/Elements/EditSearches:73
-msgid "Load saved search:"
-msgstr ""
-
-#: lib/RT/System.pm:86
-msgid "LoadSavedSearch"
-msgstr ""
-
-#: html/Admin/Tools/Configuration.html:64
-msgid "Loaded perl modules"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
-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."
-
-#: html/Elements/Header:91
-#. ("<span>".$session{'CurrentUser'}->Name."</span>")
-msgid "Logged in as %1"
-msgstr "Logget inn 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
-msgid "Login"
-msgstr "Innlogging"
-
-#: html/Elements/Header:101
-msgid "Logout"
-msgstr "Logg av"
-
-#: lib/RT/CustomField_Overlay.pm:932
-msgid "Lookup type mismatch"
-msgstr ""
-
-#: html/Search/Bulk.html:82
-msgid "Make Owner"
-msgstr "Sett Eier"
-
-#: html/Search/Bulk.html:106
-msgid "Make Status"
-msgstr "Sett Status"
-
-#: html/Search/Bulk.html:114
-msgid "Make date Due"
-msgstr "Sett tidsfrist "
-
-#: html/Search/Bulk.html:116
-msgid "Make date Resolved"
-msgstr "Sett løsningsdato"
-
-#: html/Search/Bulk.html:110
-msgid "Make date Started"
-msgstr "Sett startdato"
-
-#: html/Search/Bulk.html:108
-msgid "Make date Starts"
-msgstr "Sett startdato"
-
-#: html/Search/Bulk.html:112
-msgid "Make date Told"
-msgstr "Sett informert dato"
-
-#: html/Search/Bulk.html:102
-msgid "Make priority"
-msgstr "Sett prioritet"
-
-#: html/Search/Bulk.html:104
-msgid "Make queue"
-msgstr "Sett Kø"
-
-#: html/Search/Bulk.html:100
-msgid "Make subject"
-msgstr "Sett Emne"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "Make this group visible to user"
-msgstr ""
-
-#: html/Admin/index.html:78
-msgid "Manage custom fields and custom field values"
-msgstr ""
-
-#: html/Admin/index.html:69
-msgid "Manage groups and group membership"
-msgstr "Sett grupper og gruppemedlemsskap"
-
-#: html/Admin/index.html:85
-msgid "Manage properties and configuration which apply to all queues"
-msgstr "Rediger egenskaper og konfigurasjon som gjelder for alle køer"
-
-#: html/Admin/index.html:74
-msgid "Manage queues and queue-specific properties"
-msgstr "Rediger køer og kø-spesifike egenskaper"
-
-#: html/Admin/index.html:64
-msgid "Manage users and passwords"
-msgstr "Rediger brukere og passord"
-
-#: lib/RT/Date.pm:443
-msgid "Mar."
-msgstr "Mar."
-
-#: NOT FOUND IN SOURCE
-msgid "March"
-msgstr "Mars"
-
-#: NOT FOUND IN SOURCE
-msgid "May"
-msgstr "Mai"
-
-#: lib/RT/Date.pm:445
-msgid "May."
-msgstr "Mai."
-
-#: lib/RT/Transaction_Overlay.pm:731
-#. ($value)
-msgid "Member %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:771
-#. ($value)
-msgid "Member %1 deleted"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "Medlem lagt til"
-
-#: lib/RT/Group_Overlay.pm:1162
-msgid "Member deleted"
-msgstr "Medlem slettet"
-
-#: lib/RT/Group_Overlay.pm:1166
-msgid "Member not deleted"
-msgstr "Medlem ikke slettet"
-
-#: html/Elements/SelectLinkType:47
-msgid "Member of"
-msgstr "Medlem av"
-
-#: NOT FOUND IN SOURCE
-msgid "MemberOf"
-msgstr "MedlemAv"
-
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
-msgid "Members"
-msgstr "Medlemmer"
-
-#: lib/RT/Transaction_Overlay.pm:728
-#. ($value)
-msgid "Membership in %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:768
-#. ($value)
-msgid "Membership in %1 deleted"
-msgstr ""
-
-#: html/Admin/Elements/UserTabs:61
-msgid "Memberships"
-msgstr ""
-
-#: html/Admin/Users/Memberships.html:60
-#. ($UserObj->Name)
-msgid "Memberships of the user %1"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2893
-msgid "Merge Successful"
-msgstr "Fletting vellykket"
-
-#: lib/RT/Ticket_Overlay.pm:2780
-msgid "Merge failed. Couldn't set EffectiveId"
-msgstr "Fletting feilet. Kunne ikke sette EffektivId"
-
-#: lib/RT/Ticket_Overlay.pm:2788
-msgid "Merge failed. Couldn't set Status"
-msgstr ""
-
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
-msgid "Merge into"
-msgstr "Flett inn i"
-
-#: lib/RT/Transaction_Overlay.pm:734
-#. ($value)
-msgid "Merged into %1"
-msgstr ""
-
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
-msgid "Message"
-msgstr "Melding"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2451
-msgid "Message could not be recorded"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2454
-msgid "Message recorded"
-msgstr ""
-
-#: html/Ticket/Elements/PreviewScrips:122
-msgid "Messages about this ticket will not be sent to..."
-msgstr ""
-
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
-msgstr ""
-
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr ""
-
-#: lib/RT/Record.pm:954
-msgid "Missing a primary key?: %1"
-msgstr "Mangler en primærnøkkel?: %1"
-
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
-msgid "Mobile"
-msgstr "Mobil"
-
-#: NOT FOUND IN SOURCE
-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"
-
-#: html/Admin/Elements/ObjectCustomFields:96
-#. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
-msgid "Modify Custom Fields which apply to %1 for all %2"
-msgstr ""
-
-#: html/Admin/Elements/ObjectCustomFields:98
-#. (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"
-
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
-msgid "Modify Group Rights"
-msgstr ""
-
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
-msgid "Modify Members"
-msgstr ""
-
-#: html/User/Delegation.html:58
-msgid "Modify Rights"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "Modify Scrip templates for this queue"
-msgstr "Endre Scripmaler for denne køen"
-
-#: lib/RT/Queue_Overlay.pm:100
-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"
-
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
-msgid "Modify User Rights"
-msgstr ""
-
-#: html/Admin/Queues/CustomField.html:66
-#. ($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"
-
-#: html/Admin/Queues/Scrip.html:82
-#. ($QueueObj->Name)
-msgid "Modify a scrip for queue %1"
-msgstr "Endre et scrip for køen %1"
-
-#: html/Admin/Global/Scrip.html:75
-msgid "Modify a scrip that applies to all queues"
-msgstr "Endre et scrip som gjelder for alle køer"
-
-#: html/Admin/CustomFields/Objects.html:90
-#. ($CF->Name)
-msgid "Modify associated objects for %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Modify dates for # %1"
-msgstr "Endre datoer for # %1"
-
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
-#. ($TicketObj->Id)
-msgid "Modify dates for #%1"
-msgstr "Endre datoer for #%1"
-
-#: html/Ticket/ModifyDates.html:57
-#. ($TicketObj->Id)
-msgid "Modify dates for ticket # %1"
-msgstr "Endre datoer for sak # %1"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
-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
-msgid "Modify global group rights"
-msgstr "Endre globale grupperettigheter"
-
-#: html/Admin/Global/GroupRights.html:54
-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"
-
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
-msgid "Modify global user rights"
-msgstr "Endre globale brukerrettigheter"
-
-#: html/Admin/Global/UserRights.html:54
-msgid "Modify global user rights."
-msgstr "Endre globale brukerrettigheter"
-
-#: lib/RT/Group_Overlay.pm:163
-msgid "Modify group metadata or delete group"
-msgstr "Endre gruppens metadata eller slette gruppen"
-
-#: html/Admin/CustomFields/GroupRights.html:164
-#. ($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
-#. ($GroupObj->Name)
-msgid "Modify group rights for group %1"
-msgstr "Endre grupperettigheter for %1 gruppen"
-
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
-#. ($QueueObj->Name)
-msgid "Modify group rights for queue %1"
-msgstr "Endre grupperettigheter %1 køen"
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "Modify membership roster for this group"
-msgstr "Endre medlemsliste for denne gruppen"
-
-#: lib/RT/System.pm:82
-msgid "Modify one's own RT account"
-msgstr "Endre sin egen RT konto"
-
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
-#. ($QueueObj->Name)
-msgid "Modify people related to queue %1"
-msgstr "Endre hvem som er relatert til %1 køen"
-
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57
-#. ($Ticket->id)
-#. ($Ticket->Id)
-msgid "Modify people related to ticket #%1"
-msgstr "Endre hvem som er relater til sak #%1"
-
-#: html/Admin/Queues/Scrips.html:67
-#. ($QueueObj->Name)
-msgid "Modify scrips for queue %1"
-msgstr "Endre scrips for %1 køen"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
-msgid "Modify scrips which apply to all queues"
-msgstr "Endre scrips som gjelder alle køer"
-
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
-#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-msgid "Modify template %1"
-msgstr "Endre mal %1"
-
-#: html/Admin/Global/Templates.html:65
-msgid "Modify templates which apply to all queues"
-msgstr "Endre maler som gjelder for alle køer"
-
-#: html/Admin/Global/index.html:85
-msgid "Modify the default \"RT at a glance\" view"
-msgstr ""
-
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
-#. ($Group->Name)
-msgid "Modify the group %1"
-msgstr "Endre gruppen %1"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "Modify the queue watchers"
-msgstr "Endre overvåkere for køen"
-
-#: html/Admin/Users/Modify.html:309
-#. ($UserObj->Name)
-msgid "Modify the user %1"
-msgstr "Endre brukeren %1"
-
-#: html/Ticket/ModifyAll.html:58
-#. ($Ticket->Id)
-msgid "Modify ticket # %1"
-msgstr "Endre sak # %1"
-
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
-#. ($TicketObj->Id)
-msgid "Modify ticket #%1"
-msgstr "Endre sak #%1"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "Modify tickets"
-msgstr "Endre saker"
-
-#: html/Admin/CustomFields/UserRights.html:157
-#. ($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
-#. ($GroupObj->Name)
-msgid "Modify user rights for group %1"
-msgstr "Endre brukerrettigheter for %1 gruppen"
-
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
-#. ($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:108
-msgid "ModifyCustomField"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:166
-msgid "ModifyOwnMembership"
-msgstr "EndreEgetMedlemskap"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "ModifyQueueWatchers"
-msgstr "EndreKøOvervåkere"
-
-#: lib/RT/Queue_Overlay.pm:100
-msgid "ModifyScrips"
-msgstr "EndreScrips"
-
-#: lib/RT/System.pm:82
-msgid "ModifySelf"
-msgstr "EndreSegSelv"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "ModifyTemplate"
-msgstr "EndreMal"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "ModifyTicket"
-msgstr "EndreSak"
-
-#: lib/RT/Date.pm:417
-msgid "Mon."
-msgstr "Man."
-
-#: html/Ticket/Elements/ShowRequestor:61
-#. ($name)
-msgid "More about %1"
-msgstr "Mer om %1"
-
-#: html/Admin/Elements/PickCustomFields:83
-msgid "Move down"
-msgstr "Flytt ned"
-
-#: html/Admin/Elements/PickCustomFields:75
-msgid "Move up"
-msgstr "Flytt opp"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:48
-msgid "Multiple"
-msgstr "Flere"
-
-#: lib/RT/User_Overlay.pm:226
-msgid "Must specify 'Name' attribute"
-msgstr "MÃ¥ spesifisere attributten 'Navn'"
-
-#: html/SelfService/Elements/MyRequests:57
-#. ($friendly_status)
-msgid "My %1 tickets"
-msgstr "Mine %1 saker"
-
-#: NOT FOUND IN SOURCE
-msgid "My Approvals"
-msgstr "Mine saker til godkjenning"
-
-#: html/Tools/Elements/Tabs:63
-msgid "My Day"
-msgstr ""
-
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
-msgid "My approvals"
-msgstr "Mine saker til godkjenning"
-
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
-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
-msgid "Name"
-msgstr "Navn"
-
-#: lib/RT/User_Overlay.pm:233
-msgid "Name in use"
-msgstr "Navnet er i bruk"
-
-#: NOT FOUND IN SOURCE
-msgid "Need approval from system administrator"
-msgstr "Trenger godkjennelse fra systemadministrator"
-
-#: html/Ticket/Elements/ShowDates:73
-msgid "Never"
-msgstr "Aldri"
-
-#: NOT FOUND IN SOURCE
-msgid "New"
-msgstr "Ny"
-
-#: html/Elements/EditLinks:117
-msgid "New Links"
-msgstr "Nye forhold"
-
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
-msgid "New Password"
-msgstr "Nytt Passord"
-
-#: etc/initialdata:332
-msgid "New Pending Approval"
-msgstr "Ny, Venter på Godkjennelse"
-
-#: html/Ticket/Elements/Tabs:212
-msgid "New Search"
-msgstr "Nytt Søk"
-
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
-msgid "New custom field"
-msgstr "Nytt fleksifelt"
-
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
-msgid "New group"
-msgstr "Ny gruppe"
-
-#: html/SelfService/Prefs.html:53
-msgid "New password"
-msgstr "Nytt passord"
-
-#: lib/RT/User_Overlay.pm:816
-msgid "New password notification sent"
-msgstr "Melding om nytt passord sendt"
-
-#: html/Admin/Elements/QueueTabs:95
-msgid "New queue"
-msgstr "Ny kø"
-
-#: html/Ticket/Elements/Reminders:118
-msgid "New reminder:"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "Ny forespørsel"
-
-#: html/Admin/Elements/SelectRights:65
-msgid "New rights"
-msgstr "Nye rettigheter"
-
-#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76
-msgid "New scrip"
-msgstr "Nytt scrip"
-
-#: NOT FOUND IN SOURCE
-msgid "New search"
-msgstr "Nytt søk"
-
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
-msgid "New template"
-msgstr "Ny mal"
-
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
-msgid "New ticket"
-msgstr "Ny sak"
-
-#: lib/RT/Ticket_Overlay.pm:2757
-msgid "New ticket doesn't exist"
-msgstr "Ny sak eksistere ikke"
-
-#: html/Admin/Elements/UserTabs:81
-msgid "New user"
-msgstr "Ny bruker"
-
-#: html/Admin/Elements/CreateUserCalled:47
-msgid "New user called"
-msgstr "Ny bruker kalt"
-
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
-msgid "New watchers"
-msgstr "Ny overvåker"
-
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "Instillinger for nytt vindu"
-
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
-msgid "Next"
-msgstr "Neste"
-
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Next page"
-msgstr "Neste side"
-
-#: NOT FOUND IN SOURCE
-msgid "NickName"
-msgstr "KalleNavn"
-
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
-msgid "Nickname"
-msgstr "Kallenavn"
-
-#: html/Admin/CustomFields/UserRights.html:145
-msgid "No Class defined"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
-msgid "No CustomField"
-msgstr "Ingen FleksiFelt"
-
-#: html/Admin/CustomFields/GroupRights.html:103
-msgid "No CustomField defined"
-msgstr ""
-
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
-msgid "No Group defined"
-msgstr "Ingen grupper definert"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:482
-msgid "No Query"
-msgstr ""
-
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
-msgid "No Queue defined"
-msgstr "Ingen kø definert"
-
-#: bin/rt-crontool:73
-msgid "No RT user found. Please consult your RT administrator.\\n"
-msgstr "Ingen RT bruker funnet. Vennligst referer til manualen.\\n"
-
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
-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"
-
-#: html/Approvals/Elements/Approve:77
-msgid "No action"
-msgstr "Ingen handling"
-
-#: lib/RT/Record.pm:949
-msgid "No column specified"
-msgstr "Ingen kolonne spesifisert"
-
-#: NOT FOUND IN SOURCE
-msgid "No command found\\n"
-msgstr "Ingen kommando funnet\\n"
-
-#: html/Ticket/Elements/ShowRequestor:68
-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"
-
-#: 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
-#. (ref $self)
-msgid "No description for %1"
-msgstr "Ingen beskrivelse for %1"
-
-#: lib/RT/Users_Overlay.pm:190
-msgid "No group specified"
-msgstr "Ingen gruppe spesifisert"
-
-#: html/Admin/Groups/index.html:52
-msgid "No groups matching search criteria found."
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2393
-msgid "No message attached"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:1034
-msgid "No password set"
-msgstr "Passordet er ikke satt"
-
-#: lib/RT/Queue_Overlay.pm:361
-msgid "No permission to create queues"
-msgstr "Ingen tilgang til å opprette køer"
-
-#: lib/RT/Ticket_Overlay.pm:420
-#. ($QueueObj->Name)
-msgid "No permission to create tickets in the queue '%1'"
-msgstr "Ikke tilgang til å opprette saker for køen '%1'"
-
-#: lib/RT/User_Overlay.pm:186
-msgid "No permission to create users"
-msgstr "Ikke tilgang til å opprette brukere"
-
-#: html/SelfService/Display.html:167
-msgid "No permission to display that ticket"
-msgstr "Ikke tilgang til å vise den saken"
-
-#: lib/RT/SavedSearch.pm:156
-msgid "No permission to save system-wide searches"
-msgstr ""
-
-#: html/SelfService/Update.html:117
-msgid "No permission to view update ticket"
-msgstr "Ingen tilgang til å se oppdatering av saken"
-
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
-msgid "No principal specified"
-msgstr "Ingen primær spesifisert"
-
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
-msgid "No principals selected."
-msgstr "Ingen primære spesifisert"
-
-#: html/Admin/Queues/index.html:57
-msgid "No queues matching search criteria found."
-msgstr "Det er ingen køer som matcher søkekriteriet"
-
-#: html/Admin/Elements/SelectRights:106
-msgid "No rights found"
-msgstr "Ingen rettigheter funnet"
-
-#: html/Admin/Elements/SelectRights:53
-msgid "No rights granted."
-msgstr "Ingen rettigheter tildelt"
-
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr ""
-
-#: html/Search/Bulk.html:232
-msgid "No search to operate on."
-msgstr "Ingen søk å behandle"
-
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
-msgid "No subject"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "No ticket id specified"
-msgstr "Ingen saksid oppgitt"
-
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
-msgid "No transaction type specified"
-msgstr "Transaksjonstype ikke spesifisert"
-
-#: NOT FOUND IN SOURCE
-msgid "No user or email address specified"
-msgstr "Ingen bruker eller epostaddresse oppgitt"
-
-#: html/Admin/Users/index.html:55
-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:946
-msgid "No value sent to _Set!\\n"
-msgstr "Ingen verdi sendt til _Set!\\n"
-
-#: html/Elements/QuickCreate:59
-msgid "Nobody"
-msgstr "Ingen"
-
-#: lib/RT/Record.pm:951
-msgid "Nonexistant field?"
-msgstr "Ukjent felt?"
-
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
-msgid "Not Set"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Not logged in"
-msgstr "Ikke logget inn"
-
-#: html/Elements/Header:96
-msgid "Not logged in."
-msgstr "Ikke logget inn."
-
-#: lib/RT/Date.pm:397
-msgid "Not set"
-msgstr "Ikke satt"
-
-#: html/NoAuth/Reminder.html:48
-msgid "Not yet implemented."
-msgstr "Ikke implementert enda."
-
-#: NOT FOUND IN SOURCE
-msgid "Not yet implemented...."
-msgstr "Ikke implementert enda...."
-
-#: html/Approvals/Elements/Approve:81
-msgid "Notes"
-msgstr "Notater"
-
-#: lib/RT/User_Overlay.pm:819
-msgid "Notification could not be sent"
-msgstr "Melding kunne ikke sendes"
-
-#: etc/initialdata:101
-msgid "Notify AdminCcs"
-msgstr "Raporter til AdminCc"
-
-#: etc/initialdata:97
-msgid "Notify AdminCcs as Comment"
-msgstr "Rapporter til AdminCc som kommentar"
-
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
-msgid "Notify Ccs"
-msgstr ""
-
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
-msgid "Notify Ccs as Comment"
-msgstr ""
-
-#: etc/initialdata:128
-msgid "Notify Other Recipients"
-msgstr "Rapporter til andre mottakere"
-
-#: etc/initialdata:124
-msgid "Notify Other Recipients as Comment"
-msgstr "Rapporter til andre mottakere som kommentar"
-
-#: etc/initialdata:85
-msgid "Notify Owner"
-msgstr "Rapporter til eier"
-
-#: etc/initialdata:81
-msgid "Notify Owner as Comment"
-msgstr "Rapportert til eier som kommentar"
-
-#: etc/initialdata:376
-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:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr ""
-
-#: etc/initialdata:334
-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:77
-msgid "Notify Requestors"
-msgstr "Rapporter til kunde"
-
-#: etc/initialdata:111
-msgid "Notify Requestors and Ccs"
-msgstr "Rapporter til Kunder og Cc"
-
-#: etc/initialdata:106
-msgid "Notify Requestors and Ccs as Comment"
-msgstr "Rapporter til Kunder og Cc som kommentar"
-
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
-msgstr "Rapporter til Kunder Cc og AdminCc"
-
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr "Rapporter til Kunder Cc og AdminCc som Kommentar"
-
-#: lib/RT/Date.pm:451
-msgid "Nov."
-msgstr "Nov."
-
-#: NOT FOUND IN SOURCE
-msgid "November"
-msgstr "November"
-
-#: html/Search/Elements/SelectAndOr:47
-msgid "OR"
-msgstr ""
-
-#: lib/RT/Record.pm:322
-msgid "Object could not be created"
-msgstr "Objekter kunne ikke opprettes"
-
-#: lib/RT/Record.pm:123
-msgid "Object could not be deleted"
-msgstr ""
-
-#: lib/RT/Record.pm:341
-msgid "Object created"
-msgstr "Objektet ble opprettet"
-
-#: lib/RT/Record.pm:120
-msgid "Object deleted"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
-#. ($ObjectType)
-#. ($LookupType)
-msgid "Object of type %1 cannot take custom fields"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:967
-msgid "Object type mismatch"
-msgstr ""
-
-#: lib/RT/Date.pm:450
-msgid "Oct."
-msgstr "Okt."
-
-#: NOT FOUND IN SOURCE
-msgid "October"
-msgstr "Oktober"
-
-#: html/Tools/Elements/Tabs:55
-msgid "Offline"
-msgstr ""
-
-#: html/Tools/Offline.html:49
-msgid "Offline edits"
-msgstr ""
-
-#: html/Tools/Offline.html:46
-msgid "Offline upload"
-msgstr ""
-
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "Ved"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-msgid "On %1, %2 wrote:"
-msgstr ""
-
-#: etc/initialdata:163
-msgid "On Comment"
-msgstr "Ved Kommentar"
-
-#: etc/initialdata:156
-msgid "On Correspond"
-msgstr "Ved Korrespondanse"
-
-#: etc/initialdata:145
-msgid "On Create"
-msgstr "Ved Opprettelse"
-
-#: etc/initialdata:184
-msgid "On Owner Change"
-msgstr "Ved Eierskifte"
-
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
-msgid "On Priority Change"
-msgstr ""
-
-#: etc/initialdata:192
-msgid "On Queue Change"
-msgstr "Ved Køendring"
-
-#: etc/initialdata:198
-msgid "On Resolve"
-msgstr "Ved Løsning"
-
-#: etc/initialdata:169
-msgid "On Status Change"
-msgstr "Ved statusendring"
-
-#: etc/initialdata:150
-msgid "On Transaction"
-msgstr "Ved Transaksjon"
-
-#: html/Approvals/Elements/PendingMyApproval:70
-#. ("<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"
-
-#: html/Approvals/Elements/PendingMyApproval:68
-#. ("<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"
-
-#: html/Admin/CustomFields/index.html:75
-msgid "Only show custom fields for:"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Open"
-msgstr "Ã…pne"
-
-#: html/SelfService/index.html:46
-msgid "Open Tickets"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:160
-msgid "Open it"
-msgstr "Ã…pne den"
-
-#: NOT FOUND IN SOURCE
-msgid "Open requests"
-msgstr "Åpne forespørsler"
-
-#: html/SelfService/Elements/Tabs:75
-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:140
-msgid "Open tickets on correspondence"
-msgstr "Ã…pne saker ved korrespondanse"
-
-#: html/Prefs/MyRT.html:70
-msgid "Options"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:59
-msgid "Order by"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "Rekkefølge og sortering"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
-msgid "Organization"
-msgstr "Organisasjon"
-
-#: html/Approvals/Elements/Approve:53
-#. ($approving->Id, $approving->Subject)
-msgid "Originating ticket: #%1"
-msgstr "Opprinnelig sak: #%1"
-
-#: lib/RT/Transaction_Overlay.pm:622
-msgid "Outgoing email about a comment recorded"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:626
-msgid "Outgoing email recorded"
-msgstr ""
-
-#: html/Admin/Queues/Modify.html:90
-msgid "Over time, priority moves toward"
-msgstr "Over tid beveger prioriteten seg mot"
-
-#: lib/RT/Queue_Overlay.pm:112
-msgid "Own tickets"
-msgstr "Eie saker"
-
-#: lib/RT/Queue_Overlay.pm:112
-msgid "OwnTicket"
-msgstr "EieSak"
-
-#: 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
-msgid "Owner"
-msgstr "Eier"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner changed from %1 to %2"
-msgstr "Eier endret fra %1 til %2"
-
-#: lib/RT/Ticket_Overlay.pm:505
-msgid "Owner could not be set."
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:672
-#. ($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"
-
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-msgid "Page %1 of %2"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
-msgid "Pager"
-msgstr "Personsøker"
-
-#: NOT FOUND IN SOURCE
-msgid "PagerPhone"
-msgstr "PersonSøker"
-
-#: NOT FOUND IN SOURCE
-msgid "Parent"
-msgstr "Forelder"
-
-#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60
-msgid "Parents"
-msgstr "Foreldre"
-
-#: html/Elements/Login:95 html/User/Prefs.html:105
-msgid "Password"
-msgstr "Passord"
-
-#: html/NoAuth/Reminder.html:46
-msgid "Password Reminder"
-msgstr "Passordhint"
-
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
-msgid "Password changed"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
-msgid "Password needs to be at least %1 characters long"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:1044
-msgid "Password set"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Password too short"
-msgstr "For kort passord"
-
-#: html/User/Prefs.html:240
-#. (loc_fuzzy($msg))
-msgid "Password: %1"
-msgstr "Passord: %1"
-
-#: lib/RT/User_Overlay.pm:1030
-msgid "Password: Permission Denied"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:364
-msgid "Passwords do not match."
-msgstr "Passordene stemmer ikke overens."
-
-#: html/User/Prefs.html:242
-msgid "Passwords do not match. Your password has not been changed"
-msgstr "Passordene stemmer ikke overrens. Passordet ble ikke endret"
-
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
-msgid "People"
-msgstr "Personer"
-
-#: etc/initialdata:133
-msgid "Perform a user-defined action"
-msgstr "Kjør en brukerdefinert handling"
-
-#: html/Admin/Tools/Configuration.html:94
-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
-msgid "Permission Denied"
-msgstr "Ingen Tilgang"
-
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
-msgid "Permission denied"
-msgstr ""
-
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
-msgstr ""
-
-#: html/User/Elements/Tabs:56
-msgid "Personal Groups"
-msgstr "Personlige Grupper"
-
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
-msgid "Personal groups"
-msgstr "Personlige grupper"
-
-#: html/User/Elements/DelegateRights:58
-msgid "Personal groups:"
-msgstr "Personlige grupper:"
-
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
-msgid "Phone numbers"
-msgstr "Telefonnummer"
-
-#: NOT FOUND IN SOURCE
-msgid "Placeholder"
-msgstr "Stedholder"
-
-#: NOT FOUND IN SOURCE
-msgid "Pref"
-msgstr "Pref"
-
-#: 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
-msgid "Preferences"
-msgstr "Instillinger"
-
-#: html/Admin/Users/MyRT.html:75
-#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr ""
-
-#: html/Prefs/MyRT.html:141
-#. ($pane)
-msgid "Preferences saved for %1."
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Prefs"
-msgstr "Pref"
-
-#: lib/RT/Action/Generic.pm:195
-msgid "Prepare Stubbed"
-msgstr "Klargjør Forkortet"
-
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
-msgid "Prev"
-msgstr "Forrige"
-
-#: html/Elements/TicketList:101
-msgid "Previous Page"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Previous page"
-msgstr "Forrige side"
-
-#: NOT FOUND IN SOURCE
-msgid "Pri"
-msgstr "Pri"
-
-#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569
-#. ($args{'PrincipalId'})
-msgid "Principal %1 not found."
-msgstr "Primær %1 ikke funnet."
-
-#: 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
-msgid "Priority"
-msgstr "Prioritet"
-
-#: html/Admin/Queues/Modify.html:86
-msgid "Priority starts at"
-msgstr "Prioritet starter på"
-
-#: html/Search/Elements/EditSearches:50
-msgid "Privacy:"
-msgstr ""
-
-#: etc/initialdata:25
-msgid "Privileged"
-msgstr "Priviligert"
-
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
-#. (loc_fuzzy($msg))
-msgid "Privileged status: %1"
-msgstr "Priviligert status: %1"
-
-#: html/Admin/Users/index.html:102
-msgid "Privileged users"
-msgstr "Priviligerte brukere"
-
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
-msgid "Pseudogroup for internal use"
-msgstr "Pseduogruppe for intern bruk"
-
-#: html/Search/Build.html:121
-msgid "Query Builder"
-msgstr ""
-
-#: html/Search/Elements/Chart:101
-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
-msgid "Queue"
-msgstr "Kø"
-
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
-#. ($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ø"
-
-#: html/Admin/Queues/Modify.html:64
-msgid "Queue Name"
-msgstr "Kønavn"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue Scrips"
-msgstr "Køscrip"
-
-#: lib/RT/Queue_Overlay.pm:365
-msgid "Queue already exists"
-msgstr "Køen eksisterer allerede"
-
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
-msgid "Queue could not be created"
-msgstr "Køen kunne ikke opprettes"
-
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
-msgid "Queue could not be loaded."
-msgstr "Køen kunne ikke lastes."
-
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809
-msgid "Queue created"
-msgstr "Køen opprettet"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue is not specified."
-msgstr "Køen er ikke oppgitt."
-
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
-msgid "Queue not found"
-msgstr "Køen ikke funnet"
-
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
-msgid "Queues"
-msgstr "Køer"
-
-#: html/Elements/MyAdminQueues:46
-msgid "Queues I administer"
-msgstr ""
-
-#: html/Elements/MySupportQueues:46
-msgid "Queues I'm an AdminCc for"
-msgstr ""
-
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
-msgid "Quick search"
-msgstr "Raskt søk"
-
-#: html/Elements/QuickCreate:47
-msgid "Quick ticket creation"
-msgstr ""
-
-#: html/Search/Results.html:81
-msgid "RSS"
-msgstr ""
-
-#: 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)
-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"
-
-#: html/Admin/index.html:46 html/Admin/index.html:47
-msgid "RT Administration"
-msgstr "RT-administrasjon"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Authentication error."
-msgstr "RT Autentiseringsfeil."
-
-#: NOT FOUND IN SOURCE
-msgid "RT Bounce: %1"
-msgstr "RT Avvisning: %1"
-
-#: 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!"
-
-#: html/Elements/Error:63 html/SelfService/Error.html:62
-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."
-
-#: NOT FOUND IN SOURCE
-msgid "RT Self Service / Closed Tickets"
-msgstr "RT Selvbetjening / Lukkede Saker"
-
-#: html/Admin/Tools/Configuration.html:73
-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
-msgid "RT at a glance"
-msgstr "RT oversikt"
-
-#: html/Admin/Users/MyRT.html:30
-#. ($UserObj->Name)
-msgid "RT at a glance for the user %1"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:117
-msgid "RT can include content from another web service when showing this custom field."
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:106
-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"
-
-#: html/Elements/SetupSessionCookie:100
-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"
-
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::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>"
-
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "RT tror denne meldingen kan være en returmail"
-
-#: html/Search/Simple.html:58
-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"
-
-#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119
-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's epost kommandomodus krever PGP autentisering. Meldingen din var enten ikke signert, eller signaturen din kunne ikke bekreftes."
-
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
-msgid "Real Name"
-msgstr "Ekte Navn"
-
-#: NOT FOUND IN SOURCE
-msgid "RealName"
-msgstr "EkteNavn"
-
-#: lib/RT/Transaction_Overlay.pm:725
-#. ($value)
-msgid "Reference by %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:765
-#. ($value)
-msgid "Reference by %1 deleted"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:722
-#. ($value)
-msgid "Reference to %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:762
-#. ($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
-msgid "Referred to by"
-msgstr "Referert til 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
-msgid "Refers to"
-msgstr "Refererer til"
-
-#: NOT FOUND IN SOURCE
-msgid "RefersTo"
-msgstr "RefererTil"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine"
-msgstr "Redefiner"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "Redefiner søket"
-
-#: html/Elements/Refresh:57
-#. ($value/60)
-msgid "Refresh this page every %1 minutes."
-msgstr "Last siden på nytt hvert %1 minutt."
-
-#: lib/RT/Transaction_Overlay.pm:811
-#. ($ticket->Subject)
-msgid "Reminder '%1' added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:824
-#. ($ticket->Subject)
-msgid "Reminder '%1' completed"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:817
-#. ($ticket->Subject)
-msgid "Reminder '%1' reopened"
-msgstr ""
-
-#: html/Ticket/Reminders.html:46
-#. ($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
-msgid "Reminders"
-msgstr ""
-
-#: html/Ticket/Reminders.html:50
-#. ($Ticket->Id)
-msgid "Reminders for ticket #%1"
-msgstr ""
-
-#: html/Search/Bulk.html:94
-msgid "Remove AdminCc"
-msgstr "Fjern AdminCc"
-
-#: html/Search/Bulk.html:90
-msgid "Remove Cc"
-msgstr "Fjern Cc"
-
-#: html/Search/Bulk.html:86
-msgid "Remove Requestor"
-msgstr "Fjern Kunde"
-
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
-msgid "Reply"
-msgstr "Svar"
-
-#: html/Admin/Queues/Modify.html:72
-msgid "Reply Address"
-msgstr ""
-
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
-msgid "Reply to requestors"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "Reply to tickets"
-msgstr "Svar på sak"
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "ReplyToTicket"
-msgstr "SvarPÃ¥Sak"
-
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
-msgid "Reports"
-msgstr ""
-
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
-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"
-
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
-msgid "Requestors"
-msgstr "Kunder"
-
-#: html/Admin/Queues/Modify.html:96
-msgid "Requests should be due in"
-msgstr "Forespørsler skal være behandlet innen"
-
-#: lib/RT/Attribute_Overlay.pm:146
-#. ('Object')
-msgid "Required parameter '%1' not specified"
-msgstr ""
-
-#: html/Elements/Submit:83
-msgid "Reset"
-msgstr "Reset"
-
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
-msgid "Reset to default"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
-msgid "Residence"
-msgstr "Hjemme"
-
-#: html/Ticket/Elements/Tabs:156
-msgid "Resolve"
-msgstr "Løs"
-
-#: html/Ticket/Update.html:156
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Resolve ticket #%1 (%2)"
-msgstr "Løs saknr #%1 (%2)"
-
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172
-msgid "Resolved"
-msgstr "Løst"
-
-#: html/Tools/Reports/Elements/Tabs:55
-msgid "Resolved by owner"
-msgstr ""
-
-#: html/Tools/Reports/Elements/Tabs:59
-msgid "Resolved in date range"
-msgstr ""
-
-#: html/Tools/Reports/ResolvedByDates.html:52
-msgid "Resolved tickets in period, grouped by owner"
-msgstr ""
-
-#: html/Tools/Reports/ResolvedByOwner.html:50
-msgid "Resolved tickets, grouped by owner"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "Svar til kunder"
-
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
-msgid "Results"
-msgstr "Resultater"
-
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "Resultater per side"
-
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
-msgid "Retype Password"
-msgstr "Skriv Passord igjen"
-
-#: 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:630
-msgid "Right Delegated"
-msgstr "Rettighet Deligert"
-
-#: lib/RT/ACE_Overlay.pm:320
-msgid "Right Granted"
-msgstr "Rettighet Tildelt"
-
-#: lib/RT/ACE_Overlay.pm:178
-msgid "Right Loaded"
-msgstr "Rettighet lastet"
-
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
-msgid "Right could not be revoked"
-msgstr "Rettigheten kunne ikke trekkes tilbake"
-
-#: html/User/Delegation.html:85
-msgid "Right not found"
-msgstr "Rettighet ikke funnet"
-
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
-msgid "Right not loaded."
-msgstr "Rettighet ikke lastet."
-
-#: lib/RT/ACE_Overlay.pm:712
-msgid "Right revoked"
-msgstr "Rettighet fjernet"
-
-#: html/Admin/Elements/UserTabs:70
-msgid "Rights"
-msgstr "Rettigheter"
-
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
-#. ($object_type)
-msgid "Rights could not be granted for %1"
-msgstr "Rettigheter kunne ikke tildeles for %1"
-
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr "Rettigheter kunne ikke trekkes tilbake for %1"
-
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
-msgid "Roles"
-msgstr "Roller"
-
-#: NOT FOUND IN SOURCE
-msgid "RootApproval"
-msgstr "RootGodkjenning"
-
-#: html/Prefs/MyRT.html:72
-msgid "Rows per box"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:93
-msgid "Rows per page"
-msgstr ""
-
-#: lib/RT/Date.pm:422
-msgid "Sat."
-msgstr "Lør."
-
-#: 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
-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
-msgid "Save Changes"
-msgstr "Lagre Endringer"
-
-#: html/User/Prefs.html:181
-msgid "Save Preferences"
-msgstr ""
-
-#: html/Ticket/Elements/PreviewScrips:131
-msgid "Save changes"
-msgstr "Lage endringer"
-
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
-msgstr ""
-
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($scrip->Id)
-#. ($id)
-msgid "Scrip #%1"
-msgstr "Scrip #%1"
-
-#: lib/RT/Scrip_Overlay.pm:203
-msgid "Scrip Created"
-msgstr "Scrip Opprettet"
-
-#: html/Admin/Elements/EditScrip:52
-msgid "Scrip Fields"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:109
-msgid "Scrip deleted"
-msgstr "Scrip slettet"
-
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
-msgid "Scrips"
-msgstr "Scrip"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrips for %1\\n"
-msgstr "Scrip for %1\\n"
-
-#: html/Admin/Queues/Scrips.html:55
-msgid "Scrips which apply to all queues"
-msgstr "Scrip som gjelder for alle køer"
-
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
-msgid "Search"
-msgstr "Søk"
-
-#: NOT FOUND IN SOURCE
-msgid "Search Criteria"
-msgstr "Søkekriteria"
-
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
-msgid "Search Preferences"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr ""
-
-#: html/Approvals/Elements/PendingMyApproval:59
-msgid "Search for approvals"
-msgstr "Søk etter godkjenninger"
-
-#: html/Search/Simple.html:67
-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 ""
-
-#: html/User/Elements/Tabs:62
-msgid "Search options"
-msgstr ""
-
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
-msgid "Search results grouped by %1"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
-msgstr ""
-
-#: html/Search/Simple.html:57
-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
-msgid "Security:"
-msgstr "Sikkerhet:"
-
-#: html/Elements/ShowCustomFields:98
-msgid "See also:"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:105
-msgid "See custom fields"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "See exact outgoing email messages and their recipeients"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "See ticket private commentary"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:103
-msgid "See ticket summaries"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:105
-msgid "SeeCustomField"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "SeeGroup"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:91
-msgid "SeeQueue"
-msgstr "SeKø"
-
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
-msgid "Select a Custom Field"
-msgstr ""
-
-#: html/Admin/Groups/index.html:78
-msgid "Select a group"
-msgstr "Velg en gruppe"
-
-#: html/Admin/Queues/index.html:54
-msgid "Select a queue"
-msgstr "Velg en kø"
-
-#: html/SelfService/CreateTicketInQueue.html:48
-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
-msgid "Select a user"
-msgstr "Velg en bruker"
-
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
-msgstr "Velg fleksifelt"
-
-#: html/Admin/Global/CustomFields/index.html:70
-msgid "Select custom fields for all user groups"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:65
-msgid "Select custom fields for all users"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:76
-msgid "Select custom fields for tickets in all queues"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:83
-msgid "Select custom fields for transactions on tickets in all queues"
-msgstr ""
-
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
-msgid "Select group"
-msgstr "Velg gruppe"
-
-#: lib/RT/CustomField_Overlay.pm:59
-msgid "Select multiple values"
-msgstr "Velg flere verdier"
-
-#: lib/RT/CustomField_Overlay.pm:60
-msgid "Select one value"
-msgstr "Velg en verdi"
-
-#: html/Admin/Elements/QueueTabs:92
-msgid "Select queue"
-msgstr "Velg kø"
-
-#: html/Prefs/Quicksearch.html:53
-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
-msgid "Select scrip"
-msgstr "Velg 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
-msgid "Select template"
-msgstr "Velg mal"
-
-#: lib/RT/CustomField_Overlay.pm:61
-msgid "Select up to %1 values"
-msgstr ""
-
-#: html/Admin/Elements/UserTabs:78
-msgid "Select user"
-msgstr "Velg bruker"
-
-#: NOT FOUND IN SOURCE
-msgid "SelectMultiple"
-msgstr "VelgFlere"
-
-#: NOT FOUND IN SOURCE
-msgid "SelectSingle"
-msgstr "VelgEnkelt"
-
-#: html/Admin/Elements/EditCustomFields:58
-msgid "Selected Custom Fields"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:59
-msgid "Selected objects"
-msgstr ""
-
-#: html/Widgets/SelectionBox:209
-msgid "Selections modified. Please save your changes"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Self Service"
-msgstr "Selvbetjening"
-
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
-msgstr "Send epost til alle overvåkere"
-
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
-msgstr "Send epost til alle overvåkere som \"kommentar\""
-
-#: etc/initialdata:112
-msgid "Send mail to requestors and Ccs"
-msgstr "Send epost til kunder og Cc"
-
-#: etc/initialdata:107
-msgid "Send mail to requestors and Ccs as a comment"
-msgstr "Send epost til kunder og Cc som kommentar"
-
-#: etc/initialdata:78
-msgid "Sends a message to the requestors"
-msgstr "Sender en melding til kundene"
-
-#: etc/initialdata:125 etc/initialdata:129
-msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr "Send epost til eksplisit oppgitte Ccer og Bccer"
-
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
-msgid "Sends mail to the Ccs"
-msgstr ""
-
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
-msgid "Sends mail to the Ccs as a comment"
-msgstr ""
-
-#: etc/initialdata:102
-msgid "Sends mail to the administrative Ccs"
-msgstr "Send epost til Administrative Ccer"
-
-#: etc/initialdata:98
-msgid "Sends mail to the administrative Ccs as a comment"
-msgstr "Sender epost til de administrative Ccene som kommentar"
-
-#: etc/initialdata:82 etc/initialdata:86
-msgid "Sends mail to the owner"
-msgstr "Sender epost til eieren"
-
-#: lib/RT/Date.pm:449
-msgid "Sep."
-msgstr "Sep."
-
-#: NOT FOUND IN SOURCE
-msgid "September"
-msgstr "September"
-
-#: html/Ticket/Elements/ShowTransaction:158
-msgid "Show"
-msgstr ""
-
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
-msgstr ""
-
-#: html/Search/Elements/EditFormat:56
-msgid "Show Columns"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:220
-msgid "Show Results"
-msgstr "Vis Resultater"
-
-#: html/Approvals/Elements/PendingMyApproval:64
-msgid "Show approved requests"
-msgstr "Vis godkjente forespørsler"
-
-#: html/Ticket/Create.html:316
-msgid "Show basics"
-msgstr "Vis basisinfo"
-
-#: html/Approvals/Elements/PendingMyApproval:65
-msgid "Show denied requests"
-msgstr "Vis avviste forespørsler"
-
-#: html/Ticket/Create.html:319
-msgid "Show details"
-msgstr "Vis detaljer"
-
-#: html/Approvals/Elements/PendingMyApproval:63
-msgid "Show pending requests"
-msgstr "Vis ventende forespørsler"
-
-#: html/Approvals/Elements/PendingMyApproval:66
-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:85
-msgid "ShowConfigTab"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "ShowOutgoingEmail"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "ShowSavedSearches"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "ShowScrips"
-msgstr "VisScrip"
-
-#: lib/RT/Queue_Overlay.pm:99
-msgid "ShowTemplate"
-msgstr "VisMal"
-
-#: lib/RT/Queue_Overlay.pm:103
-msgid "ShowTicket"
-msgstr "VisSak"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "ShowTicketComments"
-msgstr "VisSaksKommentarer"
-
-#: lib/RT/Queue_Overlay.pm:107
-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:108
-msgid "Sign up as a ticket or queue AdminCc"
-msgstr "Meld deg på som sak/kø AdminCc"
-
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
-msgid "Signature"
-msgstr "Signatur"
-
-#: NOT FOUND IN SOURCE
-msgid "Signed in as %1"
-msgstr "Logget inn som %1"
-
-#: html/Elements/Tabs:68
-msgid "Simple Search"
-msgstr ""
-
-#: html/Admin/Elements/SelectSingleOrMultiple:47
-msgid "Single"
-msgstr "Enkel"
-
-#: html/Search/Elements/EditFormat:75
-msgid "Size"
-msgstr ""
-
-#: html/Elements/Header:89
-msgid "Skip Menu"
-msgstr "Dropp Meny"
-
-#: html/Search/Elements/EditFormat:78
-msgid "Small"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:120
-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
-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"
-
-#: html/Admin/Elements/EditScrip:78
-msgid "Stage"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Stalled"
-msgstr "Pauset"
-
-#: NOT FOUND IN SOURCE
-msgid "Start page"
-msgstr "Startside"
-
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
-msgid "Started"
-msgstr "Startet"
-
-#: NOT FOUND IN SOURCE
-msgid "Started date '%1' could not be parsed"
-msgstr "Startdato '%1' kunne ikke tolkes"
-
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
-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"
-
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
-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
-msgid "Status"
-msgstr "Status"
-
-#: etc/initialdata:309
-msgid "Status Change"
-msgstr "Statusendring"
-
-#: NOT FOUND IN SOURCE
-msgid "Status changed from %1 to %2"
-msgstr "Status endret fra %1 til %2"
-
-#: NOT FOUND IN SOURCE
-msgid "StatusChange"
-msgstr "EndreStatus"
-
-#: html/Ticket/Elements/Tabs:178
-msgid "Steal"
-msgstr "Stjel"
-
-#: lib/RT/Queue_Overlay.pm:117
-msgid "Steal tickets"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:117
-msgid "StealTicket"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:678
-#. ($Old->Name)
-msgid "Stolen from %1"
-msgstr "Stjålet fra %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Stolen from %1 "
-msgstr "Stjålet fra %1 "
-
-#: html/Search/Elements/EditFormat:81
-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
-msgid "Subject"
-msgstr "Emne"
-
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
-#. ($self->Data)
-msgid "Subject changed to %1"
-msgstr "Endre emne til %1"
-
-#: html/Elements/Submit:75
-msgid "Submit"
-msgstr "Oppdater"
-
-#: NOT FOUND IN SOURCE
-msgid "Submit Workflow"
-msgstr "Send Arbeidsflyt"
-
-#: lib/RT/Group_Overlay.pm:774
-msgid "Succeeded"
-msgstr "Lykkes"
-
-#: lib/RT/Date.pm:423
-msgid "Sun."
-msgstr "Søn."
-
-#: lib/RT/System.pm:75
-msgid "SuperUser"
-msgstr "SuperBruker"
-
-#: html/User/Elements/DelegateRights:98
-msgid "System"
-msgstr "System"
-
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
-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 "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:224 lib/RT/Transaction_Overlay.pm:230
-#. ($msg)
-msgid "System Error: %1"
-msgstr ""
-
-#: html/Admin/Tools/index.html:47
-msgid "System Tools"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:633
-msgid "System error. Right not delegated."
-msgstr "Systemfeil. Rettighet ikke tildelt."
-
-#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920
-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."
-
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
-msgid "System groups"
-msgstr "Systemgrupper"
-
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
-msgstr "SystemRollegruppe for intern bruk"
-
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
-msgstr "TEST_STRENG"
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
-msgid "Take"
-msgstr "Ta"
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "Take tickets"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "TakeTicket"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:663
-msgid "Taken"
-msgstr "Tatt"
-
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
-msgid "Template"
-msgstr "Mal"
-
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
-#. ($TemplateObj->Id())
-msgid "Template #%1"
-msgstr "Mal #%1"
-
-#: html/Admin/Elements/EditTemplates:110
-msgid "Template deleted"
-msgstr "Mal slettet"
-
-#: lib/RT/Scrip_Overlay.pm:176
-msgid "Template is mandatory argument"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:180
-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:343
-msgid "Template parsed"
-msgstr "Mal tolket"
-
-#: lib/RT/Template_Overlay.pm:391
-msgid "Template parsing error"
-msgstr ""
-
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
-msgid "Templates"
-msgstr "Maler"
-
-#: NOT FOUND IN SOURCE
-msgid "Templates for %1\\n"
-msgstr "Maler for %1\\n"
-
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
-msgid "That is already the current value"
-msgstr "Verdien er allerede satt"
-
-#: lib/RT/CustomField_Overlay.pm:412
-msgid "That is not a value for this custom field"
-msgstr "Det er ikke en verdi for dette fleksifeltet"
-
-#: lib/RT/Ticket_Overlay.pm:1994
-msgid "That is the same value"
-msgstr "Det er den samme verdien"
-
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
-msgid "That principal already has that right"
-msgstr "Den primæren har allerede den rettigheten"
-
-#: lib/RT/Queue_Overlay.pm:753
-#. ($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:1435
-#. ($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:852
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this queue"
-msgstr "Den primæren er ikke en %1 for denne køen"
-
-#: NOT FOUND IN SOURCE
-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:1990
-msgid "That queue does not exist"
-msgstr "Den køen eksisterer ikke"
-
-#: lib/RT/Ticket_Overlay.pm:3233
-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:710 lib/RT/Ticket_Overlay.pm:3037
-msgid "That user already owns that ticket"
-msgstr "Den brukeren eier allerede den saken"
-
-#: lib/RT/Ticket_Overlay.pm:3012
-msgid "That user does not exist"
-msgstr "Den brukeren finnes ikke"
-
-#: lib/RT/User_Overlay.pm:389
-msgid "That user is already privileged"
-msgstr "Den brukeren er allerede priviligert"
-
-#: lib/RT/User_Overlay.pm:410
-msgid "That user is already unprivileged"
-msgstr "Den brukeren er allerede upriviligert"
-
-#: lib/RT/User_Overlay.pm:402
-msgid "That user is now privileged"
-msgstr "Denne brukeren er nå priviligert"
-
-#: lib/RT/User_Overlay.pm:423
-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:3031
-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:233
-msgid "That's not a numerical id"
-msgstr "Dette er ikke en numerisk id"
-
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
-msgid "The Basics"
-msgstr "Detaljer"
-
-#: lib/RT/ACE_Overlay.pm:112
-msgid "The CC of a ticket"
-msgstr "CCen til en sak"
-
-#: lib/RT/ACE_Overlay.pm:113
-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"
-
-#: bin/rt-crontool:275
-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"
-
-#: lib/RT/Record.pm:948
-msgid "The new value has been set."
-msgstr "Den nye verdien har blitt satt."
-
-#: lib/RT/ACE_Overlay.pm:110
-msgid "The owner of a ticket"
-msgstr "Eieren av en sak"
-
-#: lib/RT/ACE_Overlay.pm:111
-msgid "The requestor of a ticket"
-msgstr "Forespørren av en sak"
-
-#: html/Admin/Elements/EditUserComments:47
-msgid "These comments aren't generally visible to the user"
-msgstr "Disse kommentarene er generelt ikke synlig for brukeren"
-
-#: lib/RT/CustomField_Overlay.pm:978
-msgid "This custom field does not apply to that object"
-msgstr ""
-
-#: html/Admin/Tools/Configuration.html:50
-msgid "This feature is only available to system administrators"
-msgstr ""
-
-#: html/Ticket/Elements/PreviewScrips:96
-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:266
-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:301
-msgid "This transaction appears to have no content"
-msgstr "Denne transaksjonen ser ikke ut til å ha noe innhold"
-
-#: html/Ticket/Elements/ShowRequestor:70
-#. ($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:420
-msgid "Thu."
-msgstr "Tor."
-
-#: NOT FOUND IN SOURCE
-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"
-
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket #%1 Jumbo update: %2"
-msgstr "Sak #%1 Jumbo oppdatering: %2"
-
-#: html/Approvals/Elements/ShowDependency:67
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "Ticket #%1: %2"
-msgstr "Sak #%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
-#. ($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
-#. ($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"
-
-#: html/Search/Bulk.html:377
-#. ($Ticket->Id, $_)
-msgid "Ticket %1: %2"
-msgstr "Sak %1: %2"
-
-#: html/Admin/Elements/QueueTabs:74
-msgid "Ticket Custom Fields"
-msgstr ""
-
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket History # %1 %2"
-msgstr "Sakshistorikk # %1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket Id"
-msgstr "SaksId"
-
-#: etc/initialdata:324
-msgid "Ticket Resolved"
-msgstr "Løst Sak"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
-msgid "Ticket Transactions"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket attachment"
-msgstr "Saks-vedlegg"
-
-#: lib/RT/Tickets_Overlay.pm:1920
-msgid "Ticket content"
-msgstr "Saks-innhold"
-
-#: lib/RT/Tickets_Overlay.pm:1969
-msgid "Ticket content type"
-msgstr "Sakens innholdstype"
-
-#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763
-msgid "Ticket could not be created due to an internal error"
-msgstr "Saken kunne ikke opprettes på grunn av en intern feil"
-
-#: 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"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket id not found"
-msgstr "Saksid ikke funnet"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket killed"
-msgstr "Sak drept"
-
-#: html/Ticket/Display.html:55
-msgid "Ticket metadata"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket not found"
-msgstr "Sak ikke funnet"
-
-#: etc/initialdata:310
-msgid "Ticket status changed"
-msgstr "Saksstatus endret"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket watchers"
-msgstr "Saksovervåkere"
-
-#: lib/RT/Search/FromSQL.pm:82
-#. (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
-msgid "Tickets"
-msgstr "Saker"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets %1 %2"
-msgstr "Saker %1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets %1 by %2"
-msgstr "Saker %1 av %2"
-
-#: html/Tools/Reports/CreatedByDates.html:86
-msgid "Tickets created after"
-msgstr ""
-
-#: html/Tools/Reports/CreatedByDates.html:88
-msgid "Tickets created before"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets from %1"
-msgstr "Saker fra %1"
-
-#: html/Tools/Reports/ResolvedByDates.html:87
-msgid "Tickets resolved after"
-msgstr ""
-
-#: html/Tools/Reports/ResolvedByDates.html:89
-msgid "Tickets resolved before"
-msgstr ""
-
-#: html/Approvals/Elements/ShowDependency:48
-msgid "Tickets which depend on this approval:"
-msgstr "Saker som er avhengige av denne godkjennelsen:"
-
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
-msgid "Time Estimated"
-msgstr ""
-
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
-msgid "Time Left"
-msgstr "Tid Igjen"
-
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
-msgid "Time Worked"
-msgstr "Arbeidstid"
-
-#: lib/RT/Tickets_Overlay.pm:1891
-msgid "Time left"
-msgstr "Tid igjen"
-
-#: html/Elements/Footer:51
-msgid "Time to display"
-msgstr "Tid å vise"
-
-#: lib/RT/Tickets_Overlay.pm:1866
-msgid "Time worked"
-msgstr "Arbeidstid"
-
-#: NOT FOUND IN SOURCE
-msgid "TimeLeft"
-msgstr "TidIgjen"
-
-#: lib/RT/Ticket_Overlay.pm:1167
-msgid "TimeWorked"
-msgstr "ArbeidsTid"
-
-#: html/Search/Elements/EditFormat:74
-msgid "Title"
-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"
-
-#: html/Elements/Footer:62
-#. ('<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
-msgid "Told"
-msgstr "Fortalt"
-
-#: 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"
-msgstr ""
-
-#: html/Search/Elements/Chart:130
-msgid "Total"
-msgstr ""
-
-#: etc/initialdata:252
-msgid "Transaction"
-msgstr "Transaksjon"
-
-#: lib/RT/Transaction_Overlay.pm:805
-#. ($self->Data)
-msgid "Transaction %1 purged"
-msgstr "Transaksjon %1 slettet"
-
-#: lib/RT/Transaction_Overlay.pm:183
-msgid "Transaction Created"
-msgstr "Transaksjon Opprettet"
-
-#: html/Admin/Elements/QueueTabs:78
-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:128
-msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:870
-msgid "Transactions are immutable"
-msgstr "Transaksjoner er låst"
-
-#: NOT FOUND IN SOURCE
-msgid "Trying to delete a right: %1"
-msgstr "Prøver å slette en rettighet: %1"
-
-#: lib/RT/Date.pm:418
-msgid "Tue."
-msgstr "Tir."
-
-#: 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
-msgid "Type"
-msgstr "Type"
-
-#: lib/RT/ScripCondition_Overlay.pm:128
-msgid "Unimplemented"
-msgstr "Uimplementert"
-
-#: html/Admin/Users/Modify.html:89
-msgid "Unix login"
-msgstr "Unix login"
-
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "UnixBrukerNavn"
-
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
-#. ($self->ContentEncoding)
-#. ($ContentEncoding)
-msgid "Unknown ContentEncoding %1"
-msgstr "Ukjent InnholdsFormatering %1"
-
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: $key"
-msgstr ""
-
-#: html/Elements/SelectResultsPerPage:58
-msgid "Unlimited"
-msgstr "Ubegrenset"
-
-#: html/Search/Elements/SelectSearchesForObjects:64
-msgid "Unnamed search"
-msgstr ""
-
-#: etc/initialdata:32
-msgid "Unprivileged"
-msgstr "Upriviligert"
-
-#: html/Admin/Elements/EditCustomFields:60
-msgid "Unselected Custom Fields"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:61
-msgid "Unselected objects"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:659
-msgid "Untaken"
-msgstr "Ikke tatt"
-
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
-msgid "Update"
-msgstr "Oppdater"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "Oppdater ID"
-
-#: html/Ticket/Update.html:135
-msgid "Update Ticket"
-msgstr ""
-
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
-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"
-
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
-msgid "Update multiple tickets"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Update name"
-msgstr "Oppdater navn"
-
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584
-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"
-
-#: html/Ticket/ModifyAll.html:84
-msgid "Update ticket"
-msgstr "Oppdater sak"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ticket # %1"
-msgstr "Ooppdater sak # %1"
-
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
-#. ($Ticket->id)
-msgid "Update ticket #%1"
-msgstr "Oppdater sak #%1"
-
-#: html/Ticket/Update.html:158
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Update ticket #%1 (%2)"
-msgstr "Oppdater sak #%1 (%2)"
-
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
-msgid "Update type was neither correspondence nor comment."
-msgstr "Oppdateringstype var verken korrespondanse eller kommentar."
-
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171
-msgid "Updated"
-msgstr "Oppdatert"
-
-#: html/Tools/Offline.html:93
-msgid "Upload"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:84
-msgid "Upload multiple files"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:79
-msgid "Upload multiple images"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:85
-msgid "Upload one file"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:80
-msgid "Upload one image"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:86
-msgid "Upload up to %1 files"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:81
-msgid "Upload up to %1 images"
-msgstr ""
-
-#: html/Tools/Offline.html:93
-msgid "Upload your changes"
-msgstr ""
-
-#: html/Admin/index.html:90
-msgid "Use other RT administrative tools"
-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:506
-#. ($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"
-
-#: etc/initialdata:132 etc/initialdata:206
-msgid "User Defined"
-msgstr "Bruker Definert"
-
-#: html/Admin/Elements/EditScrip:93
-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"
-
-#: 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
-msgid "User Rights"
-msgstr "Brukerrettigheter"
-
-#: html/Admin/Users/Modify.html:301
-#. ($msg)
-msgid "User could not be created: %1"
-msgstr "Bruker kunne ikke opprettes: %1"
-
-#: lib/RT/User_Overlay.pm:330
-msgid "User created"
-msgstr "Bruker opprettet"
-
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
-msgid "User defined groups"
-msgstr "Brukerdefinerte grupper"
-
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
-msgid "User loaded"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "User notified"
-msgstr "Bruker informert"
-
-#: NOT FOUND IN SOURCE
-msgid "User view"
-msgstr "Brukervisning"
-
-#: html/Admin/Groups/index.html:103
-msgid "User-defined groups"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
-msgid "Username"
-msgstr "Brukernavn"
-
-#: 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
-msgid "Users"
-msgstr "Brukere"
-
-#: html/Admin/Users/index.html:85
-msgid "Users matching search criteria"
-msgstr "Brukere som treffer søkekriteria"
-
-#: bin/rt-crontool:134
-#. ($transaction->id)
-msgid "Using transaction #%1..."
-msgstr ""
-
-#: lib/RT/Tickets_Overlay_SQL.pm:528
-msgid "Valid Query"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:80
-msgid "Validation"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "ValueOfQueue"
-msgstr "KøVerdi"
-
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
-msgid "Values"
-msgstr "Verdier"
-
-#: NOT FOUND IN SOURCE
-msgid "VrijevormEnkele"
-msgstr "VrijevormEnkele"
-
-#: lib/RT/Queue_Overlay.pm:107
-msgid "Watch"
-msgstr "Overvåk"
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "WatchAsAdminCc"
-msgstr "OvervåkSomAdminCc"
-
-#: NOT FOUND IN SOURCE
-msgid "Watcher loaded"
-msgstr "Overvåker lastet"
-
-#: html/Admin/Elements/QueueTabs:63
-msgid "Watchers"
-msgstr "Overvåkere"
-
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "WebFormatering"
-
-#: lib/RT/Date.pm:419
-msgid "Wed."
-msgstr "Ons."
-
-#: html/Tools/MyDay.html:75
-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 "NÃ¥r en sak har blitt godkjent av alle godkjennere, legg til korrespondanse for den opprinnelige saken"
-
-#: etc/initialdata:485
-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:146
-msgid "When a ticket is created"
-msgstr "NÃ¥r er sak er opprettet"
-
-#: etc/initialdata:418
-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:151
-msgid "When anything happens"
-msgstr "NÃ¥r noe skjer"
-
-#: etc/initialdata:199
-msgid "Whenever a ticket is resolved"
-msgstr "Når en sak er løst"
-
-#: etc/initialdata:185
-msgid "Whenever a ticket's owner changes"
-msgstr "Når en sak får ny eier"
-
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
-msgid "Whenever a ticket's priority changes"
-msgstr ""
-
-#: etc/initialdata:193
-msgid "Whenever a ticket's queue changes"
-msgstr "Når en sak flyttes til en ny kø"
-
-#: etc/initialdata:170
-msgid "Whenever a ticket's status changes"
-msgstr "NÃ¥r en saks status endres"
-
-#: etc/initialdata:207
-msgid "Whenever a user-defined condition occurs"
-msgstr "NÃ¥r brukerdefinerte forhold intreffer"
-
-#: etc/initialdata:164
-msgid "Whenever comments come in"
-msgstr "NÃ¥r kommentarer kommer inn"
-
-#: etc/initialdata:157
-msgid "Whenever correspondence comes in"
-msgstr "NÃ¥r korrespondanse kommer inn"
-
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "Arbeid"
-
-#: html/Search/Results.html:82
-msgid "Work offline"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "WorkPhone"
-msgstr "ArbeidsTelefon"
-
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
-msgid "Worked"
-msgstr "Arbeidet"
-
-#: lib/RT/Ticket_Overlay.pm:3140
-msgid "You already own this ticket"
-msgstr "Du eier allerede denne saken"
-
-#: html/autohandler:214 html/autohandler:222
-msgid "You are not an authorized user"
-msgstr "Du er ikke en autorisert bruker"
-
-#: html/Prefs/Search.html:56
-msgid "You can also edit the predefined search itself"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3025
-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:3021
-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 "Du har ikke tilgang til å se den saken.\\n"
-
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
-#. ($num, $queue)
-msgid "You found %1 tickets in queue %2"
-msgstr "Du fant %1 saker i %2 køen"
-
-#: html/NoAuth/Logout.html:52
-msgid "You have been logged out of RT."
-msgstr ""
-
-#: html/SelfService/Display.html:133
-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:2003
-msgid "You may not create requests in that queue."
-msgstr "Du kan ikke opprette forespørsler i den køen."
-
-#: html/NoAuth/Logout.html:56
-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"
-
-#: etc/initialdata:502
-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"
-
-#: etc/initialdata:540
-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"
-
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "Din forespørsel ble avvist"
-
-#: html/autohandler:251
-msgid "Your username or password is incorrect"
-msgstr "Ditt brukernavn/passord er ugyldig"
-
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
-msgid "Zip"
-msgstr "Zip"
-
-#: NOT FOUND IN SOURCE
-msgid "[no subject]"
-msgstr "[ikke noe emne]"
-
-#: lib/RT/System.pm:87
-msgid "allow creation of saved searches"
-msgstr ""
-
-#: lib/RT/System.pm:86
-msgid "allow loading of saved searches"
-msgstr ""
-
-#: html/User/Elements/DelegateRights:80
-#. ($right->PrincipalObj->Object->SelfDescription)
-msgid "as granted to %1"
-msgstr "som tildelt til %1"
-
-#: html/Search/Results.html:83
-msgid "chart"
-msgstr ""
-
-#: html/SelfService/Closed.html:49
-msgid "closed"
-msgstr "lukket"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
-msgid "contains"
-msgstr "inneholder"
-
-#: NOT FOUND IN SOURCE
-msgid "content"
-msgstr "innhold"
-
-#: NOT FOUND IN SOURCE
-msgid "content-type"
-msgstr "innholdstype"
-
-#: NOT FOUND IN SOURCE
-msgid "correspondence (probably) not sent"
-msgstr "korrespondanse (sansynligvis) ikke sendt"
-
-#: NOT FOUND IN SOURCE
-msgid "correspondence sent"
-msgstr "korrespondanse sendt"
-
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
-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"
-
-#: html/Search/Elements/PickBasics:61
-msgid "does not match"
-msgstr "treffer ikke"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
-msgid "doesn't contain"
-msgstr "inneholder ikke"
-
-#: html/Elements/SelectEqualityOperator:59
-msgid "equal to"
-msgstr "lik som"
-
-#: html/Search/Build.html:547
-msgid "error: can't move down"
-msgstr ""
-
-#: html/Search/Build.html:569
-msgid "error: can't move left"
-msgstr ""
-
-#: html/Search/Build.html:528
-msgid "error: can't move up"
-msgstr ""
-
-#: html/Search/Build.html:612
-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
-msgid "error: nothing to move"
-msgstr ""
-
-#: html/Search/Build.html:630
-msgid "error: nothing to toggle"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "false"
-msgstr "usant"
-
-#: NOT FOUND IN SOURCE
-msgid "filename"
-msgstr "filnavn"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
-msgid "greater than"
-msgstr "større enn"
-
-#: lib/RT/Group_Overlay.pm:214
-#. ($self->Name)
-msgid "group '%1'"
-msgstr "gruppe '%1'"
-
-#: html/Search/Results.html:88
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr ""
-
-#: lib/RT/Date.pm:342
-msgid "hours"
-msgstr "timer"
-
-#: html/Search/Elements/PickBasics:48
-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
-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
-msgid "isn't"
-msgstr "er ikke"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
-msgid "less than"
-msgstr "mindre enn"
-
-#: html/Search/Elements/PickBasics:60
-msgid "matches"
-msgstr "treffer"
-
-#: lib/RT/Date.pm:338
-msgid "min"
-msgstr "min"
-
-#: NOT FOUND IN SOURCE
-msgid "minutes"
-msgstr "minutter"
-
-#: NOT FOUND IN SOURCE
-msgid "modifications\\n\\n"
-msgstr "endringer\\n\\n"
-
-#: lib/RT/Date.pm:354
-msgid "months"
-msgstr "måneder"
-
-#: lib/RT/Queue_Overlay.pm:82
-msgid "new"
-msgstr "ny"
-
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
-msgid "no name"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
-msgstr "ingen verdi"
-
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
-msgid "none"
-msgstr "ingen"
-
-#: html/Elements/SelectEqualityOperator:59
-msgid "not equal to"
-msgstr "ikke lik som"
-
-#: NOT FOUND IN SOURCE
-msgid "notlike"
-msgstr "ikkelik"
-
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
-msgid "open"
-msgstr "Ã¥pen"
-
-#: lib/RT/Group_Overlay.pm:219
-#. ($self->Name, $user->Name)
-msgid "personal group '%1' for user '%2'"
-msgstr "personlig gruppe '%1' for bruker '%2'"
-
-#: lib/RT/Group_Overlay.pm:227
-#. ($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"
-
-#: lib/RT/Date.pm:334
-msgid "sec"
-msgstr "sek"
-
-#: lib/RT/System.pm:85
-msgid "show Configuration tab"
-msgstr ""
-
-#: html/Search/Results.html:80
-msgid "spreadsheet"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:84
-msgid "stalled"
-msgstr "pauset"
-
-#: html/Search/Results.html:89
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:93
-msgid "summary rows"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:222
-#. ($self->Type)
-msgid "system %1"
-msgstr "system %1"
-
-#: lib/RT/Group_Overlay.pm:233
-#. ($self->Type)
-msgid "system group '%1'"
-msgstr "systemgruppe '%1'"
-
-#: html/Elements/Error:64 html/SelfService/Error.html:63
-msgid "the calling component did not specify why"
-msgstr "den kallende komponenten oppga ikke hvorfor"
-
-#: lib/RT/Group_Overlay.pm:230
-#. ($self->Instance, $self->Type)
-msgid "ticket #%1 %2"
-msgstr "sak #%1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "true"
-msgstr "sant"
-
-#: lib/RT/Group_Overlay.pm:236
-#. ($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:211
-#. ($user->Object->Name)
-msgid "user %1"
-msgstr "bruker %1"
-
-#: lib/RT/Date.pm:350
-msgid "weeks"
-msgstr "uker"
-
-#: NOT FOUND IN SOURCE
-msgid "with template %1"
-msgstr "med malen %1"
-
-#: lib/RT/Date.pm:358
-msgid "years"
-msgstr "Ã¥r"
-
diff --git a/rt/lib/RT/I18N/pt_br.po b/rt/lib/RT/I18N/pt_br.po
deleted file mode 100644
index 98fa2069e..000000000
--- a/rt/lib/RT/I18N/pt_br.po
+++ /dev/null
@@ -1,6528 +0,0 @@
-# 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 ""
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"MIME-Version: 1.0\n"
-"PO-Revision-Date: 2008-02-23 11:48-0300\n"
-"Project-Id-Version: RT 3.6.x - pt_br\n"
-"Language-Team: Portugues Brasileiro <pt@li.org>\n"
-"X-Generator: KBabel 1.11.4\n"
-"MIME-Version: 1.0\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"Last-Translator: Fernando Frota Machado de Morais <frota@cecom.ufmg.br>\n"
-
-msgid ""
-"RT's email command mode requires PGP authentication. Either you didn't sign "
-"your message, or your signature could not be verified."
-msgstr ""
-"O modo de comandos por e-mail do RT requer autenticação PGP. Ou você não "
-"assinou sua mensagem ou sua assinatura não pôde ser verificada."
-
-#: html/Widgets/SavedSearch:117
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr " %1 removido."
-
-#: html/Widgets/SavedSearch:94
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr " %1 renomeado para %2."
-
-#: html/Widgets/SavedSearch:107
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr " %1 salvo."
-
-#: 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
-#. ($ticket->Id, $ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
-#. ($Ticket->id, $Ticket->Subject)
-msgid "#%1: %2"
-msgstr ""
-
-#: html/Elements/ShowSearch:116
-msgid "$1"
-msgstr ""
-
-#: lib/RT/Record.pm:957
-#. ($label)
-msgid "$prefix %1"
-msgstr "$prefixo %1"
-
-#: lib/RT/URI/fsck_com_rt.pm:258
-#. ($self->ObjectType, $self->Object->Id)
-msgid "%1 #%2"
-msgstr ""
-
-#: lib/RT/Date.pm:367
-#. ($s, $time_unit)
-msgid "%1 %2"
-msgstr ""
-
-#: lib/RT/Date.pm:403
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
-msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr ""
-
-#: lib/RT/Record.pm:1707 lib/RT/Transaction_Overlay.pm:668 lib/RT/Transaction_Overlay.pm:711
-#. ($cf->Name, $new_value->Content)
-#. ($field, $self->NewValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 added"
-msgstr "%1 %2 adicionado"
-
-#: lib/RT/Date.pm:364
-#. ($s, $time_unit)
-msgid "%1 %2 ago"
-msgstr "%1 %2 atrás"
-
-#: lib/RT/Record.pm:1714 lib/RT/Transaction_Overlay.pm:675
-#. ($cf->Name, $old_content, $new_value->Content)
-#. ($field, $self->OldValue, $self->NewValue)
-msgid "%1 %2 changed to %3"
-msgstr "%1 %2 mudado para %3"
-
-#: lib/RT/Record.pm:1711 lib/RT/Transaction_Overlay.pm:671 lib/RT/Transaction_Overlay.pm:717
-#. ($cf->Name, $old_value->Content)
-#. ($field, $self->OldValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 deleted"
-msgstr "%1 %2 removido"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 %2 of group %3"
-msgstr "%1 %2 do grupo %3"
-
-#: html/Admin/Elements/EditScrips:67 html/Admin/Elements/ListGlobalScrips:65 html/Ticket/Elements/PreviewScrips:105
-#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->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"
-
-#: html/Ticket/Elements/ShowAttachments:74
-#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
-msgid "%1 (%2) by %3"
-msgstr "%1 (%2) por %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())
-#. (loc($DefaultStatus))
-#. (loc($Ticket->Status()))
-msgid "%1 (Unchanged)"
-msgstr "%1 (Sem alteração)"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 - %2 shown"
-msgstr "%1 - %2 apresentados"
-
-#: bin/rt-crontool:239 bin/rt-crontool:246 bin/rt-crontool:252
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-msgid "%1 - An argument to pass to %2"
-msgstr "%1 - Um argumento para passar para %2"
-
-#: bin/rt-crontool:264
-#. ("--verbose")
-msgid "%1 - Output status updates to STDOUT"
-msgstr "%1 - Mostra atualizações de estado no STDOUT"
-
-#: bin/rt-crontool:255
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
-msgstr "%1 - Especifique o id do modelo que você quer usar"
-
-#: bin/rt-crontool:258
-#. ("--transaction")
-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:249
-#. ("--action")
-msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - Especifica o módulo de ação que você quer usar"
-
-#: bin/rt-crontool:243
-#. ("--condition")
-msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - Especifica o módulo de condição que você quer usar"
-
-#: bin/rt-crontool:236
-#. ("--search")
-msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - Especifica o módulo de busca que você quer usar"
-
-#: bin/rt-crontool:261
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%1 - Especifique o tipo de transação você quer usar"
-
-#: html/Elements/Footer:58
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<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:152
-#. ($self->Id)
-msgid "%1 ScripAction loaded"
-msgstr "ScripAction %1 carregado"
-
-#: lib/RT/Record.pm:1744
-#. ($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"
-
-#: lib/RT/Link_Overlay.pm:146 lib/RT/Link_Overlay.pm:153
-#. ($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"
-
-#: html/Ticket/Elements/ShowDates:75 lib/RT/Transaction_Overlay.pm:552
-#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
-#. ($self->BriefDescription , $self->CreatorObj->Name)
-msgid "%1 by %2"
-msgstr "%1 por %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."'")
-msgid "%1 changed from %2 to %3"
-msgstr "%1 mudado de %2 para %3"
-
-#: html/Search/Build.html:215
-#. ($Description)
-msgid "%1 copy"
-msgstr "%1 copiado"
-
-#: lib/RT/Record.pm:961
-msgid "%1 could not be set to %2."
-msgstr "%1 não pôde ser mudado 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"
-
-#: NOT FOUND IN SOURCE
-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:592
-#. ($obj_type)
-msgid "%1 created"
-msgstr "%1 criado"
-
-#: lib/RT/Transaction_Overlay.pm:597
-#. ($obj_type)
-msgid "%1 deleted"
-msgstr "%1 removido"
-
-#: etc/initialdata:593
-msgid "%1 highest priority tickets I own"
-msgstr "Meus %1 tíquetes de mais alta prioridade"
-
-#: 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:231
-#. ($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."
-
-#: lib/RT/Queue_Overlay.pm:865
-#. ($principal->Object->Name, $args{'Type'})
-msgid "%1 is no longer a %2 for this queue."
-msgstr "%1 não é mais um %2 desta fila."
-
-#: NOT FOUND IN SOURCE
-msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 não é mais um %2 deste tíquete."
-
-#: NOT FOUND IN SOURCE
-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."
-
-#: html/Ticket/Elements/ShowTime:49 html/Ticket/Elements/ShowTime:51
-#. ($minutes)
-msgid "%1 min"
-msgstr ""
-
-#: etc/initialdata:601
-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 mostrado"
-
-#: lib/RT/CustomField_Overlay.pm:896
-msgid "%1 objects"
-msgstr "%1 objetos"
-
-#: html/User/Elements/DelegateRights:99
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "%1 direitos"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 succeeded\\n"
-msgstr "%1 teve sucesso\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "Tipo %1 desconhecido para $MessageId"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "Tipo %1 desconhecido para %2"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 was created without a CurrentUser\\n"
-msgstr "%1 foi criado sem um CurrentUser\\n"
-
-#: lib/RT/Action/ResolveMembers.pm:65
-#. (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:897
-msgid "%1's %2 objects"
-msgstr "%1's %2 objetos"
-
-#: lib/RT/CustomField_Overlay.pm:898
-msgid "%1's %2's %3 objects"
-msgstr "%1's %2's %3 objetos"
-
-#: html/Search/Elements/SearchPrivacy:54 html/Search/Elements/SelectSearchObject:57 html/Search/Elements/SelectSearchesForObjects:59
-#. ($object->Name)
-#. ($Object->Name)
-msgid "%1's saved searches"
-msgstr "Primeiras %1 buscas salvas"
-
-#: lib/RT/Transaction_Overlay.pm:502
-#. ($self)
-msgid "%1: no attachment specified"
-msgstr "%1: nenhum arquivo anexo especificado"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:80
-#. ($size)
-msgid "%1b"
-msgstr ""
-
-#: html/Ticket/Elements/ShowTransactionAttachments:77
-#. (int( $size / 102.4 ) / 10)
-msgid "%1k"
-msgstr ""
-
-#: html/Ticket/Elements/ShowTime:51
-#. (sprintf("%.1f",$minutes / 60))
-msgid "%quant(%1,hour)"
-msgstr "%quant(%1,hora)"
-
-#: lib/RT/Ticket_Overlay.pm:1144
-#. ($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 "(Marcar caixa para remover o membro do grupo)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Check box to delete scrip)"
-msgstr "(Marcar caixa para remover o scrip)"
-
-#: 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
-msgid "(Check box to delete)"
-msgstr "(Marcar caixa para remover)"
-
-#: html/Ticket/Elements/PreviewScrips:101
-msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr "(Marcar caixas para desativar notificações para os destinatários listados)"
-
-#: html/Ticket/Elements/PreviewScrips:125
-msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr "(Marcar caixas para ativar notificações para os destinatários listados)"
-
-#: html/Ticket/Create.html:220
-msgid "(Enter ticket ids or URLs, separated with spaces)"
-msgstr "(Informar identificação de tíquetes ou URLs, separadas por espaço)"
-
-#: html/Admin/Queues/Modify.html:77 html/Admin/Queues/Modify.html:83
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
-msgid "(If left blank, will default to %1)"
-msgstr "(Se deixado em branco, será entendido como %)"
-
-#: NOT FOUND IN SOURCE
-msgid "(No Value)"
-msgstr "(Sem Valor)"
-
-#: html/Admin/Elements/EditCustomFields:76 html/Admin/Elements/ListGlobalCustomFields:55
-msgid "(No custom fields)"
-msgstr "(Nenhum campo personalizado)"
-
-#: html/Admin/Groups/Members.html:73 html/User/Groups/Members.html:76
-msgid "(No members)"
-msgstr "(Sem membros)"
-
-#: html/Admin/Elements/EditScrips:55 html/Admin/Elements/ListGlobalScrips:50
-msgid "(No scrips)"
-msgstr "(Sem scrips)"
-
-#: html/Admin/Elements/EditTemplates:54
-msgid "(No templates)"
-msgstr "(Nenhum modelo)"
-
-#: html/Admin/Elements/PickCustomFields:49 html/Admin/Elements/PickObjects:49
-msgid "(None)"
-msgstr "(Nenhum)"
-
-#: 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 "(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.)"
-
-#: html/Ticket/Create.html:105
-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.)"
-
-#: 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 "(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.)"
-
-#: html/Ticket/Create.html:95
-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.)"
-
-#: 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)"
-
-#: html/Ticket/Elements/EditWatchers:62 html/Ticket/Elements/ShowUserEntry:55
-msgid "(Will not be sent email)"
-msgstr "(Não enviará e-mail)"
-
-#: html/Tools/MyDay.html:53
-#. ($session{'CurrentUser'}->Name)
-msgid "(displaying new and open tickets for %1)"
-msgstr "(mostrando tíquetes novos e abertos pra %1)"
-
-#: html/Admin/Groups/index.html:59 html/User/Groups/index.html:56
-msgid "(empty)"
-msgstr "(vazio)"
-
-#: html/Admin/Users/index.html:62
-msgid "(no name listed)"
-msgstr "(nenhum nome listado)"
-
-#: NOT FOUND IN SOURCE
-msgid "(no subject)"
-msgstr "(Sem assunto)"
-
-#: 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
-msgid "(no value)"
-msgstr "(sem valor)"
-
-#: html/Admin/Elements/EditCustomFieldValues:49
-msgid "(no values)"
-msgstr "(sem valores)"
-
-#: html/Elements/EditLinks:133 html/Ticket/Elements/BulkLinks:51
-msgid "(only one ticket)"
-msgstr "(somente um tíquete)"
-
-#: html/Elements/RT__Ticket/ColumnMap:151
-msgid "(pending approval)"
-msgstr "(aprovação pendente)"
-
-#: html/Elements/RT__Ticket/ColumnMap:154
-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)"
-
-#: html/Admin/Users/Modify.html:73
-msgid "(required)"
-msgstr "(requerido)"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:84
-msgid "(untitled)"
-msgstr "(sem título)"
-
-#: html/Ticket/Elements/Reminders:135
-msgid "(yyyy/mm/dd)"
-msgstr "(aaaa/mm/dd)"
-
-#: html/Elements/EditCustomFieldSelect:59
-msgid "-"
-msgstr ""
-
-#: bin/rt-crontool:97
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr "--argumento da transação só pode ser 'first' (primeiro) ou 'last' (último)"
-
-#: 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..."
-
-#: html/Ticket/Elements/ShowBasics:55
-msgid "<% $Ticket->Status%>"
-msgstr ""
-
-#: html/Elements/SelectTicketTypes:50
-msgid "<% $_ %>"
-msgstr ""
-
-#: html/Search/Elements/SelectLinks:50
-msgid "<%$_%>"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:75
-msgid "<%$field%>"
-msgstr ""
-
-#: html/Elements/CreateTicket:49
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-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"
-
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:785
-#. ($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"
-
-#: etc/initialdata:218
-msgid "A blank template"
-msgstr "Um modelo vazio"
-
-#: html/Admin/Users/Modify.html:375
-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 pôde ser removida"
-
-#: NOT FOUND IN SOURCE
-msgid "ACE could not be found"
-msgstr "ACE não pode ser encontrada"
-
-#: lib/RT/ACE_Overlay.pm:176 lib/RT/Principal_Overlay.pm:221
-msgid "ACE not found"
-msgstr "ACE não encontrado"
-
-#: lib/RT/ACE_Overlay.pm:855
-msgid "ACEs can only be created and deleted."
-msgstr "ACEs só podem ser criados e removidos."
-
-#: 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"
-
-#: html/User/Elements/Tabs:55
-msgid "About me"
-msgstr "Sobre mim"
-
-#: html/Admin/Users/Modify.html:108
-msgid "Access control"
-msgstr "Controle de acesso"
-
-#: html/Admin/Elements/EditScrip:67
-msgid "Action"
-msgstr "Ação"
-
-#: lib/RT/Scrip_Overlay.pm:174
-#. ($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:173
-msgid "Action committed.\\n"
-msgstr "Ação executada.\\n"
-
-#: lib/RT/Scrip_Overlay.pm:170
-msgid "Action is mandatory argument"
-msgstr "Ação é um argumento obrigatório."
-
-#: bin/rt-crontool:169
-msgid "Action prepared..."
-msgstr "Ação preparada..."
-
-#: html/Search/Build.html:87
-msgid "Add"
-msgstr "Adicionar"
-
-#: html/Search/Bulk.html:94
-msgid "Add AdminCc"
-msgstr "Adicionar AdminCc"
-
-#: html/Search/Bulk.html:90
-msgid "Add Cc"
-msgstr "Adicionar Cc"
-
-#: html/Search/Elements/EditFormat:51
-msgid "Add Columns"
-msgstr "Adicionar Colunas"
-
-#: html/Search/Elements/PickCriteria:48
-msgid "Add Criteria"
-msgstr "Adicionar Critério"
-
-#: html/Ticket/Create.html:149 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"
-
-#: html/Search/Bulk.html:86
-msgid "Add Requestor"
-msgstr "Adicionar Requisitante"
-
-#: 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 teclado 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"
-
-#: html/Admin/Global/Scrip.html:85
-msgid "Add a scrip which will apply to all queues"
-msgstr "Adicionar um scrip que se aplicará a todas as filas "
-
-#: html/Search/Build.html:111 html/Search/Build.html:96
-msgid "Add and Search"
-msgstr "Adicionar e Buscar"
-
-#: html/Search/Bulk.html:126
-msgid "Add comments or replies to selected tickets"
-msgstr "Adicionar comentários ou respostas aos tíquetes selecionados"
-
-#: html/Admin/Groups/Members.html:65 html/User/Groups/Members.html:62
-msgid "Add members"
-msgstr "Adicionar membros"
-
-#: html/Admin/Queues/People.html:89 html/Ticket/Elements/AddWatchers:51
-msgid "Add new watchers"
-msgstr "Adicionar novos observadores"
-
-#: html/Search/Build.html:87
-msgid "Add these terms to your search"
-msgstr "Adicionar estes termos à sua busca"
-
-#: html/Search/Bulk.html:160
-msgid "Add values"
-msgstr "Adicionar valores"
-
-#: lib/RT/CustomField_Overlay.pm:110
-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 "AddNextState"
-
-#: lib/RT/Queue_Overlay.pm:765
-#. ($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:1457
-#. ($self->loc($args{'Type'}))
-msgid "Added principal as a %1 for this ticket"
-msgstr "Usuário/Grupo adicionado como um %1 deste tíquete"
-
-#: html/Admin/Users/Modify.html:149 html/User/Prefs.html:135
-msgid "Address1"
-msgstr "Endereço 1"
-
-#: html/Admin/Users/Modify.html:154 html/User/Prefs.html:139
-msgid "Address2"
-msgstr "Endereço 2"
-
-#: html/Ticket/Create.html:100
-msgid "Admin Cc"
-msgstr "Admin Cc"
-
-#: etc/initialdata:295
-msgid "Admin Comment"
-msgstr "Comentário do Administrador"
-
-#: etc/initialdata:274
-msgid "Admin Correspondence"
-msgstr "Correspondência do Administrador"
-
-#: html/Admin/Queues/index.html:48 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"
-
-#: html/Admin/Global/index.html:49 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 uma fila"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminAllPersonalGroups"
-msgstr "AdminAllPersonalGroups"
-
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:62 lib/RT/ACE_Overlay.pm:115
-msgid "AdminCc"
-msgstr "AdminCc"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminComment"
-msgstr "ComentarioAdministrador"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCorrespondence"
-msgstr "CorrespondenciaAdministrador"
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "AdminCustomField"
-msgstr "AdministrarCampoPersonalizado"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCustomFields"
-msgstr "AdministrarCamposPersonalizados"
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "AdminGroup"
-msgstr "AdministrarGrupo"
-
-#: lib/RT/Group_Overlay.pm:167
-msgid "AdminGroupMembership"
-msgstr "AdministrarAfiliacaoGrupop"
-
-#: lib/RT/System.pm:82
-msgid "AdminOwnPersonalGroups"
-msgstr "AdminOwnPersonalGroups"
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "AdminQueue"
-msgstr "AdministrarFila"
-
-#: lib/RT/System.pm:83
-msgid "AdminUsers"
-msgstr "AdministrarUsuários"
-
-#: html/Admin/Queues/People.html:71 html/Ticket/Elements/EditPeople:77
-msgid "Administrative Cc"
-msgstr "Cc Administrativo"
-
-#: NOT FOUND IN SOURCE
-msgid "Admins"
-msgstr "Administradores"
-
-#: html/Ticket/Elements/Tabs:218
-msgid "Advanced"
-msgstr "Avançado"
-
-#: NOT FOUND IN SOURCE
-msgid "Advanced Search"
-msgstr "Busca avançada"
-
-#: html/Elements/SelectDateRelation:59
-msgid "After"
-msgstr "Depois de"
-
-#: NOT FOUND IN SOURCE
-msgid "Age"
-msgstr "Idade"
-
-#: html/Search/Elements/PickCriteria:54
-msgid "Aggregator"
-msgstr "Agregador"
-
-#: NOT FOUND IN SOURCE
-msgid "Alias for"
-msgstr "Aliás para"
-
-#: etc/initialdata:363
-msgid "All Approvals Passed"
-msgstr "Todas as Aprovações Concedidas"
-
-#: NOT FOUND IN SOURCE
-msgid "All Custom Fields"
-msgstr "Todos os Campos Personalizados"
-
-#: html/Admin/Queues/index.html:77
-msgid "All Queues"
-msgstr "Todas as filas"
-
-#: 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"
-
-#: html/Search/Elements/EditQuery:58
-msgid "And/Or"
-msgstr "E/Ou"
-
-#: html/Admin/CustomFields/Modify.html:75 html/Admin/Elements/CustomFieldTabs:85
-msgid "Applies to"
-msgstr "Aplica-se a"
-
-#: html/Search/Edit.html:66
-msgid "Apply"
-msgstr "Aplicar"
-
-#: html/Search/Edit.html:66
-msgid "Apply your changes"
-msgstr "Aplicar suas alterações"
-
-#: html/Elements/Tabs:80
-msgid "Approval"
-msgstr "Aprovação"
-
-#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:65 html/Approvals/index.html:88
-#. ($ticket->id, $msg)
-#. ($Ticket->Id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "Approval #%1: %2"
-msgstr "Aprovação #%1: %2"
-
-#: 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"
-
-#: 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:351
-msgid "Approval Passed"
-msgstr "Aprovação Concedida"
-
-#: etc/initialdata:374
-msgid "Approval Rejected"
-msgstr "Aprovação Rejeitada"
-
-#: NOT FOUND IN SOURCE
-msgid "Approval diagram"
-msgstr "Diagrama da aprovação"
-
-#: html/Approvals/Elements/Approve:71
-msgid "Approve"
-msgstr "Aprove"
-
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "Anotações do aprovador: %1"
-
-#: lib/RT/Date.pm:446
-msgid "Apr."
-msgstr "Abr."
-
-#: NOT FOUND IN SOURCE
-msgid "April"
-msgstr "Abril"
-
-#: html/Search/Elements/DisplayOptions:83
-msgid "Asc"
-msgstr ""
-
-#: 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"
-
-#: html/Search/Bulk.html:144 html/SelfService/Update.html:89 html/Ticket/ModifyAll.html:117 html/Ticket/Update.html:118
-msgid "Attach"
-msgstr "Anexar"
-
-#: html/SelfService/Create.html:94 html/Ticket/Create.html:145
-msgid "Attach file"
-msgstr "Anexar arquivo"
-
-#: html/SelfService/Update.html:77 html/Ticket/Create.html:133 html/Ticket/Update.html:96
-msgid "Attached file"
-msgstr "Arquivo anexado"
-
-#: html/Ticket/ShowEmailRecord.html:54 html/Ticket/ShowEmailRecord.html:58 html/Ticket/ShowEmailRecord.html:61
-#. ($Attachment)
-msgid "Attachment '%1' could not be loaded"
-msgstr "Arquivo anexo '%1' não pôde ser carregado"
-
-#: lib/RT/Transaction_Overlay.pm:510
-msgid "Attachment created"
-msgstr "Arquivo anexo criado"
-
-#: lib/RT/Tickets_Overlay.pm:2061
-msgid "Attachment filename"
-msgstr "Nome do arquivo anexo"
-
-#: html/Ticket/Elements/ShowAttachments:49
-msgid "Attachments"
-msgstr "Arquivos anexos"
-
-#: lib/RT/Attributes_Overlay.pm:173
-msgid "Attribute Deleted"
-msgstr "Atributo Removido"
-
-#: lib/RT/Date.pm:450
-msgid "Aug."
-msgstr "Ago."
-
-#: NOT FOUND IN SOURCE
-msgid "August"
-msgstr "Agosto"
-
-#: NOT FOUND IN SOURCE
-msgid "AuthSystem"
-msgstr "Sistema de autenticação"
-
-#: etc/initialdata:221
-msgid "Autoreply"
-msgstr "RespostaAutomatica"
-
-#: etc/initialdata:72
-msgid "Autoreply To Requestors"
-msgstr "Responder Automaticamente para Requisitantes"
-
-#: NOT FOUND IN SOURCE
-msgid "AutoreplyToRequestors"
-msgstr "AutoreplyToRequestors"
-
-#: html/Widgets/SelectionBox:191
-msgid "Available"
-msgstr "Disponível"
-
-#: 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 arquivo anexo inválido. Não foi possível encontrar o arquivo '%"
-"1'\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad data in %1"
-msgstr "Dados inválidos em %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 arquivo anexo. %1 deveria ser %2\\n"
-
-#: 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
-msgid "Basics"
-msgstr "Básicos"
-
-#: 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
-msgid "Be sure to save your changes"
-msgstr "Não se esqueça de salvar suas alterações"
-
-#: html/Elements/SelectDateRelation:57 lib/RT/CurrentUser.pm:363
-msgid "Before"
-msgstr "Antes de"
-
-#: NOT FOUND IN SOURCE
-msgid "Begin Approval"
-msgstr "Incício da Aprovação"
-
-#: html/Elements/Logo:49
-msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
-
-#: etc/initialdata:217
-msgid "Blank"
-msgstr "Vazio"
-
-#: html/Search/Elements/EditFormat:86
-msgid "Bold"
-msgstr "Negrito"
-
-#: NOT FOUND IN SOURCE
-msgid "Bookmarkable URL for this search"
-msgstr "URL para guardar esta busca em Favoritos"
-
-#: html/Search/Results.html:81
-msgid "Bookmarkable link"
-msgstr "Atalho para Favoritos"
-
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:71
-msgid "Brief headers"
-msgstr "Cabeçalhos resumidos"
-
-#: html/Ticket/Elements/Tabs:228
-msgid "Bulk Update"
-msgstr "Atualização em Massa"
-
-#: NOT FOUND IN SOURCE
-msgid "Bulk ticket update"
-msgstr "Atualização de tíquetes em lote"
-
-#: lib/RT/User_Overlay.pm:1855
-msgid "Can not modify system users"
-msgstr "Não é possível modificar os usuários do sistema"
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "Can this principal see this queue"
-msgstr "Este Usuário/Grupo pode ver esta fila"
-
-#: lib/RT/CustomField_Overlay.pm:382
-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"
-
-#: html/Admin/CustomFields/Objects.html:88
-#. ($Class)
-msgid "Can't find a collection class for '%1'"
-msgstr "Não foi encontrada uma classe de coleta para '%1'"
-
-#: html/Search/Build.html:288
-msgid "Can't find a saved search to work with"
-msgstr "Não foi encontrada uma busca salva para ser trabalhada"
-
-#: lib/RT/Link_Overlay.pm:161
-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"
-
-#: html/Widgets/SavedSearch:110
-#. (loc($self->{SearchType}))
-msgid "Can't save %1"
-msgstr "Não é possível salvar %1"
-
-#: html/Search/Build.html:292
-msgid "Can't save this search"
-msgstr "Não é possível salvar esta busca"
-
-#: lib/RT/Record.pm:1304 lib/RT/Record.pm:1380
-msgid "Can't specifiy both base and target"
-msgstr "Não especifique origem e destino simultaneamente"
-
-#: html/autohandler:206
-#. ($msg)
-msgid "Cannot create user: %1"
-msgstr "Não é possível criar o usuário: %1"
-
-#: html/Admin/Elements/AddCustomFieldValue:64 html/Admin/Elements/EditCustomFieldValues:60
-msgid "Category"
-msgstr "Categoria"
-
-#: 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
-msgid "Cc"
-msgstr ""
-
-#: html/SelfService/Prefs.html:54
-msgid "Change password"
-msgstr "Mudar a senha"
-
-#: html/Elements/Submit:80
-msgid "Check All"
-msgstr "Marcar Tudo"
-
-#: html/SelfService/Update.html:80 html/Ticket/Create.html:136 html/Ticket/Update.html:99
-msgid "Check box to delete"
-msgstr "Marcar caixa para remover"
-
-#: html/Admin/Elements/SelectRights:57
-msgid "Check box to revoke right"
-msgstr "Marcar caixa para revogar o direito de acesso"
-
-#: html/Elements/EditLinks:149 html/Elements/EditLinks:86 html/Elements/ShowLinks:80 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:66
-msgid "Children"
-msgstr "Filhos"
-
-#: html/NoAuth/js/util.js:203
-msgid "Choose a date"
-msgstr "Escolher uma data"
-
-#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:143
-msgid "City"
-msgstr "Cidade"
-
-#: html/Widgets/SelectionBox:214
-msgid "Clear"
-msgstr "Limpar"
-
-#: html/Elements/Submit:82
-msgid "Clear All"
-msgstr "Limpar Tudo"
-
-#: html/Helpers/CalPopup.html:53
-msgid "Close window"
-msgstr "Fechar janela"
-
-#: html/Ticket/Elements/ShowDates:70
-msgid "Closed"
-msgstr "Fechado"
-
-#: NOT FOUND IN SOURCE
-msgid "Closed requests"
-msgstr "Requisições fechadas"
-
-#: html/SelfService/Closed.html:48 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:91
-msgid "Combobox: Select or enter multiple values"
-msgstr "CaixaCombinada: Selecionar on informar múltiplos valores"
-
-#: lib/RT/CustomField_Overlay.pm:92
-msgid "Combobox: Select or enter one value"
-msgstr "CaixaCombinada: Selecionar ou informar um valor"
-
-#: lib/RT/CustomField_Overlay.pm:93
-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"
-
-#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:187
-msgid "Comment"
-msgstr "Comentar"
-
-#: html/Admin/Queues/Modify.html:81
-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 "Comente sobre os tíquetes"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "CommentOnTicket"
-msgstr "CommetarioNoTiquete"
-
-#: html/Tools/MyDay.html:67
-msgid "Comments"
-msgstr "Comentários"
-
-#: html/Ticket/ModifyAll.html:93 html/Ticket/Update.html:77
-msgid "Comments (Not sent to requestors)"
-msgstr "Comentários (não enviados aos requisitantes)"
-
-#: html/Search/Bulk.html:130
-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"
-
-#: html/Admin/Users/Modify.html:229 html/Ticket/Elements/ShowRequestor:69
-msgid "Comments about this user"
-msgstr "Comentários sobre este usuário"
-
-#: lib/RT/Transaction_Overlay.pm:655
-msgid "Comments added"
-msgstr "Comentários adicionados"
-
-#: lib/RT/Action/Generic.pm:177
-msgid "Commit Stubbed"
-msgstr "Execução Abortada"
-
-#: NOT FOUND IN SOURCE
-msgid "Compile Restrictions"
-msgstr "Compilar restrições"
-
-#: html/Admin/Elements/EditScrip:61
-msgid "Condition"
-msgstr "Condição"
-
-#: lib/RT/Scrip_Overlay.pm:186
-msgid "Condition is mandatory argument"
-msgstr "Condição é um argumento obrigatório"
-
-#: bin/rt-crontool:153
-msgid "Condition matches..."
-msgstr "Condição satisfeita..."
-
-#: lib/RT/Scrip_Overlay.pm:190
-msgid "Condition not found"
-msgstr "Condição não encontrada"
-
-#: html/Elements/Tabs:87
-msgid "Configuration"
-msgstr "Configuração"
-
-#: html/SelfService/Prefs.html:56
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: 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"
-
-#: html/Admin/Elements/ModifyTemplate:67 html/Elements/SelectAttachmentField:50 html/Ticket/ModifyAll.html:121
-msgid "Content"
-msgstr "Conteúdo"
-
-#: html/Elements/SelectAttachmentField:51
-msgid "Content-Type"
-msgstr "Tipo-de-Conteúdo"
-
-#: NOT FOUND IN SOURCE
-msgid "Coould not create group"
-msgstr "Não foi possível criar o grupo"
-
-#: html/Search/Elements/EditSearches:67
-msgid "Copy"
-msgstr "Copiar"
-
-#: etc/initialdata:286
-msgid "Correspondence"
-msgstr "Correspondência"
-
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "Endereço de correspondência"
-
-#: lib/RT/Transaction_Overlay.pm:651
-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:1682 lib/RT/Record.pm:1729
-#. ($value_msg)
-msgid "Could not add new custom field value: %1"
-msgstr "Não foi possível adicionar novo valor do campo personalizado: %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 "Não foi possível mudar o proprietário. "
-
-#: html/Admin/CustomFields/Modify.html:163
-#. ($msg)
-msgid "Could not create CustomField"
-msgstr "Não foi possível criar CampoPersonalizado"
-
-#: html/Admin/Elements/EditCustomField:115
-#. ($msg)
-msgid "Could not create CustomField: %1"
-msgstr "Não foi possível criar CampoPersonalizado: %1"
-
-#: html/User/Groups/Modify.html:100 lib/RT/Group_Overlay.pm:496 lib/RT/Group_Overlay.pm:503
-msgid "Could not create group"
-msgstr "Não foi possível criar o grupo"
-
-#: html/Admin/Global/Template.html:98 html/Admin/Queues/Template.html:95
-#. ($msg)
-msgid "Could not create template: %1"
-msgstr "Não foi possível criar o modelo: %1"
-
-#: lib/RT/Ticket_Overlay.pm:1077 lib/RT/Ticket_Overlay.pm:409
-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: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
-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:743 lib/RT/Ticket_Overlay.pm:1425
-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:804 lib/RT/Ticket_Overlay.pm:1506
-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."
-
-#: html/Admin/CustomFields/Objects.html:71
-msgid "Could not load CustomField %1"
-msgstr "Não foi possível caarregar CampoPersonalizado %1"
-
-#: html/Admin/Groups/Members.html:114 html/User/Groups/Members.html:113 html/User/Groups/Modify.html:105
-msgid "Could not load group"
-msgstr "Não foi possível carregar o grupo"
-
-#: lib/RT/SavedSearch.pm:121
-#. ($privacy)
-msgid "Could not load object for %1"
-msgstr "Não foi possível carregar objeto para %1"
-
-#: lib/RT/SavedSearch.pm:199
-msgid "Could not load search attribute"
-msgstr "Não foi possível carregar atributo de busca"
-
-#: lib/RT/Queue_Overlay.pm:763
-#. ($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:1446
-#. ($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:862
-#. ($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"
-
-#: NOT FOUND IN SOURCE
-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:193
-msgid "Could not set user info"
-msgstr "Não foi possível definir informações sobre usuário"
-
-#: lib/RT/Transaction_Overlay.pm:161
-msgid "Couldn't add attachment"
-msgstr "Não foi possível adicionar anexo"
-
-#: lib/RT/Group_Overlay.pm:1005
-msgid "Couldn't add member to group"
-msgstr "Não foi possível adicionar o membro ao grupo"
-
-#: lib/RT/Record.pm:1741 lib/RT/Record.pm:1793
-#. ($Msg)
-msgid "Couldn't create a transaction: %1"
-msgstr "Não foi possível criar uma transação: %1"
-
-#: 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 encontrei o grupo\\n"
-
-#: lib/RT/Record.pm:970
-msgid "Couldn't find row"
-msgstr "Não foi possível encontrar o registro"
-
-#: lib/RT/Group_Overlay.pm:979
-msgid "Couldn't find that principal"
-msgstr "Não foi possível encontrar este usuário/grupo"
-
-#: lib/RT/CustomField_Overlay.pm:412
-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:147
-#. ($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"
-
-#: html/Admin/CustomFields/UserRights.html:151
-#. ($id)
-msgid "Couldn't load Class %1"
-msgstr "Não foi possível carregar Classe %1"
-
-#: html/Admin/CustomFields/GroupRights.html:109
-#. ($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 os KeywordSelects."
-
-#: 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:2018
-#. ($self->Id)
-msgid "Couldn't load copy of ticket #%1."
-msgstr "Não foi possível carregar cópia do tíquete #%1."
-
-#: html/Admin/Groups/GroupRights.html:111 html/Admin/Groups/UserRights.html:98
-#. ($id)
-msgid "Couldn't load group %1"
-msgstr "Não foi possível carregar o grupo %1"
-
-#: lib/RT/Link_Overlay.pm:204 lib/RT/Link_Overlay.pm:213 lib/RT/Link_Overlay.pm:240
-msgid "Couldn't load link"
-msgstr "Não foi possível carregar o vínculo"
-
-#: html/Admin/Elements/ObjectCustomFields:85 html/Admin/Queues/CustomFields.html:61 html/Admin/Users/CustomFields.html:61
-#. ($id)
-msgid "Couldn't load object %1"
-msgstr "Não foi possível carregar objeto %1"
-
-#: html/Admin/Queues/People.html:144
-#. ($id)
-msgid "Couldn't load queue"
-msgstr "Não foi possível carregar a fila"
-
-#
-#: html/Admin/Queues/GroupRights.html:124 html/Admin/Queues/UserRights.html:95
-#. ($id)
-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"
-
-#: html/Admin/Elements/EditScrip:128 html/Admin/Elements/EditScrip:169
-#. ($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"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load that user (%1)"
-msgstr "Não foi possível carregar este usuário (%1)"
-
-#
-#: html/SelfService/Display.html:160 lib/RT/Action/CreateTickets.pm:682
-#. ($id)
-msgid "Couldn't load ticket '%1'"
-msgstr "Não foi possível carregar o tíquete '%1'"
-
-#: lib/RT/Ticket_Overlay.pm:2646
-#. ($args{'URI'})
-msgid "Couldn't resolve '%1' into a URI."
-msgstr "Não foi possível resolver '%1' dentro de uma URI."
-
-#: html/Admin/Users/Modify.html:176 html/User/Prefs.html:155
-msgid "Country"
-msgstr "País"
-
-#: html/Admin/Elements/CreateUserCalled:49 html/Admin/Elements/EditCustomField:86 html/Admin/Elements/EditScrip:135 html/Admin/Queues/Template.html:68 html/Elements/QuickCreate:67 html/Ticket/Create.html:170 html/Ticket/Create.html:237
-msgid "Create"
-msgstr "Criar"
-
-#: etc/initialdata:135
-msgid "Create Tickets"
-msgstr "Criar Tíquetes"
-
-#: html/Admin/CustomFields/Modify.html:152 html/Admin/Elements/EditCustomField:98
-msgid "Create a CustomField"
-msgstr "Criar um CampoPersonalizado"
-
-#: html/Admin/Queues/CustomField.html:71
-#. ($QueueObj->Name())
-msgid "Create a CustomField for queue %1"
-msgstr "Criar um Campo Personalizado para a fila %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a CustomField that applies to all queues"
-msgstr "Criar um Campo Personalizado para todas as filas"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new Custom Field"
-msgstr "Criar um novo Campo Personalizado"
-
-#: 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"
-
-#: html/Admin/Groups/Modify.html:105 html/Admin/Groups/Modify.html:131
-msgid "Create a new group"
-msgstr "Criar um novo grupo"
-
-#: html/User/Groups/Modify.html:115 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"
-
-#: html/Ticket/Create.html:49 html/Ticket/Create.html:53 html/Ticket/Create.html:62
-msgid "Create a new ticket"
-msgstr "Criar um novo tíquete"
-
-#: html/Admin/Users/Modify.html:256 html/Admin/Users/Modify.html:318
-msgid "Create a new user"
-msgstr "Criar um novo usuário"
-
-#: html/Admin/Queues/Modify.html:127
-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"
-
-#: html/Admin/Queues/Scrip.html:91
-#. ($QueueObj->Name)
-msgid "Create a scrip for queue %1"
-msgstr "Criar um scrip para a fila %1"
-
-#: html/Admin/Global/Template.html:92 html/Admin/Queues/Template.html:88
-msgid "Create a template"
-msgstr "Criar um modelo"
-
-#: html/SelfService/Create.html:48 html/SelfService/CreateTicketInQueue.html:48
-msgid "Create a ticket"
-msgstr "Criar um tíquete"
-
-#: 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:137
-msgid "Create new tickets based on this scrip's template"
-msgstr "Criar novos tíquetes baseados no modelo deste scrip"
-
-#: html/SelfService/Create.html:107
-msgid "Create ticket"
-msgstr "Criar um tíquete"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "Create tickets in this queue"
-msgstr "Criar tíquetes nesta fila"
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "Create, delete and modify custom fields"
-msgstr "Criar, remover e modificar campos personalizados"
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "Create, delete and modify queues"
-msgstr "Criar, remover e modificar filas"
-
-#: NOT FOUND IN SOURCE
-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:82
-msgid "Create, delete and modify the members of personal groups"
-msgstr "Criar, remover e modificar os membros de grupos pessoais"
-
-#: lib/RT/System.pm:83
-msgid "Create, delete and modify users"
-msgstr "Criar, remover e modificar usuários"
-
-#: lib/RT/System.pm:89
-msgid "CreateSavedSearch"
-msgstr "CriarBuscaSalva"
-
-#
-#: lib/RT/Queue_Overlay.pm:111
-msgid "CreateTicket"
-msgstr "CriarTiquete"
-
-#: html/Elements/SelectDateType:49 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1171
-msgid "Created"
-msgstr "Criado"
-
-#: html/Admin/CustomFields/Modify.html:165 html/Admin/Elements/EditCustomField:119
-#. ($CustomFieldObj->Name())
-msgid "Created CustomField %1"
-msgstr "CampoPersonalizado %1 criado"
-
-#: html/Tools/Reports/Elements/Tabs:65
-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"
-
-#: html/Tools/Reports/CreatedByDates.html:54
-msgid "Created tickets in period, grouped by status"
-msgstr "Tíquetes criados no período, agrupados por estado"
-
-#: html/Search/Elements/PickBasics:104
-msgid "Creator"
-msgstr "Criador"
-
-#: html/Elements/EditLinks:51
-msgid "Current Links"
-msgstr "Relações atuais"
-
-#
-#: html/Admin/Elements/EditScrips:53
-msgid "Current Scrips"
-msgstr "Scrips Atuais"
-
-#: html/Admin/Groups/Members.html:62 html/User/Groups/Members.html:65
-msgid "Current members"
-msgstr "Membros atuais"
-
-#: html/Admin/Elements/SelectRights:53
-msgid "Current rights"
-msgstr "Direitos de acesso atuais"
-
-#: 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"
-
-#: html/Admin/Queues/People.html:64 html/Ticket/Elements/EditPeople:68
-msgid "Current watchers"
-msgstr "Observadores atuais"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom Field #%1"
-msgstr "Campo Personalizado #%1"
-
-#: 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
-msgid "Custom Fields"
-msgstr "Campos Personalizados"
-
-#: html/Admin/CustomFields/index.html:62
-#. ($lookup)
-msgid "Custom Fields for %1"
-msgstr "Campos Personalizados para %1"
-
-#
-#: html/Admin/Elements/EditScrip:109
-msgid "Custom action cleanup code"
-msgstr "Código de finalização de ação personalizada"
-
-#
-#: html/Admin/Elements/EditScrip:105
-msgid "Custom action preparation code"
-msgstr "Código de preparação de ação personalizada"
-
-#
-#: html/Admin/Elements/EditScrip:101
-msgid "Custom condition"
-msgstr "Condição personalizada"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field %1 %2 %3"
-msgstr "Campo personalizado %1 %2 %3"
-
-#
-#: lib/RT/Tickets_Overlay.pm:2540
-#. ($CF->Name)
-msgid "Custom field %1 has a value."
-msgstr "Campo personalizado %1 tem um valor."
-
-#
-#: lib/RT/Tickets_Overlay.pm:2536
-#. ($CF->Name)
-msgid "Custom field %1 has no value."
-msgstr "Campo personalizado %1 não tem valor."
-
-#: lib/RT/Record.pm:1614 lib/RT/Record.pm:1776
-#. ($args{'Field'})
-msgid "Custom field %1 not found"
-msgstr "Campo personalizado %1 não encontrado"
-
-#: lib/RT/Report/Tickets.pm:120 lib/RT/Report/Tickets.pm:123
-#. ($cf)
-#. ($obj->Name)
-msgid "Custom field '%1'"
-msgstr "Campo prsonalizado '%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:1160
-#. ($args{'Content'}, $self->Name)
-msgid "Custom field value %1 could not be found for custom field %2"
-msgstr "Valor de campo %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 "O valor do campo personalizado foi mudado de %1 para %2"
-
-#: lib/RT/CustomField_Overlay.pm:422
-msgid "Custom field value could not be deleted"
-msgstr "Valor do campo personalizado não pôde ser removido"
-
-#: lib/RT/CustomField_Overlay.pm:1172
-msgid "Custom field value could not be found"
-msgstr "Valor de campo personalizado não pôde ser encontrado"
-
-#: lib/RT/CustomField_Overlay.pm:1174 lib/RT/CustomField_Overlay.pm:420
-msgid "Custom field value deleted"
-msgstr "Valor do campo personalizado removido"
-
-#: html/Elements/SelectGroups:53 html/Elements/SelectUsers:53 lib/RT/Transaction_Overlay.pm:659
-msgid "CustomField"
-msgstr "CampoPersonalizado"
-
-#: html/Prefs/MyRT.html:80 html/Prefs/Quicksearch.html:72 html/Prefs/Search.html:77
-msgid "Customize"
-msgstr "Personalizar"
-
-#: NOT FOUND IN SOURCE
-msgid "Data error"
-msgstr "Erro de dado"
-
-#: 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
-msgid "Dates"
-msgstr "Datas"
-
-#: lib/RT/Date.pm:454
-msgid "Dec."
-msgstr "Dez."
-
-#: NOT FOUND IN SOURCE
-msgid "December"
-msgstr "Dezembro"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Autoresponse Template"
-msgstr "Modelo Padrão de RespostaAutomatica"
-
-#: etc/initialdata:222
-msgid "Default Autoresponse template"
-msgstr "Modelo Padrão de RespostaAutomatica"
-
-#: html/Tools/Offline.html:63
-msgid "Default Queue"
-msgstr "Fila Padrão"
-
-#: html/Tools/Offline.html:72
-msgid "Default Requestor"
-msgstr "Requisitante Padrão"
-
-#: etc/initialdata:296
-msgid "Default admin comment template"
-msgstr "Modelo padrão de comentário administrativo"
-
-#: etc/initialdata:275
-msgid "Default admin correspondence template"
-msgstr "Modelo padrão de correspondência administrativa"
-
-#: etc/initialdata:287
-msgid "Default correspondence template"
-msgstr "Modelo padrão de correspondência"
-
-#: etc/initialdata:253
-msgid "Default transaction template"
-msgstr "Modelo padrão de transação"
-
-#: NOT FOUND IN SOURCE
-msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "Padrão: %1/%2 mudou de %3 para %4"
-
-#: html/User/Delegation.html:48 html/User/Delegation.html:51
-msgid "Delegate rights"
-msgstr "Delegar direitos de acesso"
-
-#: lib/RT/System.pm:86
-msgid "Delegate specific rights which have been granted to you."
-msgstr "Delegar direitos específicos que foram outorgados a você."
-
-#: lib/RT/System.pm:86
-msgid "DelegateRights"
-msgstr "DelegateRights"
-
-#: html/User/Elements/Tabs:61
-msgid "Delegation"
-msgstr "Delegação"
-
-#: html/Admin/Elements/EditScrips:77 html/Search/Elements/EditFormat:105 html/Search/Elements/EditQuery:59 html/Search/Elements/EditSearches:65 html/Widgets/SelectionBox:212
-msgid "Delete"
-msgstr "Remover"
-
-#: html/Admin/Elements/EditTemplates:81
-msgid "Delete Template"
-msgstr "Remover Modelo"
-
-#: lib/RT/SavedSearch.pm:222
-#. ($msg)
-msgid "Delete failed: %1"
-msgstr "Remoção falhou: %1"
-
-#: html/Admin/Elements/EditScrips:76
-msgid "Delete selected scrips"
-msgstr "Remover scrips selecionados"
-
-#: lib/RT/Queue_Overlay.pm:116
-msgid "Delete tickets"
-msgstr "Remover tíquetes"
-
-#: html/Search/Bulk.html:161
-msgid "Delete values"
-msgstr "Remover valores"
-
-#: lib/RT/Queue_Overlay.pm:116
-msgid "DeleteTicket"
-msgstr "DeleteTicket"
-
-#: lib/RT/SavedSearch.pm:220
-msgid "Deleted search"
-msgstr "Busca removida"
-
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object could break referential integrity"
-msgstr "Ao remover este objeto você pode quebrar a integridade referencial"
-
-#: lib/RT/Queue_Overlay.pm:396
-msgid "Deleting this object would break referential integrity"
-msgstr "A remoção deste objeto quebra a integridade referencial"
-
-#: lib/RT/User_Overlay.pm:514
-msgid "Deleting this object would violate referential integrity"
-msgstr "A remoção deste objeto viola a integridade referencial"
-
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object would violate referential integrity."
-msgstr "Remover este objeto violaria a integridade referencial"
-
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object would violate referential integrity. That's bad."
-msgstr "Remover este objeto violaria a integridade referencial. Isto é mau."
-
-#: html/Approvals/Elements/Approve:75
-msgid "Deny"
-msgstr "Negar"
-
-#: 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
-msgid "Depended on by"
-msgstr "Dependem deste tíquete"
-
-#: NOT FOUND IN SOURCE
-msgid "Dependencies: \\n"
-msgstr "Dependências: \\n"
-
-#: lib/RT/Transaction_Overlay.pm:739
-#. ($value)
-msgid "Dependency by %1 added"
-msgstr "Dependência por %1 adicionada"
-
-#: lib/RT/Transaction_Overlay.pm:779
-#. ($value)
-msgid "Dependency by %1 deleted"
-msgstr "Dependência por %1 removida"
-
-#: lib/RT/Transaction_Overlay.pm:736
-#. ($value)
-msgid "Dependency on %1 added"
-msgstr "Dependência de %1 adicionada"
-
-#: lib/RT/Transaction_Overlay.pm:776
-#. ($value)
-msgid "Dependency on %1 deleted"
-msgstr "Dependência de %1 removida"
-
-#: 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
-msgid "Depends on"
-msgstr "Depende de"
-
-#: NOT FOUND IN SOURCE
-msgid "DependsOn"
-msgstr "DependeDe"
-
-#: html/Search/Elements/DisplayOptions:88
-msgid "Desc"
-msgstr ""
-
-#: html/Elements/SelectSortOrder:58
-msgid "Descending"
-msgstr "Descendente"
-
-#: html/SelfService/Create.html:102 html/Ticket/Create.html:154
-msgid "Describe the issue below"
-msgstr "Descreva o problema abaixo"
-
-#: 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
-msgid "Description"
-msgstr "Descrição"
-
-#: NOT FOUND IN SOURCE
-msgid "Details"
-msgstr "Detalhes"
-
-#: html/Search/Elements/EditFormat:73 html/Ticket/Elements/Tabs:110
-msgid "Display"
-msgstr "Mostrar"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "Display Access Control List"
-msgstr "Mostrar Lista de Controle de Acesso"
-
-#: html/Search/Elements/DisplayOptions:48
-msgid "Display Columns"
-msgstr "Mostrar Colunas"
-
-#: lib/RT/Queue_Overlay.pm:101
-msgid "Display Scrip templates for this queue"
-msgstr "Mostrar os modelos de Scrip desta fila"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "Display Scrips for this queue"
-msgstr "Mostrar os Scrips desta fila"
-
-#: html/Ticket/Elements/ShowHistory:61
-msgid "Display mode"
-msgstr "Modo de apresentação"
-
-#: lib/RT/Group_Overlay.pm:170
-msgid "Display saved searches for this group"
-msgstr "Mostrar buscas salvas deste grupo"
-
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "Apresentar o tíquete #%1"
-
-#: html/Elements/Footer:63
-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:77
-msgid "Do anything and everything"
-msgstr "Fazer qualquer coisa"
-
-#: 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 mostrar resultados da busca"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:84
-msgid "Download"
-msgstr "Baixar"
-
-#: html/Admin/Groups/index.html:63 html/Admin/Users/index.html:66
-msgid "Download as a tab-delimited file"
-msgstr "Baixar como um arquivo com campos delimitados por tabulação"
-
-#: 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
-msgid "Due"
-msgstr "Vencido"
-
-#: NOT FOUND IN SOURCE
-msgid "Due date '%1' could not be parsed"
-msgstr "A data de vencimento '%1' não pôde ser entendida"
-
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "ERRO: Não foi possível carregar o tíquete '%1': %2.\\n"
-
-#: html/Elements/Quicksearch:50 html/Elements/ShowSearch:51 html/index.html:109
-msgid "Edit"
-msgstr "Editar"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Conditions"
-msgstr "Editar Condições"
-
-#: html/Search/Bulk.html:151
-msgid "Edit Custom Fields"
-msgstr "Editar Campos Personalizados"
-
-#: html/Admin/Elements/ObjectCustomFields:94 html/Admin/Queues/CustomFields.html:66 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:56
-msgid "Edit Custom Fields for all groups"
-msgstr "Editar Campos Personalizados para todos os grupos"
-
-#: html/Admin/Global/CustomFields/Users.html:56
-msgid "Edit Custom Fields for all users"
-msgstr "Editar Campos Personalizados para todos os usuários"
-
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:56 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"
-
-#: html/Search/Bulk.html:190 html/Ticket/ModifyLinks.html:59
-msgid "Edit Links"
-msgstr "Editar Vínculos"
-
-#: html/Search/Edit.html:70
-msgid "Edit Query"
-msgstr "Editar Consulta"
-
-#: html/Ticket/Elements/Tabs:216
-msgid "Edit Search"
-msgstr "Editar Busca"
-
-#: 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:169
-msgid "Edit saved searches for this group"
-msgstr "Editar buscas salvas deste grupo"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit scrips"
-msgstr "Editar scrips"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:62 html/Admin/Global/index.html:69
-msgid "Edit system templates"
-msgstr "Editar os modelos do sistema"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit templates for %1"
-msgstr "Editar os modelos para %1"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "EditSavedSearches"
-msgstr "EditBuscasSalvas"
-
-#: html/Admin/Queues/Modify.html:142
-#. ($QueueObj->Name)
-msgid "Editing Configuration for queue %1"
-msgstr "Editando a configuração para a fila %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Editing Configuration for user %1"
-msgstr "Editando a configuração para o usuário %1"
-
-#: html/Admin/CustomFields/Modify.html:169 html/Admin/Elements/EditCustomField:122
-#. ($CustomFieldObj->Name())
-msgid "Editing CustomField %1"
-msgstr "Editando o campo %1"
-
-#: html/Admin/Groups/Members.html:55
-#. ($Group->Name)
-msgid "Editing membership for group %1"
-msgstr "Editando afiliados do grupo %1"
-
-#: 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 o modelo %1"
-
-#: lib/RT/Record.pm:1317 lib/RT/Record.pm:1394 lib/RT/Ticket_Overlay.pm:2521 lib/RT/Ticket_Overlay.pm:2611
-msgid "Either base or target must be specified"
-msgstr "Você deve especificar a origem ou o destinatário"
-
-#: html/Admin/Users/Modify.html:76 html/Ticket/Elements/AddWatchers:79 html/User/Prefs.html:67
-msgid "Email"
-msgstr "E-mail"
-
-#: lib/RT/User_Overlay.pm:237
-msgid "Email address in use"
-msgstr "O endereço de e-mail já está em uso"
-
-#: NOT FOUND IN SOURCE
-msgid "EmailAddress"
-msgstr "Correio Eletrônico"
-
-#: NOT FOUND IN SOURCE
-msgid "EmailEncoding"
-msgstr "CodificaçãoDeE-mail"
-
-#: html/Admin/CustomFields/Modify.html:100 html/Admin/Elements/EditCustomField:74
-msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "Ativo (Desmarcar esta caixa desativa este campo personalizado)"
-
-#: html/Admin/Groups/Modify.html:89 html/User/Groups/Modify.html:76
-msgid "Enabled (Unchecking this box disables this group)"
-msgstr "Ativo (Desmarcar esta caixa desativa este grupo)"
-
-#: html/Admin/Queues/Modify.html:107
-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 Habilitados"
-
-#: html/Admin/Queues/index.html:80
-msgid "Enabled Queues"
-msgstr "Filas Ativas"
-
-#: html/Admin/Elements/EditCustomField:138 html/Admin/Groups/Modify.html:156 html/Admin/Users/Modify.html:354 html/User/Groups/Modify.html:140
-#. (loc_fuzzy($msg))
-msgid "Enabled status %1"
-msgstr "Estado %1 ativado"
-
-#: html/Admin/CustomFields/Modify.html:187 html/Admin/Queues/Modify.html:164
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr "Ativado estado: %1"
-
-#: lib/RT/CustomField_Overlay.pm:66
-msgid "Enter multiple values"
-msgstr "Informar valores múltiplos"
-
-#: 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:67
-msgid "Enter one value"
-msgstr "Informar um valor"
-
-#: html/Elements/EditLinks:124
-msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
-msgstr "Informar filas ou URIs para ligar às filas. Separar entradas múltiplas com espaço."
-
-#: html/Elements/EditLinks:120 html/Search/Bulk.html:191
-msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr "Informar identificadores de tíquete ou URIs que levam ao tíquete. Separar entradas mútiplas com espaço."
-
-#: lib/RT/CustomField_Overlay.pm:68
-msgid "Enter up to %1 values"
-msgstr "Informar até %1 valores"
-
-#: html/Elements/Login:78 html/SelfService/Error.html:48 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:674
-msgid "Error in parameters to Queue->AddWatcher"
-msgstr "Erro nos parâmetros para Queue->AddWatcher"
-
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Queue->DelWatcher"
-msgstr "Erro nos parâmetros para Queue->DelWatcher"
-
-#: lib/RT/Queue_Overlay.pm:835
-msgid "Error in parameters to Queue->DeleteWatcher"
-msgstr "Erro em parâmetros para Fila->RemoverObservador"
-
-#: lib/RT/Ticket_Overlay.pm:1374
-msgid "Error in parameters to Ticket->AddWatcher"
-msgstr "Erro nos parâmetros para Ticket->AddWatcher"
-
-#: NOT FOUND IN SOURCE
-msgid "Error in parameters to Ticket->DelWatcher"
-msgstr "Erro nos parâmetros para Ticket->DelWatcher"
-
-#: lib/RT/Ticket_Overlay.pm:1540
-msgid "Error in parameters to Ticket->DeleteWatcher"
-msgstr "Erro em parâmetros para Tíquete->RemoverObservador"
-
-#: bin/rt-crontool:287
-msgid "Escalate tickets"
-msgstr "Escalonar tíquetes"
-
-#: html/Ticket/Elements/ShowBasics:59
-msgid "Estimated"
-msgstr "Estimado"
-
-#: etc/initialdata:20
-msgid "Everyone"
-msgstr "Todos"
-
-#: bin/rt-crontool:273
-msgid "Example:"
-msgstr "Exemplo:"
-
-#: html/Admin/Users/Modify.html:101
-msgid "Extra info"
-msgstr "Informação adicional"
-
-#: lib/RT/SavedSearch.pm:179
-msgid "Failed to create search attribute"
-msgstr "Falha ao criar atributo de busca"
-
-#: lib/RT/User_Overlay.pm:378
-msgid "Failed to find 'Privileged' users pseudogroup."
-msgstr "Não foi possível encontrar o pseudogrupo de usuários 'Privileged'."
-
-#: lib/RT/User_Overlay.pm:385
-msgid "Failed to find 'Unprivileged' users pseudogroup"
-msgstr "Não foi possível encontrar o pseudogrupo de usuários 'Unprivileged'"
-
-#: bin/rt-crontool:208
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr "Falha ao carregar o módulo %1. (%2)"
-
-#: lib/RT/SavedSearch.pm:154
-#. ($privacy)
-msgid "Failed to load object for %1"
-msgstr "Falha ao carregar objeto para %1"
-
-#: lib/RT/Date.pm:444
-msgid "Feb."
-msgstr "Fev."
-
-#: NOT FOUND IN SOURCE
-msgid "February"
-msgstr "Fevereiro"
-
-#: html/Elements/SelectAttachmentField:52
-msgid "Filename"
-msgstr "Nome de arquivo"
-
-#: lib/RT/CustomField_Overlay.pm:71
-msgid "Fill in multiple text areas"
-msgstr "Preencher múltiplas áreas de texto"
-
-#: lib/RT/CustomField_Overlay.pm:76
-msgid "Fill in multiple wikitext areas"
-msgstr "Preencher múltiplas áreas de texto wiki"
-
-#: lib/RT/CustomField_Overlay.pm:72
-msgid "Fill in one text area"
-msgstr "Preencher uma única área de texto"
-
-#: lib/RT/CustomField_Overlay.pm:77
-msgid "Fill in one wikitext area"
-msgstr "Preencher uma única [area de texto wiki"
-
-#: html/Admin/CustomFields/Modify.html:109 html/Admin/CustomFields/Modify.html:120
-msgid "Fill in this field with a URL."
-msgstr "Preencher este campo com uma URL."
-
-#: lib/RT/CustomField_Overlay.pm:73
-msgid "Fill in up to %1 text areas"
-msgstr "Preencher até %1 áreas de texto"
-
-#: lib/RT/CustomField_Overlay.pm:78
-msgid "Fill in up to %1 wikitext areas"
-msgstr "Preencher at[e %1 áreas de texto wiki"
-
-#: html/Search/Elements/PickBasics:151 html/Ticket/Create.html:184 html/Ticket/Elements/EditBasics:99 lib/RT/Tickets_Overlay.pm:1957
-msgid "Final Priority"
-msgstr "Prioridade Final"
-
-#: lib/RT/Ticket_Overlay.pm:1166
-msgid "FinalPriority"
-msgstr "PrioridadeFinal"
-
-#: NOT FOUND IN SOURCE
-msgid "Find group whose"
-msgstr "Encontrar grupo que"
-
-#: html/Admin/Groups/index.html:74 html/Admin/Queues/People.html:84 html/Ticket/Elements/EditPeople:57
-msgid "Find groups whose"
-msgstr "Encontrar grupos que"
-
-#: NOT FOUND IN SOURCE
-msgid "Find new/open tickets"
-msgstr "Encontrar tíquetes novos/abertos"
-
-#: html/Admin/Queues/People.html:80 html/Admin/Users/index.html:72 html/Ticket/Elements/EditPeople:53
-msgid "Find people whose"
-msgstr "Encontrar pessoas que"
-
-#: html/Search/Results.html:149
-msgid "Find tickets"
-msgstr "Encontrar tíquetes"
-
-#: NOT FOUND IN SOURCE
-msgid "Finish Approval"
-msgstr "Terminar Aprovação"
-
-#: html/Ticket/Elements/Tabs:83
-msgid "First"
-msgstr "Primeiro"
-
-#: NOT FOUND IN SOURCE
-msgid "First page"
-msgstr "Primeira página"
-
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:764
-msgid "Foo Bar Baz"
-msgstr ""
-
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:755
-msgid "Foo!"
-msgstr ""
-
-#: html/Search/Bulk.html:85
-msgid "Force change"
-msgstr "Forçar alteração"
-
-#: html/Search/Elements/EditFormat:54
-msgid "Format"
-msgstr "Formato"
-
-#: html/Search/Results.html:147
-#. ($ticketcount)
-msgid "Found %quant(%1,ticket)"
-msgstr "Encontrado(s) %quant(%1,tíquete(s)"
-
-#: lib/RT/Record.pm:973
-msgid "Found Object"
-msgstr "Objeto Encontrado"
-
-#: lib/RT/Date.pm:423
-msgid "Fri."
-msgstr "Sex."
-
-#: html/Ticket/Elements/ShowHistory:68 html/Ticket/Elements/ShowHistory:74
-msgid "Full headers"
-msgstr "Cabeçalhos completos"
-
-#: html/Tools/Offline.html:87
-msgid "Get template from file"
-msgstr "Pegar modelo do arquivo"
-
-#: NOT FOUND IN SOURCE
-msgid "Getting the current user from a pgp sig\\n"
-msgstr "Obtendo o usuário corrente a partir de uma assinatura pgp\\n"
-
-#: lib/RT/Transaction_Overlay.pm:705
-#. ($New->Name)
-msgid "Given to %1"
-msgstr "Dado a %1"
-
-#: html/Admin/Elements/Tabs:67 html/Admin/index.html:84
-msgid "Global"
-msgstr ""
-
-#: 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"
-
-#: html/Admin/Global/CustomFields/index.html:61
-msgid "Global custom field configuration"
-msgstr "Configuração de campos personalizados globais"
-
-#: html/Admin/Global/MyRT.html:95
-#. ($pane)
-msgid "Global portlet %1 saved."
-msgstr "Portlet global %1 salvo."
-
-#: html/Admin/Elements/SelectTemplate:61
-#. (loc($Template->Name))
-msgid "Global template: %1"
-msgstr "Modelo global: %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Go"
-msgstr "Ir"
-
-#: 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
-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"
-
-#: html/Elements/GotoTicket:48 html/SelfService/Elements/GotoTicket:48
-msgid "Goto ticket"
-msgstr "Ir para o tíquete"
-
-#: html/Ticket/Elements/AddWatchers:69 html/Ticket/Elements/ShowGroupMembers:57 html/User/Elements/DelegateRights:101
-msgid "Group"
-msgstr "Grupo"
-
-#: NOT FOUND IN SOURCE
-msgid "Group %1 %2: %3"
-msgstr "Grupo %1 %2: %3"
-
-#: 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
-msgid "Group Rights"
-msgstr "Direitos de Acesso do Grupo"
-
-#: lib/RT/Group_Overlay.pm:985
-msgid "Group already has member"
-msgstr "O grupo já tem um membro"
-
-#: NOT FOUND IN SOURCE
-msgid "Group could not be created."
-msgstr "O grupo não pôde ser criado."
-
-#: html/Admin/Groups/Modify.html:115
-#. ($create_msg)
-msgid "Group could not be created: %1"
-msgstr "O grupo não pôde ser criado: %1"
-
-#: lib/RT/Group_Overlay.pm:523
-msgid "Group created"
-msgstr "Grupo criado"
-
-#: lib/RT/Group_Overlay.pm:1157
-msgid "Group has no such member"
-msgstr "O grupo não contém este membro"
-
-#: 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
-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"
-
-#: 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
-msgid "Groups"
-msgstr "Grupos"
-
-#: lib/RT/Group_Overlay.pm:991
-msgid "Groups can't be members of their members"
-msgstr "Grupos não podem ser membros de seus próprios membros"
-
-#: html/Admin/Groups/index.html:88
-msgid "Groups matching search criteria"
-msgstr "Grupos que satisfazem ao critério de busca"
-
-#: html/Ticket/Elements/ShowRequestor:79
-msgid "Groups this user belongs to"
-msgstr "Grupos a que este usuário pertence"
-
-#: lib/RT/Interface/CLI.pm:96 lib/RT/Interface/CLI.pm:96
-msgid "Hello!"
-msgstr "Olá!"
-
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:771
-#. ($name)
-msgid "Hello, %1"
-msgstr "Olá, %1"
-
-#: html/Admin/Elements/GroupTabs:72 html/Admin/Elements/UserTabs:66 html/Ticket/Elements/ShowHistory:55 html/Ticket/Elements/Tabs:113
-msgid "History"
-msgstr "Histórico"
-
-#: html/Admin/Groups/History.html:64
-#. ($GroupObj->Name)
-msgid "History of the group %1"
-msgstr "Histórico do grupo %1"
-
-#: html/Admin/Users/History.html:64
-#. ($UserObj->Name)
-msgid "History of the user %1"
-msgstr "Histórico do usuário %1"
-
-#: NOT FOUND IN SOURCE
-msgid "HomePhone"
-msgstr "Telefone Residencial"
-
-#: html/Elements/Tabs:68
-msgid "Homepage"
-msgstr "Início"
-
-#: html/Elements/SelectTimeUnits:50
-msgid "Hours"
-msgstr "Horas"
-
-#: lib/RT/Base.pm:135
-#. (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 "Tenho [quant,_1,concrete mixer]."
-
-#: html/Search/Build.html:466 lib/RT/Report/Tickets.pm:417
-msgid "I'm lost"
-msgstr "Estou perdido"
-
-#: html/Ticket/Elements/ShowBasics:50 lib/RT/Tickets_Overlay.pm:1882
-msgid "Id"
-msgstr "Identificador"
-
-#: html/Admin/Users/Modify.html:67 html/User/Prefs.html:62
-msgid "Identity"
-msgstr "Identidade"
-
-#: etc/initialdata:429
-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"
-
-#: html/Tools/Offline.html:76
-msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr ""
-"Se nenhum Requisitante for especificado, criar tíquetes com este "
-"requisitante."
-
-#: html/Tools/Offline.html:67
-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:269
-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-intecionado pode conseguir acesso administrativo sobre o RT."
-
-#: html/Admin/Queues/People.html:128 html/Ticket/Modify.html:62 html/Ticket/ModifyAll.html:130 html/Ticket/ModifyPeople.html:62
-msgid "If you've updated anything above, be sure to"
-msgstr "Se você alterou qualquer coisa acima, não se esqueça de"
-
-#: lib/RT/Record.pm:964
-msgid "Illegal value for %1"
-msgstr "Valor ilegal para %1"
-
-#: lib/RT/Record.pm:967
-msgid "Immutable field"
-msgstr "Campo imutável"
-
-#: NOT FOUND IN SOURCE
-msgid "Include disabled custom fields in listing."
-msgstr "Incluir campoas personalizados desabilitados na listagem."
-
-#: html/Admin/Groups/index.html:67
-msgid "Include disabled groups in listing."
-msgstr "Incluir grupos inativos na listagem."
-
-#: html/Admin/Queues/index.html:67
-msgid "Include disabled queues in listing."
-msgstr "Incluir filas inativas na listagem."
-
-#: html/Admin/Users/index.html:73
-msgid "Include disabled users in search."
-msgstr "Incluir usuários inativos na busca."
-
-#: html/Admin/CustomFields/Modify.html:115
-msgid "Include page"
-msgstr "Incluir página"
-
-#: html/Search/Build.html:492 lib/RT/Report/Tickets.pm:443
-msgid "Incomplete Query"
-msgstr "Consulta Incompleta"
-
-#: html/Search/Build.html:489 lib/RT/Report/Tickets.pm:440
-msgid "Incomplete query"
-msgstr "Consulta incompleta"
-
-#: html/Search/Elements/PickBasics:150 lib/RT/Tickets_Overlay.pm:1932
-msgid "Initial Priority"
-msgstr "Prioridade Inicial"
-
-#: lib/RT/Ticket_Overlay.pm:1165 lib/RT/Ticket_Overlay.pm:1167
-msgid "InitialPriority"
-msgstr "InitialPriority"
-
-#: lib/RT/ScripAction_Overlay.pm:135
-msgid "Input error"
-msgstr "Erro de entrada"
-
-#: html/Elements/ValidateCustomFields:70 lib/RT/CustomField_Overlay.pm:1024 lib/RT/CustomField_Overlay.pm:1165
-#. ($CF->FriendlyPattern)
-#. ($self->FriendlyPattern)
-msgid "Input must match %1"
-msgstr "Entrada precisa satisfazer %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Interest noted"
-msgstr "Interesse notado"
-
-#: lib/RT/Ticket_Overlay.pm:3531
-msgid "Internal Error"
-msgstr "Erro Interno"
-
-#: lib/RT/Record.pm:315
-#. ($id->{error_message})
-msgid "Internal Error: %1"
-msgstr "Erro Interno: %1"
-
-#: lib/RT/Group_Overlay.pm:670
-msgid "Invalid Group Type"
-msgstr "Tipo Inválido de Grupo"
-
-#: lib/RT/Principal_Overlay.pm:163
-msgid "Invalid Right"
-msgstr "Direito Inválido"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid Type"
-msgstr "Tipo Inválido"
-
-#: lib/RT/Record.pm:969
-msgid "Invalid data"
-msgstr "Dado inválido"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "Proprietário inválido. Usando 'nobody'."
-
-#: lib/RT/CustomField_Overlay.pm:210 lib/RT/CustomField_Overlay.pm:681
-#. ($msg)
-msgid "Invalid pattern: %1"
-msgstr "Padrão inválido: %1"
-
-#: lib/RT/Scrip_Overlay.pm:159 lib/RT/Template_Overlay.pm:246
-msgid "Invalid queue"
-msgstr "Fila inválida"
-
-#: lib/RT/ACE_Overlay.pm:266 lib/RT/ACE_Overlay.pm:275 lib/RT/ACE_Overlay.pm:281 lib/RT/ACE_Overlay.pm:292
-msgid "Invalid right"
-msgstr "Direito de acesso inválido"
-
-#: lib/RT/Record.pm:290
-#. ($key)
-msgid "Invalid value for %1"
-msgstr "Valor inválido para %1"
-
-#: lib/RT/Record.pm:1632
-msgid "Invalid value for custom field"
-msgstr "Valor inválido para campo personalizado"
-
-#: lib/RT/Ticket_Overlay.pm:426
-msgid "Invalid value for status"
-msgstr "Valor inválido para estado"
-
-#: bin/rt-crontool:270
-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:271
-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:233
-msgid "It takes several arguments:"
-msgstr "Requer vários argumentos:"
-
-#: html/Search/Elements/EditFormat:87
-msgid "Italic"
-msgstr "Itálico"
-
-#: NOT FOUND IN SOURCE
-msgid "Items pending my approval"
-msgstr "Itens requerendo minha aprovação"
-
-#: lib/RT/Date.pm:443
-msgid "Jan."
-msgstr "Jan."
-
-#: NOT FOUND IN SOURCE
-msgid "January"
-msgstr "Janeiro"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "Join or leave this group"
-msgstr "Entre ou deixe este grupo"
-
-#: lib/RT/Date.pm:449
-msgid "Jul."
-msgstr "Jul."
-
-#: NOT FOUND IN SOURCE
-msgid "July"
-msgstr "Julho"
-
-#: html/Ticket/Elements/Tabs:127
-msgid "Jumbo"
-msgstr "Jumbo"
-
-#: lib/RT/Date.pm:448
-msgid "Jun."
-msgstr "Jun."
-
-#: NOT FOUND IN SOURCE
-msgid "June"
-msgstr "Junho"
-
-#: NOT FOUND IN SOURCE
-msgid "Keyword"
-msgstr "Palavra chave"
-
-#: NOT FOUND IN SOURCE
-msgid "Lang"
-msgstr "Líng"
-
-#: html/Admin/Users/Modify.html:96 html/User/Prefs.html:78
-msgid "Language"
-msgstr "Língua"
-
-#: html/Search/Elements/EditFormat:81
-msgid "Large"
-msgstr "Grande"
-
-#: html/Ticket/Elements/Tabs:98
-msgid "Last"
-msgstr "Último"
-
-#: html/Ticket/Elements/EditDates:61 html/Ticket/Elements/ShowDates:62
-msgid "Last Contact"
-msgstr "Último Contato"
-
-#: html/Elements/SelectDateType:52
-msgid "Last Contacted"
-msgstr "Contactado em"
-
-#: NOT FOUND IN SOURCE
-msgid "Last Notified"
-msgstr "Notificado em"
-
-#: html/Elements/SelectDateType:53
-msgid "Last Updated"
-msgstr "Atualizado em"
-
-#: NOT FOUND IN SOURCE
-msgid "LastUpdated"
-msgstr "LastUpdated"
-
-#: html/Search/Elements/PickBasics:105
-msgid "LastUpdatedBy"
-msgstr "UltimaAtualizacaoPor"
-
-#: html/Ticket/Elements/ShowBasics:70
-msgid "Left"
-msgstr "Resta"
-
-#: html/Admin/Users/Modify.html:111
-msgid "Let this user access RT"
-msgstr "Deixar este usuário acessar RT"
-
-#: html/Admin/Users/Modify.html:115
-msgid "Let this user be granted rights"
-msgstr "Deixar este usuário receber direitos de acesso adicionais"
-
-#: 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"
-
-#: html/Search/Elements/EditFormat:70
-msgid "Link"
-msgstr "Vínculo"
-
-#: lib/RT/Record.pm:1328
-msgid "Link already exists"
-msgstr "O vínculo já existe"
-
-#: lib/RT/Record.pm:1342
-msgid "Link could not be created"
-msgstr "O vínculo não pôde ser criado"
-
-#: lib/RT/Record.pm:1348
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr "Vínculo criado (%1)"
-
-#: lib/RT/Record.pm:1409
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr "Vínculo removido (%1)"
-
-#: lib/RT/Record.pm:1415
-msgid "Link not found"
-msgstr "Vínculo não encontrado"
-
-#: html/Ticket/ModifyLinks.html:48 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"
-
-#: html/Admin/CustomFields/Modify.html:104
-msgid "Link values to"
-msgstr "Vincular valores a"
-
-#: lib/RT/Ticket_Overlay.pm:702
-msgid "Linking. Permission denied"
-msgstr "Vinculando. Permissão negada"
-
-#: html/Ticket/Create.html:218 html/Ticket/Elements/ShowSummary:97 html/Ticket/Elements/Tabs:122 html/Ticket/ModifyAll.html:80
-msgid "Links"
-msgstr "Vínculos"
-
-#: html/Search/Elements/EditSearches:77
-msgid "Load"
-msgstr "Carregar"
-
-#: html/Search/Elements/EditSearches:75
-msgid "Load saved search:"
-msgstr "Carregar buscas salvas:"
-
-#: lib/RT/System.pm:88
-msgid "LoadSavedSearch"
-msgstr "CarregarBuscaSalva"
-
-#: html/Admin/Tools/Configuration.html:66
-msgid "Loaded perl modules"
-msgstr "Módulos perl carregados"
-
-#: lib/RT/SavedSearch.pm:113
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr "Busca %1 carregada"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:128
-msgid "Location"
-msgstr "Localização"
-
-#: NOT FOUND IN SOURCE
-msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
-msgstr ""
-"O diretório de log %1 não foi encontrado ou não pôde ser alterado.\\n RT não "
-"pode funcionar desta maneira."
-
-#: html/Elements/Header:93
-#. ("<span>".$session{'CurrentUser'}->Name."</span>")
-msgid "Logged in as %1"
-msgstr "Assinado como %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
-msgid "Login"
-msgstr "Entrar"
-
-#: html/Elements/Header:103
-msgid "Logout"
-msgstr "Sair"
-
-#: lib/RT/CustomField_Overlay.pm:935
-msgid "Lookup type mismatch"
-msgstr "Tipo de consulta não corresponde"
-
-#: html/Search/Bulk.html:84
-msgid "Make Owner"
-msgstr "Definir como proprietário"
-
-#: html/Search/Bulk.html:108
-msgid "Make Status"
-msgstr "Definir o estado"
-
-#: html/Search/Bulk.html:116
-msgid "Make date Due"
-msgstr "Definir o prazo final"
-
-#: html/Search/Bulk.html:118
-msgid "Make date Resolved"
-msgstr "Definir a data de resolução"
-
-#: html/Search/Bulk.html:112
-msgid "Make date Started"
-msgstr "Definir a data de iniciado"
-
-#: html/Search/Bulk.html:110
-msgid "Make date Starts"
-msgstr "Definir a data início"
-
-#: html/Search/Bulk.html:114
-msgid "Make date Told"
-msgstr "Definir a data de última alteração"
-
-#: html/Search/Bulk.html:104
-msgid "Make priority"
-msgstr "Definir a prioridade"
-
-#: html/Search/Bulk.html:106
-msgid "Make queue"
-msgstr "Definir a fila"
-
-#: html/Search/Bulk.html:102
-msgid "Make subject"
-msgstr "Definir o assunto"
-
-#: lib/RT/Group_Overlay.pm:171
-msgid "Make this group visible to user"
-msgstr "Fazer este grupo visível para o usuário"
-
-#: html/Admin/index.html:80
-msgid "Manage custom fields and custom field values"
-msgstr "Gerenciar campos personalizados e valores de campos personalizados"
-
-#: html/Admin/index.html:71
-msgid "Manage groups and group membership"
-msgstr "Administrar grupos e afiliações"
-
-#: html/Admin/index.html:87
-msgid "Manage properties and configuration which apply to all queues"
-msgstr "Administrar propriedades e configurações aplicáveis a todas as filas"
-
-#: html/Admin/index.html:76
-msgid "Manage queues and queue-specific properties"
-msgstr "Administrar filas e suas propriedades específicas"
-
-#: html/Admin/index.html:66
-msgid "Manage users and passwords"
-msgstr "Administrar usuários e senhas"
-
-#: lib/RT/Date.pm:445
-msgid "Mar."
-msgstr "Mar."
-
-#: NOT FOUND IN SOURCE
-msgid "March"
-msgstr "Março"
-
-#: NOT FOUND IN SOURCE
-msgid "May"
-msgstr "Maio"
-
-#: lib/RT/Date.pm:447
-msgid "May."
-msgstr "Mai."
-
-#: lib/RT/Transaction_Overlay.pm:752
-#. ($value)
-msgid "Member %1 added"
-msgstr "Membro %1 adicionado"
-
-#: lib/RT/Transaction_Overlay.pm:792
-#. ($value)
-msgid "Member %1 deleted"
-msgstr "Membro %1 removido"
-
-#: lib/RT/Group_Overlay.pm:1002
-msgid "Member added"
-msgstr "Membro adicionado"
-
-#: lib/RT/Group_Overlay.pm:1164
-msgid "Member deleted"
-msgstr "Membro removido"
-
-#: lib/RT/Group_Overlay.pm:1168
-msgid "Member not deleted"
-msgstr "Membro não removido"
-
-#: html/Elements/SelectLinkType:49
-msgid "Member of"
-msgstr "Membro de"
-
-#: NOT FOUND IN SOURCE
-msgid "MemberOf"
-msgstr "MembroDe"
-
-#: html/Admin/Elements/GroupTabs:65 html/User/Elements/GroupTabs:65
-msgid "Members"
-msgstr "Membros"
-
-#: lib/RT/Transaction_Overlay.pm:749
-#. ($value)
-msgid "Membership in %1 added"
-msgstr "Filiação em %1 adicionada"
-
-#: lib/RT/Transaction_Overlay.pm:789
-#. ($value)
-msgid "Membership in %1 deleted"
-msgstr "Filiação em %1 removida"
-
-#: html/Admin/Elements/UserTabs:63
-msgid "Memberships"
-msgstr "Filiações"
-
-#: html/Admin/Users/Memberships.html:62
-#. ($UserObj->Name)
-msgid "Memberships of the user %1"
-msgstr "Filiações do usuário %1"
-
-#: lib/RT/Ticket_Overlay.pm:2905
-msgid "Merge Successful"
-msgstr "União bem sucedida"
-
-#: lib/RT/Ticket_Overlay.pm:2783
-msgid "Merge failed. Couldn't set EffectiveId"
-msgstr "União falhou. Não foi possível definir o EffectiveId"
-
-#: lib/RT/Ticket_Overlay.pm:2800
-msgid "Merge failed. Couldn't set Status"
-msgstr "Fusão falhou. Não foi possível definir Estado."
-
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:50
-msgid "Merge into"
-msgstr "Unir a"
-
-#: lib/RT/Transaction_Overlay.pm:755
-#. ($value)
-msgid "Merged into %1"
-msgstr "Unido ao %1"
-
-#: html/Search/Bulk.html:145 html/Ticket/Update.html:120
-msgid "Message"
-msgstr "Mensagem"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:166
-msgid "Message body not shown because it is too large or is not plain text."
-msgstr "Corpo da mensagem não mostrado porque é muito grande ou náo é um texto plano."
-
-#: lib/RT/Ticket_Overlay.pm:2454
-msgid "Message could not be recorded"
-msgstr "Mensagem não pode ser gravada"
-
-#: lib/RT/Ticket_Overlay.pm:2457
-msgid "Message recorded"
-msgstr "Mensagem gravada"
-
-#: html/Ticket/Elements/PreviewScrips:124
-msgid "Messages about this ticket will not be sent to..."
-msgstr "Mensagens sobre este tíquete não serão enviadas para..."
-
-#: html/Elements/SelectTimeUnits:49
-msgid "Minutes"
-msgstr "Minutos"
-
-#: html/Search/Build.html:496 lib/RT/Report/Tickets.pm:447
-msgid "Mismatched parentheses"
-msgstr "Parênteses sem correspondente"
-
-#: lib/RT/Record.pm:971
-msgid "Missing a primary key?: %1"
-msgstr "Faltando uma chave primária?: %1"
-
-#: html/Admin/Users/Modify.html:196 html/User/Prefs.html:94
-msgid "Mobile"
-msgstr "Móvel"
-
-#: NOT FOUND IN SOURCE
-msgid "MobilePhone"
-msgstr "Celular"
-
-#: lib/RT/Queue_Overlay.pm:96
-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"
-
-#: 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"
-
-#: 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"
-
-#: html/Admin/Global/GroupRights.html:108 html/Admin/Groups/GroupRights.html:96 html/Admin/Queues/GroupRights.html:109
-msgid "Modify Group Rights"
-msgstr "Modificar Direitos de Grupo"
-
-#: html/Admin/Groups/Members.html:107 html/User/Groups/Members.html:103
-msgid "Modify Members"
-msgstr "Modificar Membros"
-
-#: 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"
-
-#: html/Admin/Global/UserRights.html:77 html/Admin/Groups/UserRights.html:78 html/Admin/Queues/UserRights.html:77
-msgid "Modify User Rights"
-msgstr "Modificar Direitos de Usuário"
-
-#: 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"
-
-#: html/Admin/Queues/Scrip.html:84
-#. ($QueueObj->Name)
-msgid "Modify a scrip for queue %1"
-msgstr "Modificar um scrip para a fila %1"
-
-#: html/Admin/Global/Scrip.html:77
-msgid "Modify a scrip that applies to all queues"
-msgstr "Modificar um scrip aplicável a todas as filas"
-
-#: html/Admin/CustomFields/Objects.html:92
-#. ($CF->Name)
-msgid "Modify associated objects for %1"
-msgstr "Modificar objetos associados a %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify dates for # %1"
-msgstr "Modificar datas para # %1"
-
-#: html/Ticket/ModifyDates.html:48 html/Ticket/ModifyDates.html:52
-#. ($TicketObj->Id)
-msgid "Modify dates for #%1"
-msgstr "Modificar as datas para #%1"
-
-#: html/Ticket/ModifyDates.html:59
-#. ($TicketObj->Id)
-msgid "Modify dates for ticket # %1"
-msgstr "Modificar as datas para o tíquete # %1"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:67 html/Admin/Global/index.html:74
-msgid "Modify global custom fields"
-msgstr "Modificar campos personalizados globais"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:72 html/Admin/Global/GroupRights.html:48 html/Admin/Global/GroupRights.html:51 html/Admin/Global/index.html:79
-msgid "Modify global group rights"
-msgstr "Modificar direitos de acesso globais de grupo"
-
-#: 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"
-
-#: html/Admin/Global/UserRights.html:48 html/Admin/Global/UserRights.html:51 html/Admin/Global/index.html:83
-msgid "Modify global user rights"
-msgstr "Modificar direitos de acesso globais de usuário"
-
-#: 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:165
-msgid "Modify group metadata or delete group"
-msgstr "Modificar metadados do grupo ou removê-lo"
-
-#: html/Admin/CustomFields/GroupRights.html:166
-#. ($CustomFieldObj->Name)
-msgid "Modify group rights for custom field %1"
-msgstr "Modificar direitos de grupo para campo personalizado %1"
-
-#: html/Admin/Groups/GroupRights.html:48 html/Admin/Groups/GroupRights.html:52 html/Admin/Groups/GroupRights.html:58
-#. ($GroupObj->Name)
-msgid "Modify group rights for group %1"
-msgstr "Modificar os direitos de acesso do grupo %1"
-
-#: html/Admin/Queues/GroupRights.html:48 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:167
-msgid "Modify membership roster for this group"
-msgstr "Modificar afiliados deste grupo"
-
-#: lib/RT/System.pm:84
-msgid "Modify one's own RT account"
-msgstr "Modificar sua própria conta RT"
-
-#: html/Admin/Queues/People.html:48 html/Admin/Queues/People.html:52
-#. ($QueueObj->Name)
-msgid "Modify people related to queue %1"
-msgstr "Modificar as pessoas relacionadas à fila %1"
-
-#: html/Ticket/ModifyPeople.html:48 html/Ticket/ModifyPeople.html:52 html/Ticket/ModifyPeople.html:59
-#. ($Ticket->id)
-#. ($Ticket->Id)
-msgid "Modify people related to ticket #%1"
-msgstr "Modificar as pessoas relacionadas ao tíquete #%1"
-
-#: html/Admin/Queues/Scrips.html:69
-#. ($QueueObj->Name)
-msgid "Modify scrips for queue %1"
-msgstr "Modificar os scrips da fila %1"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:58 html/Admin/Global/Scrips.html:67 html/Admin/Global/index.html:65
-msgid "Modify scrips which apply to all queues"
-msgstr "Modificar scrips aplicáveis a todas as filas"
-
-#: html/Admin/Global/Template.html:104 html/Admin/Global/Template.html:48 html/Admin/Global/Template.html:53 html/Admin/Queues/Template.html:101
-#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-msgid "Modify template %1"
-msgstr "Modificar o modelo %1"
-
-#: html/Admin/Global/Templates.html:67
-msgid "Modify templates which apply to all queues"
-msgstr "Modificar modelos que se aplicam a todas as filas"
-
-#: html/Admin/Global/index.html:87
-msgid "Modify the default \"RT at a glance\" view"
-msgstr "Modificar \"RT por alto\" default"
-
-#: html/Admin/Groups/Modify.html:125 html/User/Groups/Modify.html:109
-#. ($Group->Name)
-msgid "Modify the group %1"
-msgstr "Modificar o grupo %1"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "Modify the queue watchers"
-msgstr "Modificar os observadores da fila"
-
-#: html/Admin/Users/Modify.html:313
-#. ($UserObj->Name)
-msgid "Modify the user %1"
-msgstr "Modificar o usuário %1"
-
-#: html/Ticket/ModifyAll.html:60
-#. ($Ticket->Id)
-msgid "Modify ticket # %1"
-msgstr "Modificar o tíquete # %1"
-
-#: html/Ticket/Modify.html:48 html/Ticket/Modify.html:51 html/Ticket/Modify.html:57
-#. ($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"
-
-#: html/Admin/CustomFields/UserRights.html:159
-#. ($CustomFieldObj->Name)
-msgid "Modify user rights for custom field %1"
-msgstr "Modificar direitos de usuário para campo customizado %1"
-
-#: html/Admin/Groups/UserRights.html:48 html/Admin/Groups/UserRights.html:52 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"
-
-#: html/Admin/Queues/UserRights.html:48 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:96
-msgid "ModifyACL"
-msgstr "ModificarACL"
-
-#: lib/RT/CustomField_Overlay.pm:110
-msgid "ModifyCustomField"
-msgstr "ModificarCampoPersonalizado"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "ModifyOwnMembership"
-msgstr "ModificarFiliaçãoPrópria"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "ModifyQueueWatchers"
-msgstr "ModificarObservadoresdaFila"
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "ModifyScrips"
-msgstr "ModificarScrips"
-
-#: lib/RT/System.pm:84
-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:419
-msgid "Mon."
-msgstr "Seg."
-
-#: html/Ticket/Elements/ShowRequestor:63
-#. ($name)
-msgid "More about %1"
-msgstr "Mais sobre %1"
-
-#: html/Admin/Elements/PickCustomFields:85
-msgid "Move down"
-msgstr "Descer"
-
-#: html/Admin/Elements/PickCustomFields:77
-msgid "Move up"
-msgstr "Subir"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:50
-msgid "Multiple"
-msgstr "Múltiplo"
-
-#: lib/RT/User_Overlay.pm:228
-msgid "Must specify 'Name' attribute"
-msgstr "Necessário especificar atributo 'Nome'"
-
-#: html/SelfService/Elements/MyRequests:79
-#. ($friendly_status)
-msgid "My %1 tickets"
-msgstr "Meus %1 primeiros tíquetes"
-
-#: NOT FOUND IN SOURCE
-msgid "My Approvals"
-msgstr "Minhas Aprovações"
-
-#: html/Tools/Elements/Tabs:65
-msgid "My Day"
-msgstr "Meu Dia"
-
-#: html/Approvals/index.html:48 html/Approvals/index.html:49
-msgid "My approvals"
-msgstr "Minhas aprovações"
-
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56
-msgid "My saved searches"
-msgstr "Minhas buscas salvas"
-
-#: 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
-msgid "Name"
-msgstr "Nome"
-
-#: lib/RT/User_Overlay.pm:235
-msgid "Name in use"
-msgstr "Nome em uso"
-
-#: NOT FOUND IN SOURCE
-msgid "Need approval from system administrator"
-msgstr "Precisa de aprovação do administrador do sistema"
-
-#: html/Ticket/Elements/ShowDates:75
-msgid "Never"
-msgstr "Nunca"
-
-#: NOT FOUND IN SOURCE
-msgid "New"
-msgstr "Novo"
-
-#: html/Elements/EditLinks:118
-msgid "New Links"
-msgstr "Novos Vínculos"
-
-#: html/Admin/Users/Modify.html:121 html/User/Prefs.html:111
-msgid "New Password"
-msgstr "Nova Senha"
-
-#: etc/initialdata:332
-msgid "New Pending Approval"
-msgstr "Nova Aprovação Pendente"
-
-#: html/Ticket/Elements/Tabs:214
-msgid "New Search"
-msgstr "Nova busca"
-
-#: html/Admin/Elements/CustomFieldTabs:95 html/Admin/Queues/CustomField.html:75
-msgid "New custom field"
-msgstr "Novo campo personalizado"
-
-#: html/Admin/Elements/GroupTabs:79 html/User/Elements/GroupTabs:75
-msgid "New group"
-msgstr "Novo grupo"
-
-#: html/SelfService/Prefs.html:55
-msgid "New password"
-msgstr "Nova senha"
-
-#: lib/RT/User_Overlay.pm:818
-msgid "New password notification sent"
-msgstr "Notificação de nova senha enviada"
-
-#: html/Admin/Elements/QueueTabs:97
-msgid "New queue"
-msgstr "Nova fila"
-
-#: html/Ticket/Elements/Reminders:120
-msgid "New reminder:"
-msgstr "Novo lembrete:"
-
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "Nova requisição"
-
-#: html/Admin/Elements/SelectRights:67
-msgid "New rights"
-msgstr "Novos direitos de acesso"
-
-#: html/Admin/Global/Scrip.html:65 html/Admin/Global/Scrips.html:62 html/Admin/Queues/Scrip.html:73 html/Admin/Queues/Scrips.html:78
-msgid "New scrip"
-msgstr "Novo scrip"
-
-#: NOT FOUND IN SOURCE
-msgid "New search"
-msgstr "Nova busca"
-
-#: html/Admin/Global/Template.html:83 html/Admin/Global/Templates.html:62 html/Admin/Queues/Template.html:81 html/Admin/Queues/Templates.html:73
-msgid "New template"
-msgstr "Novo modelo"
-
-#: html/SelfService/Elements/Tabs:87 html/SelfService/Elements/Tabs:91
-msgid "New ticket"
-msgstr "Novo tíquete"
-
-#: lib/RT/Ticket_Overlay.pm:2760
-msgid "New ticket doesn't exist"
-msgstr "O novo tíquete não existe"
-
-#: html/Admin/Elements/UserTabs:83
-msgid "New user"
-msgstr "Novo usuário"
-
-#: html/Admin/Elements/CreateUserCalled:49
-msgid "New user called"
-msgstr "Novo usuário chamado"
-
-#: html/Admin/Queues/People.html:78 html/Ticket/Elements/EditPeople:52
-msgid "New watchers"
-msgstr "Novos observadores"
-
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "Abrir nova janela"
-
-#: html/Helpers/CalPopup.html:60 html/Ticket/Elements/Tabs:94
-msgid "Next"
-msgstr "Próximo"
-
-#: html/Elements/TicketList:108
-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 "NickName"
-msgstr "Apelido"
-
-#: html/Admin/Users/Modify.html:86 html/User/Prefs.html:74
-msgid "Nickname"
-msgstr "Apelido"
-
-#: html/Admin/CustomFields/UserRights.html:147
-msgid "No Class defined"
-msgstr "Nenhuma Classe definida"
-
-#: html/Admin/CustomFields/Modify.html:168 html/Admin/Elements/EditCustomField:121
-msgid "No CustomField"
-msgstr "Não há Campo Personalizado"
-
-#: html/Admin/CustomFields/GroupRights.html:105
-msgid "No CustomField defined"
-msgstr "Nenhum Campo Personalizado definido"
-
-#: html/Admin/Groups/GroupRights.html:107 html/Admin/Groups/UserRights.html:94
-msgid "No Group defined"
-msgstr "Não há Grupo definido"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:484
-msgid "No Query"
-msgstr "Nenhuma Consulta"
-
-#: html/Admin/Queues/GroupRights.html:120 html/Admin/Queues/UserRights.html:91
-msgid "No Queue defined"
-msgstr "Não há Fila definida"
-
-#: bin/rt-crontool:75
-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"
-
-#: html/Admin/Global/Template.html:102 html/Admin/Queues/Template.html:99
-msgid "No Template"
-msgstr "Não há Modelo"
-
-#: NOT FOUND IN SOURCE
-msgid "No Ticket specified. Aborting ticket "
-msgstr "Não há Tíquete especificado. Abortando o tíquete "
-
-#: NOT FOUND IN SOURCE
-msgid "No Ticket specified. Aborting ticket modifications\\n\\n"
-msgstr "Não há Tíquete especificado. Abortando modificações no tíquete\\n\\n"
-
-#: html/Approvals/Elements/Approve:79
-msgid "No action"
-msgstr "Não há ação"
-
-#: lib/RT/Record.pm:966
-msgid "No column specified"
-msgstr "Não há coluna especificada"
-
-#: NOT FOUND IN SOURCE
-msgid "No command found\\n"
-msgstr "Comando não encontrado\\n"
-
-#: html/Ticket/Elements/ShowRequestor:70
-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 "Não há nenhum arquivo anexado"
-
-#: 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
-#. (ref $self)
-msgid "No description for %1"
-msgstr "Não há descrição para %1"
-
-#: lib/RT/Users_Overlay.pm:192
-msgid "No group specified"
-msgstr "Não há grupo especificado"
-
-#: html/Admin/Groups/index.html:54
-msgid "No groups matching search criteria found."
-msgstr "Nenhum grupo satisfaz o critério de busca."
-
-#: lib/RT/Ticket_Overlay.pm:2395
-msgid "No message attached"
-msgstr "Nenhuma mensagem anexada"
-
-#: lib/RT/User_Overlay.pm:1036
-msgid "No password set"
-msgstr "Não há senha especificada"
-
-#: lib/RT/Queue_Overlay.pm:363
-msgid "No permission to create queues"
-msgstr "Não há permissão para criar filas"
-
-#: lib/RT/Ticket_Overlay.pm:422
-#. ($QueueObj->Name)
-msgid "No permission to create tickets in the queue '%1'"
-msgstr "Sem permissão para criar tíquetes na fila '%1'"
-
-#: lib/RT/User_Overlay.pm:188
-msgid "No permission to create users"
-msgstr "Sem permissão para criar usuários"
-
-#: html/SelfService/Display.html:210
-msgid "No permission to display that ticket"
-msgstr "Sem permissão para mostrar o tíquete"
-
-#: lib/RT/SavedSearch.pm:158
-msgid "No permission to save system-wide searches"
-msgstr "Sem permissão para salvar buscas com abrangência em todo sistema"
-
-#: html/SelfService/Update.html:119
-msgid "No permission to view update ticket"
-msgstr "sem permissão para ver modificar o tíquete"
-
-#: lib/RT/Queue_Overlay.pm:797 lib/RT/Ticket_Overlay.pm:1491
-msgid "No principal specified"
-msgstr "Não há usuário/grupo especificado"
-
-#: html/Admin/Queues/People.html:177 html/Admin/Queues/People.html:187
-msgid "No principals selected."
-msgstr "Não há usuário/grupo selecionado."
-
-#: html/Admin/Queues/index.html:59
-msgid "No queues matching search criteria found."
-msgstr "Nenhuma fila satisfaz o critério de busca."
-
-#: html/Admin/Elements/SelectRights:108
-msgid "No rights found"
-msgstr "Nenhum direito encontrado"
-
-#: html/Admin/Elements/SelectRights:55
-msgid "No rights granted."
-msgstr "Nenhum direito outorgado."
-
-#: lib/RT/SavedSearch.pm:198
-msgid "No search loaded"
-msgstr "Nenhuma busca carregada"
-
-#: html/Search/Bulk.html:234
-msgid "No search to operate on."
-msgstr "Não há busca a realizar"
-
-#: html/Elements/RT__Ticket/ColumnMap:139 html/Search/Results.rdf:80
-msgid "No subject"
-msgstr "Sem assunto"
-
-#: NOT FOUND IN SOURCE
-msgid "No ticket id specified"
-msgstr "Nenhum identificador de tíquete especificado"
-
-#: html/Search/Chart:101
-msgid "No tickets found."
-msgstr "Nenhum tíquete encontrado."
-
-#: lib/RT/Transaction_Overlay.pm:549 lib/RT/Transaction_Overlay.pm:586
-msgid "No transaction type specified"
-msgstr "Não há tipo de transação especificada"
-
-#: NOT FOUND IN SOURCE
-msgid "No user or email address specified"
-msgstr "Não há usuário ou endereço de e-mail especificado"
-
-#: html/Admin/Users/index.html:57
-msgid "No users matching search criteria found."
-msgstr "Nenhum usuário satisfaz o critério de busca."
-
-#: lib/RT/Record.pm:963
-msgid "No value sent to _Set!\\n"
-msgstr "Nenhum valor enviado a _Set!\\n"
-
-#: html/Elements/QuickCreate:61
-msgid "Nobody"
-msgstr "Ninguém"
-
-#: lib/RT/Record.pm:968
-msgid "Nonexistant field?"
-msgstr "Campo inexistente?"
-
-#: html/Search/Chart:149 html/Search/Elements/Chart:90
-msgid "Not Set"
-msgstr "Nao Definido"
-
-#: NOT FOUND IN SOURCE
-msgid "Not logged in"
-msgstr "Não logado"
-
-#: html/Elements/Header:98
-msgid "Not logged in."
-msgstr "Não entrou."
-
-#: lib/RT/Date.pm:399
-msgid "Not set"
-msgstr "Não definido"
-
-#: 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..."
-
-#: html/Approvals/Elements/Approve:83
-msgid "Notes"
-msgstr "Anotações"
-
-#: lib/RT/User_Overlay.pm:821
-msgid "Notification could not be sent"
-msgstr "A notificação não pôde ser enviada"
-
-#: etc/initialdata:101
-msgid "Notify AdminCcs"
-msgstr "Notificar AdminCcs"
-
-#: etc/initialdata:97
-msgid "Notify AdminCcs as Comment"
-msgstr "Notificar AdminCcs como Comentário"
-
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
-msgid "Notify Ccs"
-msgstr "Notificar Ccs"
-
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
-msgid "Notify Ccs as Comment"
-msgstr "Notificar Ccs como Comentário"
-
-#: etc/initialdata:128
-msgid "Notify Other Recipients"
-msgstr "Notificar Outros Destinatários"
-
-#: etc/initialdata:124
-msgid "Notify Other Recipients as Comment"
-msgstr "Notificar Outros Destinatários como Comentário"
-
-#: etc/initialdata:85
-msgid "Notify Owner"
-msgstr "Notificar Proprietário"
-
-#: etc/initialdata:81
-msgid "Notify Owner as Comment"
-msgstr "Notificar Proprietário como Comentário"
-
-#: etc/initialdata:376
-msgid "Notify Owner of their rejected ticket"
-msgstr "Notificar Proprietário sobre seus tíquetes rejeitados"
-
-#: etc/initialdata:365
-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"
-
-#: etc/initialdata:353
-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"
-
-#: etc/initialdata:334
-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:77
-msgid "Notify Requestors"
-msgstr "Notificar Requisitantes"
-
-#: etc/initialdata:111
-msgid "Notify Requestors and Ccs"
-msgstr "Notificar Requisitantes e Ccs"
-
-#: etc/initialdata:106
-msgid "Notify Requestors and Ccs as Comment"
-msgstr "Notificar Requisitantes e Ccs como Comentário"
-
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
-msgstr "Notificar Requisitantes, Ccs e AdminCcs"
-
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr "Notificar Requisitantes, Ccs e AdminCcs como Comentário"
-
-#: lib/RT/Date.pm:453
-msgid "Nov."
-msgstr "Nov."
-
-#: NOT FOUND IN SOURCE
-msgid "November"
-msgstr "Novembro"
-
-#: html/Search/Elements/SelectAndOr:49
-msgid "OR"
-msgstr "OU"
-
-#: lib/RT/Record.pm:329
-msgid "Object could not be created"
-msgstr "Objeto não pôde ser criado"
-
-#: lib/RT/Record.pm:130
-msgid "Object could not be deleted"
-msgstr "Objeto não pode ser removido"
-
-#: lib/RT/Record.pm:348
-msgid "Object created"
-msgstr "Objeto criado"
-
-#: lib/RT/Record.pm:127
-msgid "Object deleted"
-msgstr "Objeto removido"
-
-#: html/Admin/CustomFields/Objects.html:74 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:970
-msgid "Object type mismatch"
-msgstr "Tipo de objeto não corresponde"
-
-#: lib/RT/Date.pm:452
-msgid "Oct."
-msgstr "Out."
-
-#: NOT FOUND IN SOURCE
-msgid "October"
-msgstr "Outubro"
-
-#: html/Tools/Elements/Tabs:57
-msgid "Offline"
-msgstr "Offline"
-
-#: html/Tools/Offline.html:51
-msgid "Offline edits"
-msgstr "Edições offline"
-
-#: html/Tools/Offline.html:48
-msgid "Offline upload"
-msgstr "Envio offline"
-
-#: html/Elements/SelectDateRelation:58
-msgid "On"
-msgstr "Em"
-
-#: lib/RT/Transaction_Overlay.pm:349
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-msgid "On %1, %2 wrote:"
-msgstr "Em %1, %2 escreveu:"
-
-#: etc/initialdata:163
-msgid "On Comment"
-msgstr "Num Comentário"
-
-#: etc/initialdata:156
-msgid "On Correspond"
-msgstr "Numa Correspondência"
-
-#: etc/initialdata:145
-msgid "On Create"
-msgstr "Na Criação"
-
-#: etc/initialdata:184
-msgid "On Owner Change"
-msgstr "Na Mudança de Proprietário"
-
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
-msgid "On Priority Change"
-msgstr "Na Mudança de Prioridade"
-
-#: etc/initialdata:192
-msgid "On Queue Change"
-msgstr "Na Mudança de Fila"
-
-#: etc/initialdata:198
-msgid "On Resolve"
-msgstr "Na Resolução"
-
-#: etc/initialdata:169
-msgid "On Status Change"
-msgstr "Na Mudança de Estado"
-
-#: etc/initialdata:150
-msgid "On Transaction"
-msgstr "Numa Transação"
-
-#: 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ó mostrar aprovações para requisições criadas depois de %1"
-
-#: 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ó mostrar aprovações para requisições criadas antes de %1"
-
-#: html/Admin/CustomFields/index.html:77
-msgid "Only show custom fields for:"
-msgstr "Somente mostrar campos personalizados para:"
-
-#: NOT FOUND IN SOURCE
-msgid "Open"
-msgstr "Aberto"
-
-#: etc/initialdata:139
-msgid "Open Tickets"
-msgstr "Abrir Tíquetes"
-
-#: html/Ticket/Elements/Tabs:162
-msgid "Open it"
-msgstr "Abrir"
-
-#: NOT FOUND IN SOURCE
-msgid "Open requests"
-msgstr "Requisições abertas"
-
-#: html/SelfService/Elements/Tabs:78 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:140
-msgid "Open tickets on correspondence"
-msgstr "Abrir tíquetes na correspondência"
-
-#: html/Prefs/MyRT.html:72
-msgid "Options"
-msgstr "Opções"
-
-#: html/Search/Elements/DisplayOptions:61
-msgid "Order by"
-msgstr "Ordenado por"
-
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "Requisitando e ordenando"
-
-#: html/Admin/Users/Modify.html:144 html/User/Prefs.html:131
-msgid "Organization"
-msgstr "Organização"
-
-#: html/Approvals/Elements/Approve:55
-#. ($approving->Id, $approving->Subject)
-msgid "Originating ticket: #%1"
-msgstr "Tíquete originador: #%1"
-
-#: lib/RT/Transaction_Overlay.pm:643
-msgid "Outgoing email about a comment recorded"
-msgstr "E-mail de saida sobre um comentário gravado"
-
-#: lib/RT/Transaction_Overlay.pm:647
-msgid "Outgoing email recorded"
-msgstr "E-mail de saida gravado"
-
-#: html/Admin/Queues/Modify.html:92
-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"
-
-#: 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
-msgid "Owner"
-msgstr "Proprietário"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner changed from %1 to %2"
-msgstr "Proprietário mudou de %1 para %2"
-
-#: lib/RT/Ticket_Overlay.pm:507
-msgid "Owner could not be set."
-msgstr "Proprietário não pode ser definido."
-
-#: lib/RT/Transaction_Overlay.pm:693
-#. ($Old->Name , $New->Name)
-msgid "Owner forcibly changed from %1 to %2"
-msgstr "Proprietário mudado à força de %1 para %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner is"
-msgstr "O proprietário é"
-
-#: html/Elements/TicketList:82
-#. ($Page, $pages)
-msgid "Page %1 of %2"
-msgstr "Página %1 de %2"
-
-#: html/Admin/Users/Modify.html:201 html/User/Prefs.html:98
-msgid "Pager"
-msgstr "Pager"
-
-#: NOT FOUND IN SOURCE
-msgid "PagerPhone"
-msgstr "Telefone do Pager"
-
-#: NOT FOUND IN SOURCE
-msgid "Parent"
-msgstr "Pai"
-
-#: html/Elements/EditLinks:145 html/Elements/EditLinks:77 html/Elements/ShowLinks:70 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:62
-msgid "Parents"
-msgstr "Pais"
-
-#: html/Elements/Login:97 html/User/Prefs.html:107
-msgid "Password"
-msgstr "Senha"
-
-#: html/NoAuth/Reminder.html:48
-msgid "Password Reminder"
-msgstr "Lembrete de Senha"
-
-#: lib/RT/Transaction_Overlay.pm:802 lib/RT/User_Overlay.pm:1047
-msgid "Password changed"
-msgstr "Senha trocada"
-
-#: lib/RT/User_Overlay.pm:1039 lib/RT/User_Overlay.pm:216
-#. ($RT::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:1046
-msgid "Password set"
-msgstr "Senha definida"
-
-#: NOT FOUND IN SOURCE
-msgid "Password too short"
-msgstr "Senha muito curta"
-
-#: html/User/Prefs.html:242
-#. (loc_fuzzy($msg))
-msgid "Password: %1"
-msgstr "Senha: %1"
-
-#: lib/RT/User_Overlay.pm:1032
-msgid "Password: Permission Denied"
-msgstr "Senha: Permissão Negada"
-
-#: html/Admin/Users/Modify.html:368
-msgid "Passwords do not match."
-msgstr "Senhas não coincidem."
-
-#: html/User/Prefs.html:244
-msgid "Passwords do not match. Your password has not been changed"
-msgstr "Senhas não coincidem. Sua senha não foi mudada"
-
-#: html/Ticket/Elements/ShowSummary:64 html/Ticket/Elements/Tabs:121 html/Ticket/ModifyAll.html:74
-msgid "People"
-msgstr "Pessoas"
-
-#: etc/initialdata:133
-msgid "Perform a user-defined action"
-msgstr "Realizar uma ação definida pelo usuário"
-
-#: html/Admin/Tools/Configuration.html:96
-msgid "Perl configuration"
-msgstr "Configuração 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: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
-msgid "Permission Denied"
-msgstr "Permissão Negada"
-
-#: lib/RT/Template_Overlay.pm:240 lib/RT/Template_Overlay.pm:249
-msgid "Permission denied"
-msgstr "Permissão negada"
-
-#: lib/RT/Template_Overlay.pm:379
-msgid "Permissions denied"
-msgstr "Permissões negadas"
-
-#: html/User/Elements/Tabs:58
-msgid "Personal Groups"
-msgstr "Grupos Pessoais"
-
-#: html/User/Groups/index.html:53 html/User/Groups/index.html:63
-msgid "Personal groups"
-msgstr "Grupos pessoais"
-
-#: html/User/Elements/DelegateRights:60
-msgid "Personal groups:"
-msgstr "Grupos pessoais:"
-
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:83
-msgid "Phone numbers"
-msgstr "Telefones"
-
-#: 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
-msgid "Preferences"
-msgstr "Preferências"
-
-#: html/Admin/Users/MyRT.html:122
-#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr "Preferências %1 para usuário %2."
-
-#: html/Prefs/MyRT.html:143
-#. ($pane)
-msgid "Preferences saved for %1."
-msgstr "Preferências salvas para %1."
-
-#: NOT FOUND IN SOURCE
-msgid "Prefs"
-msgstr "Prefs"
-
-#: lib/RT/Action/Generic.pm:197
-msgid "Prepare Stubbed"
-msgstr "Preparação Abortada"
-
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:86
-msgid "Prev"
-msgstr "Anterior"
-
-#: html/Elements/TicketList:105
-msgid "Previous Page"
-msgstr "Página Anterior"
-
-#: NOT FOUND IN SOURCE
-msgid "Previous page"
-msgstr "Página anterior"
-
-#: lib/RT/ACE_Overlay.pm:159 lib/RT/ACE_Overlay.pm:241 lib/RT/ACE_Overlay.pm:571
-#. ($args{'PrincipalId'})
-msgid "Principal %1 not found."
-msgstr "Usuário/Grupo %1 não encontrado."
-
-#: 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
-msgid "Priority"
-msgstr "Prioridade"
-
-#: html/Admin/Queues/Modify.html:88
-msgid "Priority starts at"
-msgstr "A prioridade inicia em"
-
-#: html/Search/Elements/EditSearches:52
-msgid "Privacy:"
-msgstr "Privacidade:"
-
-#: etc/initialdata:25
-msgid "Privileged"
-msgstr "Privilegiado"
-
-#: html/Admin/Users/Modify.html:346 html/User/Prefs.html:233
-#. (loc_fuzzy($msg))
-msgid "Privileged status: %1"
-msgstr "Estado privilegiado: %1"
-
-#: html/Admin/Users/index.html:104
-msgid "Privileged users"
-msgstr "Usuários privilegiados"
-
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
-msgid "Pseudogroup for internal use"
-msgstr "Falso-grupo para uso interno"
-
-#: html/Search/Build.html:123
-msgid "Query Builder"
-msgstr "Construtor de Consulta"
-
-#: html/Search/Elements/Chart:103
-msgid "Query:"
-msgstr "Consulta:"
-
-#: 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
-msgid "Queue"
-msgstr "Fila"
-
-#: 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)
-#. ($Queue)
-msgid "Queue %1 not found"
-msgstr "Fila %1 não encontrada"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue '%1' not found\\n"
-msgstr "A fila '%1' não foi encontrada\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue Keyword Selections"
-msgstr "Seleções de Palavras-chave da Fila"
-
-#: html/Admin/Queues/Modify.html:66
-msgid "Queue Name"
-msgstr "Nome da Fila"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue Scrips"
-msgstr "Scrips da Fila"
-
-#: lib/RT/Queue_Overlay.pm:367
-msgid "Queue already exists"
-msgstr "A fila já existe"
-
-#: lib/RT/Queue_Overlay.pm:376 lib/RT/Queue_Overlay.pm:382
-msgid "Queue could not be created"
-msgstr "A fila não pôde ser criada"
-
-#: html/Ticket/Create.html:318 lib/t/regression/01ticket_link_searching.t:17
-msgid "Queue could not be loaded."
-msgstr "A fila não pôde ser carregada"
-
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:386 lib/RT/StyleGuide.pod:807
-msgid "Queue created"
-msgstr "Fila criada"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue is not specified."
-msgstr "A fila não foi especificada."
-
-#: html/SelfService/Display.html:128 lib/RT/CustomField_Overlay.pm:199
-msgid "Queue not found"
-msgstr "Fila não encontrada"
-
-#: html/Admin/Elements/Tabs:61 html/Admin/index.html:74
-msgid "Queues"
-msgstr "Filas"
-
-#: html/Elements/MyAdminQueues:48
-msgid "Queues I administer"
-msgstr "Filas que eu administro"
-
-#: html/Elements/MySupportQueues:48
-msgid "Queues I'm an AdminCc for"
-msgstr "Filas nas quais sou AdminCc"
-
-#: html/Elements/Quicksearch:49 html/Prefs/Elements/Tabs:60 html/Prefs/Quicksearch.html:72
-msgid "Quick search"
-msgstr "Busca rápida"
-
-#: html/Elements/QuickCreate:49
-msgid "Quick ticket creation"
-msgstr "Criação rápida de tíquete"
-
-#: html/Search/Results.html:83
-msgid "RSS"
-msgstr "RSS"
-
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:794
-#. ($RT::VERSION, $RT::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"
-
-#: html/Admin/index.html:48 html/Admin/index.html:49
-msgid "RT Administration"
-msgstr "Administração do 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"
-
-#: 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!"
-
-#: html/Elements/Error:65 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."
-
-#: html/SelfService/Elements/Tabs:72 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"
-
-#: html/Admin/Tools/Configuration.html:75
-msgid "RT Variables"
-msgstr "Variáveis 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
-msgid "RT at a glance"
-msgstr "RT por alto"
-
-#: html/Admin/Users/MyRT.html:77
-#. ($UserObj->Name)
-msgid "RT at a glance for the user %1"
-msgstr "RT por alto para o usuário %1"
-
-#: html/Admin/CustomFields/Modify.html:119
-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 mostrando este campo personalizado."
-
-#: html/Admin/CustomFields/Modify.html:108
-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"
-
-#: html/Elements/SetupSessionCookie:102
-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"
-
-#: html/Elements/Logo:51 html/Elements/PageLayout:176
-#. ($RT::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"
-
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "O RT crê que esta mensagem seja um ricochete"
-
-#: 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"
-
-#: html/Admin/CustomFields/Modify.html:110 html/Admin/CustomFields/Modify.html:121
-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"
-
-#: html/Admin/Users/Modify.html:81 html/User/Prefs.html:71
-msgid "Real Name"
-msgstr "Nome real"
-
-#: NOT FOUND IN SOURCE
-msgid "RealName"
-msgstr "NomeReal"
-
-#: lib/RT/Transaction_Overlay.pm:746
-#. ($value)
-msgid "Reference by %1 added"
-msgstr "Referenciado por %1 adicionado"
-
-#: lib/RT/Transaction_Overlay.pm:786
-#. ($value)
-msgid "Reference by %1 deleted"
-msgstr "Referenciado por %1 removido"
-
-#: lib/RT/Transaction_Overlay.pm:743
-#. ($value)
-msgid "Reference to %1 added"
-msgstr "Referência a %1 adicionada"
-
-#: lib/RT/Transaction_Overlay.pm:783
-#. ($value)
-msgid "Reference to %1 deleted"
-msgstr "Referência a %1 removida"
-
-#: html/Elements/EditLinks:104 html/Elements/EditLinks:157 html/Elements/ShowLinks:94 html/Ticket/Create.html:227 html/Ticket/Elements/BulkLinks:74
-msgid "Referred to by"
-msgstr "Referenciado por"
-
-#: 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
-msgid "Refers to"
-msgstr "Faz referência a"
-
-#: NOT FOUND IN SOURCE
-msgid "RefersTo"
-msgstr "FazReferenciaA"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine"
-msgstr "Refinar"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "Refinar a busca"
-
-#: 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:832
-#. ($ticket->Subject)
-msgid "Reminder '%1' added"
-msgstr "Lembrete '%1' adicionado"
-
-#: lib/RT/Transaction_Overlay.pm:845
-#. ($ticket->Subject)
-msgid "Reminder '%1' completed"
-msgstr "Lembrete '%1' completado"
-
-#: lib/RT/Transaction_Overlay.pm:838
-#. ($ticket->Subject)
-msgid "Reminder '%1' reopened"
-msgstr "Lembrete '%1' reaberto"
-
-#: html/Ticket/Reminders.html:48
-#. ($Ticket->Id)
-msgid "Reminder ticket #%1"
-msgstr "Lembrete tíquete #%1"
-
-#: html/Elements/MyReminders:50 html/Ticket/Elements/ShowSummary:77 html/Ticket/Elements/Tabs:124 html/Ticket/Reminders.html:54
-msgid "Reminders"
-msgstr "Lembretes"
-
-#: html/Ticket/Reminders.html:52
-#. ($Ticket->Id)
-msgid "Reminders for ticket #%1"
-msgstr "Lembretes para tíquete #%1"
-
-#: html/Search/Bulk.html:96
-msgid "Remove AdminCc"
-msgstr "Remover AdminCc"
-
-#: html/Search/Bulk.html:92
-msgid "Remove Cc"
-msgstr "Remover Cc"
-
-#: html/Search/Bulk.html:88
-msgid "Remove Requestor"
-msgstr "Remover Requisitante"
-
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:149
-msgid "Reply"
-msgstr "Responder"
-
-#: html/Admin/Queues/Modify.html:74
-msgid "Reply Address"
-msgstr "Endereço para Resposta"
-
-#: html/Search/Bulk.html:131 html/Ticket/ModifyAll.html:96 html/Ticket/Update.html:80
-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"
-
-#: html/Tools/Elements/Tabs:61 html/Tools/Reports/index.html:48 html/Tools/Reports/index.html:49
-msgid "Reports"
-msgstr "Relatórios"
-
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:113
-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"
-
-#: html/SelfService/Create.html:65 html/Ticket/Create.html:82 html/Ticket/Elements/EditPeople:71 html/Ticket/Elements/ShowPeople:54
-msgid "Requestors"
-msgstr "Requisitantes"
-
-#: html/Admin/Queues/Modify.html:98
-msgid "Requests should be due in"
-msgstr "A requisições vencem em"
-
-#: lib/RT/Attribute_Overlay.pm:148
-#. ('Object')
-msgid "Required parameter '%1' not specified"
-msgstr "Parâmetro '%1' requerido e não especificado"
-
-#: html/Elements/Submit:85
-msgid "Reset"
-msgstr "Restaurar"
-
-#: html/Admin/Users/MyRT.html:62 html/Prefs/MyRT.html:62
-msgid "Reset to default"
-msgstr "Voltar para padrão"
-
-#: html/Admin/Users/Modify.html:186 html/User/Prefs.html:86
-msgid "Residence"
-msgstr "Residência"
-
-#: html/Ticket/Elements/Tabs:158
-msgid "Resolve"
-msgstr "Resolver"
-
-#: html/Ticket/Update.html:158
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Resolve ticket #%1 (%2)"
-msgstr "Resolver tíquete #%1 (%2)"
-
-#: etc/initialdata:323 html/Elements/SelectDateType:51 lib/RT/Ticket_Overlay.pm:1174
-msgid "Resolved"
-msgstr "Resolvido"
-
-#: html/Tools/Reports/Elements/Tabs:57
-msgid "Resolved by owner"
-msgstr "Resolvidos por proprietário"
-
-#: html/Tools/Reports/Elements/Tabs:61
-msgid "Resolved in date range"
-msgstr "Resolvidos num intervalo de datas"
-
-#: 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"
-
-#: html/Tools/Reports/ResolvedByOwner.html:52
-msgid "Resolved tickets, grouped by owner"
-msgstr "Tíquetes resolvidos, agrupados por proprietário"
-
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "Resposta aos requisitantes"
-
-#: html/Elements/ListActions:48 html/Search/Elements/NewListActions:49
-msgid "Results"
-msgstr "Resultados"
-
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "Resultados por página"
-
-#: html/Admin/Users/Modify.html:128 html/User/Prefs.html:118
-msgid "Retype Password"
-msgstr "Confirmar a Senha"
-
-#: html/Search/Elements/EditSearches:63
-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:632
-msgid "Right Delegated"
-msgstr "Direito de Acesso Delegado"
-
-#: lib/RT/ACE_Overlay.pm:322
-msgid "Right Granted"
-msgstr "Direito de Acesso Outorgado"
-
-#: lib/RT/ACE_Overlay.pm:180
-msgid "Right Loaded"
-msgstr "Direito de Acesso Carregado"
-
-#: lib/RT/ACE_Overlay.pm:697 lib/RT/ACE_Overlay.pm:718
-msgid "Right could not be revoked"
-msgstr "Direito de acesso não pôde ser revogado"
-
-#: html/User/Delegation.html:87
-msgid "Right not found"
-msgstr "Direito de acesso não encontrado"
-
-#: lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:657
-msgid "Right not loaded."
-msgstr "Direito de acesso não carregado."
-
-#: lib/RT/ACE_Overlay.pm:714
-msgid "Right revoked"
-msgstr "Direito de acesso revogado"
-
-#: html/Admin/Elements/UserTabs:72
-msgid "Rights"
-msgstr "Direitos de Acesso"
-
-#: html/Admin/CustomFields/GroupRights.html:131 lib/RT/Interface/Web.pm:987
-#. ($object_type)
-msgid "Rights could not be granted for %1"
-msgstr "Direitos de acesso não puderam ser outorgados a %1"
-
-#: html/Admin/CustomFields/GroupRights.html:158 lib/RT/Interface/Web.pm:1016
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr "Direitos de acesso não puderam ser revogados de %1"
-
-#: html/Admin/Global/GroupRights.html:74 html/Admin/Queues/GroupRights.html:76
-msgid "Roles"
-msgstr "Papéis"
-
-#: NOT FOUND IN SOURCE
-msgid "RootApproval"
-msgstr "RootApproval"
-
-#: html/Prefs/MyRT.html:74
-msgid "Rows per box"
-msgstr "Linhas por caixa"
-
-#: html/Search/Elements/DisplayOptions:95
-msgid "Rows per page"
-msgstr "Linhas por página"
-
-#: lib/RT/Date.pm:424
-msgid "Sat."
-msgstr "Sáb."
-
-#: 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
-msgid "Save"
-msgstr "Salvar"
-
-#: html/Admin/Global/Template.html:69 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
-msgid "Save Changes"
-msgstr "Salvar as Alterações"
-
-#: html/User/Prefs.html:183
-msgid "Save Preferences"
-msgstr "Salvar Preferências"
-
-#: html/Ticket/Elements/PreviewScrips:133
-msgid "Save changes"
-msgstr "Salvar as alterações"
-
-#: lib/RT/SavedSearch.pm:175
-#. ($name)
-msgid "Saved search %1"
-msgstr "Busca salva %1"
-
-#: html/Admin/Elements/ListGlobalScrips:62 html/Admin/Global/Scrip.html:79 html/Admin/Queues/Scrip.html:86
-#. ($scrip->Id)
-#. ($id)
-msgid "Scrip #%1"
-msgstr "Scrip #%1"
-
-#: lib/RT/Scrip_Overlay.pm:205
-msgid "Scrip Created"
-msgstr "Scrip Criado"
-
-#: html/Admin/Elements/EditScrip:54
-msgid "Scrip Fields"
-msgstr "Campos de Scrip"
-
-#: html/Admin/Elements/EditScrips:111
-msgid "Scrip deleted"
-msgstr "Scrip removido"
-
-#: html/Admin/Elements/QueueTabs:69 html/Admin/Elements/SystemTabs:56 html/Admin/Global/index.html:64
-msgid "Scrips"
-msgstr "Scrips"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrips for %1\\n"
-msgstr "Scrips para %1\\n"
-
-#: html/Admin/Queues/Scrips.html:57
-msgid "Scrips which apply to all queues"
-msgstr "Scrips aplicáveis a todas as filas"
-
-#: html/Elements/SimpleSearch:50 html/Search/Simple.html:67
-msgid "Search"
-msgstr "Buscar"
-
-#: NOT FOUND IN SOURCE
-msgid "Search Criteria"
-msgstr "Critérios de Busca"
-
-#: html/Prefs/SearchOptions.html:49 html/Prefs/SearchOptions.html:52
-msgid "Search Preferences"
-msgstr "Buscar Preferências"
-
-#: lib/RT/SavedSearch.pm:117
-msgid "Search attribute load failure"
-msgstr "Falha na carga de atributos de busca"
-
-#: html/Approvals/Elements/PendingMyApproval:61
-msgid "Search for approvals"
-msgstr "Buscar por aprovações"
-
-#: html/Search/Simple.html:77
-msgid "Search for tickets"
-msgstr "Busca por tíquetes"
-
-#: 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 "Busca por tí­quetes. Informar <strong>id</strong> por número, <strong>filas</strong> por nome, Proprietários por <strong>nomedeusuá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."
-
-#: html/User/Elements/Tabs:64
-msgid "Search options"
-msgstr "Opções de busca"
-
-#: html/Search/Chart.html:58
-#. ($PrimaryGroupBy)
-msgid "Search results grouped by %1"
-msgstr "Resultados da busca agrupado por %1"
-
-#: lib/RT/SavedSearch.pm:205
-#. ($msg)
-msgid "Search update: %1"
-msgstr "Busca atualizada: %1"
-
-#: 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>."
-
-#: bin/rt-crontool:267
-msgid "Security:"
-msgstr "Segurança:"
-
-#: html/Elements/ShowCustomFields:102
-msgid "See also:"
-msgstr "Ver também:"
-
-#: lib/RT/CustomField_Overlay.pm:107
-msgid "See custom fields"
-msgstr "Ver campos personalizados"
-
-#: lib/RT/Queue_Overlay.pm:108
-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:107
-msgid "SeeCustomField"
-msgstr "VerCampoPersonalizado"
-
-#: lib/RT/Group_Overlay.pm:171
-msgid "SeeGroup"
-msgstr "VerGrupo"
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "SeeQueue"
-msgstr "SeeQueue"
-
-#: html/Admin/CustomFields/index.html:48 html/Admin/CustomFields/index.html:51
-msgid "Select a Custom Field"
-msgstr "Selecionar um Campo Personalizado"
-
-#: html/Admin/Groups/index.html:80
-msgid "Select a group"
-msgstr "Selecionar um grupo"
-
-#: html/Admin/Queues/index.html:56
-msgid "Select a queue"
-msgstr "Selecionar uma fila"
-
-#: html/SelfService/CreateTicketInQueue.html:50
-msgid "Select a queue for your new ticket"
-msgstr "Selecionar uma fila para seu novo tíquete"
-
-#: html/Admin/Users/index.html:48 html/Admin/Users/index.html:51 html/Admin/Users/index.html:54
-msgid "Select a user"
-msgstr "Selecionar um usuário"
-
-#: html/Admin/Elements/CustomFieldTabs:92
-msgid "Select custom field"
-msgstr "Selecionar um campo personalizado"
-
-#: 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"
-
-#: html/Admin/Global/CustomFields/index.html:67
-msgid "Select custom fields for all users"
-msgstr "Selecionar campos personalizados para todos usuários"
-
-#: html/Admin/Global/CustomFields/index.html:78
-msgid "Select custom fields for tickets in all queues"
-msgstr "Selecionar campos personalizados para todas filas"
-
-#: html/Admin/Global/CustomFields/index.html:85
-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"
-
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
-msgid "Select group"
-msgstr "Selecionar um grupo"
-
-#: lib/RT/CustomField_Overlay.pm:61
-msgid "Select multiple values"
-msgstr "Selecionar valores múltiplos"
-
-#: lib/RT/CustomField_Overlay.pm:62
-msgid "Select one value"
-msgstr "Selecionar um valor"
-
-#: html/Admin/Elements/QueueTabs:94
-msgid "Select queue"
-msgstr "Selecionar uma fila"
-
-#: html/Prefs/Quicksearch.html:55
-msgid "Select queues to be displayed on the \"RT at a glance\" page"
-msgstr "Selecionar filas a serem mostradas na página \"RT por alto\""
-
-#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:59 html/Admin/Queues/Scrip.html:69 html/Admin/Queues/Scrips.html:75
-msgid "Select scrip"
-msgstr "Selecionar um scrip"
-
-#: html/Admin/Global/Template.html:80 html/Admin/Global/Templates.html:59 html/Admin/Queues/Template.html:78 html/Admin/Queues/Templates.html:70
-msgid "Select template"
-msgstr "Selecionar um modelo"
-
-#: lib/RT/CustomField_Overlay.pm:63
-msgid "Select up to %1 values"
-msgstr "Selecionar até %1 valores"
-
-#: html/Admin/Elements/UserTabs:80
-msgid "Select user"
-msgstr "Selecionar um usuário"
-
-#: NOT FOUND IN SOURCE
-msgid "SelectMultiple"
-msgstr "SelectMultiple"
-
-#: NOT FOUND IN SOURCE
-msgid "SelectSingle"
-msgstr "SelectSingle"
-
-#: html/Admin/Elements/EditCustomFields:60
-msgid "Selected Custom Fields"
-msgstr "Selecionar Campos Personalizados"
-
-#: html/Admin/CustomFields/Objects.html:61
-msgid "Selected objects"
-msgstr "Selecionar Objetos"
-
-#: html/Widgets/SelectionBox:220
-msgid "Selections modified. Please save your changes"
-msgstr "Seleções mudadas.Por favor, salve suas alterações"
-
-#: NOT FOUND IN SOURCE
-msgid "Self Service"
-msgstr "Auto-serviço"
-
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
-msgstr "Enviar mensagem a todos os observadores"
-
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
-msgstr "Enviar mensagem a todos os observadores como um \"comentário\""
-
-#: etc/initialdata:112
-msgid "Send mail to requestors and Ccs"
-msgstr "Enviar mensagem aos requisitantes e Ccs"
-
-#: etc/initialdata:107
-msgid "Send mail to requestors and Ccs as a comment"
-msgstr "Enviar mensagem aos requisitantes e Ccs como um comentário"
-
-#: etc/initialdata:78
-msgid "Sends a message to the requestors"
-msgstr "Envia uma mensagem aos requisitantes"
-
-#: etc/initialdata:125 etc/initialdata:129
-msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr "Envia uma mensagem aos Ccs e Bccs explicitamente listados"
-
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
-msgid "Sends mail to the Ccs"
-msgstr "Envie mail para os Ccs"
-
-#: etc/initialdata:90 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:102
-msgid "Sends mail to the administrative Ccs"
-msgstr "Envia uma mensagem aos Ccs administrativos"
-
-#: etc/initialdata:98
-msgid "Sends mail to the administrative Ccs as a comment"
-msgstr "Envia uma mensagem aos Ccs administrativos como um comentário"
-
-#: etc/initialdata:82 etc/initialdata:86
-msgid "Sends mail to the owner"
-msgstr "Envia uma mensagem ao proprietário"
-
-#: lib/RT/Date.pm:451
-msgid "Sep."
-msgstr "Set."
-
-#: NOT FOUND IN SOURCE
-msgid "September"
-msgstr "Setembro"
-
-#: html/Ticket/Elements/ShowTransaction:158
-msgid "Show"
-msgstr "Mostrar"
-
-#: NOT FOUND IN SOURCE
-msgid "Show Approvals"
-msgstr "Mostrar Aprovações"
-
-#: html/Search/Elements/EditFormat:58
-msgid "Show Columns"
-msgstr "Mostrar Colunas"
-
-#: html/Ticket/Elements/Tabs:222
-msgid "Show Results"
-msgstr "Mostrar os Resultados"
-
-#: html/Approvals/Elements/PendingMyApproval:66
-msgid "Show approved requests"
-msgstr "Mostrar requisições aprovadas"
-
-#: html/Ticket/Create.html:390
-msgid "Show basics"
-msgstr "Mostrar o sumário"
-
-#: html/Approvals/Elements/PendingMyApproval:67
-msgid "Show denied requests"
-msgstr "Mostrar requisições negadas"
-
-#: html/Ticket/Create.html:393
-msgid "Show details"
-msgstr "Mostrar os detalhes"
-
-#: html/Approvals/Elements/PendingMyApproval:65
-msgid "Show pending requests"
-msgstr "Mostrar requisições pendentes"
-
-#: html/Approvals/Elements/PendingMyApproval:68
-msgid "Show requests awaiting other approvals"
-msgstr "Mostrar requisições aguardando outras aprovações"
-
-#: NOT FOUND IN SOURCE
-msgid "Show ticket private commentary"
-msgstr "Mostrar comentário privado do tíquete"
-
-#: NOT FOUND IN SOURCE
-msgid "Show ticket summaries"
-msgstr "Mostrar sumários do tíquete"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "ShowACL"
-msgstr "MostrarACL"
-
-#: lib/RT/System.pm:87
-msgid "ShowConfigTab"
-msgstr "MostarAbaDeConfiguracao"
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "ShowOutgoingEmail"
-msgstr "MostrarE-maildeSaida"
-
-#: lib/RT/Group_Overlay.pm:170
-msgid "ShowSavedSearches"
-msgstr "MostrarBuscasSalvas"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "ShowScrips"
-msgstr "MostrarScrips"
-
-#: lib/RT/Queue_Overlay.pm:101
-msgid "ShowTemplate"
-msgstr "MostrarModelo"
-
-#: lib/RT/Queue_Overlay.pm:105
-msgid "ShowTicket"
-msgstr "MostrarTiquete"
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "ShowTicketComments"
-msgstr "MostrarComentariosdeTiquete"
-
-#: 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"
-
-#: html/Admin/Users/Modify.html:234 html/User/Prefs.html:170
-msgid "Signature"
-msgstr "Assinatura"
-
-#: NOT FOUND IN SOURCE
-msgid "Signed in as %1"
-msgstr "Assinado como %1"
-
-#: html/Elements/Tabs:71
-msgid "Simple Search"
-msgstr "Busca Simples"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:49
-msgid "Single"
-msgstr "Único"
-
-#: html/Search/Elements/EditFormat:77
-msgid "Size"
-msgstr "Tamanho"
-
-#: html/Elements/Header:91
-msgid "Skip Menu"
-msgstr "Saltar Menu"
-
-#: html/Search/Elements/EditFormat:80
-msgid "Small"
-msgstr "Pequeno"
-
-#: html/Admin/CustomFields/Modify.html:122
-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."
-
-#: html/Admin/Elements/AddCustomFieldValue:51 html/Admin/Elements/EditCustomFieldValues:56
-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"
-
-#: html/Admin/Elements/EditScrip:80
-msgid "Stage"
-msgstr "Estágio"
-
-#: NOT FOUND IN SOURCE
-msgid "Stalled"
-msgstr "Pendente"
-
-#: NOT FOUND IN SOURCE
-msgid "Start page"
-msgstr "Página inicial"
-
-#: html/Elements/SelectDateType:50 html/Ticket/Elements/EditDates:55 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"
-
-#: html/Elements/SelectDateType:54 html/Ticket/Create.html:210 html/Ticket/Elements/EditDates:50 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"
-
-#: html/Admin/Users/Modify.html:165 html/User/Prefs.html:147
-msgid "State"
-msgstr "Estado"
-
-#: 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
-msgid "Status"
-msgstr "Estado"
-
-#: etc/initialdata:309
-msgid "Status Change"
-msgstr "Mudança de Estado"
-
-#: NOT FOUND IN SOURCE
-msgid "Status changed from %1 to %2"
-msgstr "Estado mudado de %1 para %2"
-
-#: NOT FOUND IN SOURCE
-msgid "StatusChange"
-msgstr "MudancadeEstado"
-
-#: html/Ticket/Elements/Tabs:180
-msgid "Steal"
-msgstr "Roubar"
-
-#: lib/RT/Queue_Overlay.pm:119
-msgid "Steal tickets"
-msgstr "Roubar tíquetes"
-
-#: lib/RT/Queue_Overlay.pm:119
-msgid "StealTicket"
-msgstr "RoubarTiquete"
-
-#: lib/RT/Transaction_Overlay.pm:699
-#. ($Old->Name)
-msgid "Stolen from %1"
-msgstr "Roubado de %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Stolen from %1 "
-msgstr "Roubado de %1 "
-
-#: html/Search/Elements/EditFormat:83
-msgid "Style"
-msgstr "Estilo"
-
-#: 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
-msgid "Subject"
-msgstr "Assunto"
-
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:813 lib/RT/Transaction_Overlay.pm:721
-#. ($self->Data)
-msgid "Subject changed to %1"
-msgstr "Assunto mudou para %1"
-
-#: html/Elements/Submit:77
-msgid "Submit"
-msgstr "Enviar"
-
-#: NOT FOUND IN SOURCE
-msgid "Submit Workflow"
-msgstr "Enviar Workflow"
-
-#: lib/RT/Group_Overlay.pm:776
-msgid "Succeeded"
-msgstr "Deu certo"
-
-#: lib/RT/Date.pm:425
-msgid "Sun."
-msgstr "Dom."
-
-#: lib/RT/System.pm:77
-msgid "SuperUser"
-msgstr "SuperUsuário"
-
-#: html/User/Elements/DelegateRights:100
-msgid "System"
-msgstr "Sistema"
-
-#: html/Admin/Elements/ToolTabs:56 html/Admin/Tools/Configuration.html:50
-msgid "System Configuration"
-msgstr "Configuração do Sistema"
-
-#: html/Admin/CustomFields/GroupRights.html:130 html/Admin/CustomFields/GroupRights.html:157 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
-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:226 lib/RT/Transaction_Overlay.pm:232
-#. ($msg)
-msgid "System Error: %1"
-msgstr "Erro do Sistema: %1"
-
-#: html/Admin/Tools/index.html:49
-msgid "System Tools"
-msgstr "Ferramentas do Sistema"
-
-#: lib/RT/ACE_Overlay.pm:635
-msgid "System error. Right not delegated."
-msgstr "Erro do sistema. Direito de acesso não delegado."
-
-#: lib/RT/ACE_Overlay.pm:165 lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:325
-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."
-
-#: html/Admin/CustomFields/GroupRights.html:60 html/Admin/Global/GroupRights.html:58 html/Admin/Groups/GroupRights.html:60 html/Admin/Queues/GroupRights.html:59
-msgid "System groups"
-msgstr "Grupos do sistema"
-
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
-msgstr "SystemRolegroup para uso interno"
-
-#: lib/RT/CurrentUser.pm:359
-msgid "TEST_STRING"
-msgstr ""
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:74 html/Ticket/Elements/Tabs:172
-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:684
-msgid "Taken"
-msgstr "Tomado"
-
-#: html/Admin/Elements/EditScrip:73 html/Tools/Offline.html:80
-msgid "Template"
-msgstr "Modelo"
-
-#
-#: html/Admin/Global/Template.html:114 html/Admin/Queues/Template.html:115
-#. ($TemplateObj->Id())
-msgid "Template #%1"
-msgstr "Modelo #%1"
-
-#: html/Admin/Elements/EditTemplates:112
-msgid "Template deleted"
-msgstr "Modelo removido"
-
-#: lib/RT/Scrip_Overlay.pm:178
-msgid "Template is mandatory argument"
-msgstr "Modelo é um argumento obrigatório"
-
-#: lib/RT/Scrip_Overlay.pm:182
-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:346
-msgid "Template parsed"
-msgstr "Modelo processado"
-
-#: lib/RT/Template_Overlay.pm:398
-msgid "Template parsing error"
-msgstr "Erro de análise gramatical do modelo"
-
-#: html/Admin/Elements/QueueTabs:72 html/Admin/Elements/SystemTabs:59 html/Admin/Global/index.html:68
-msgid "Templates"
-msgstr "Modelos"
-
-#: NOT FOUND IN SOURCE
-msgid "Templates for %1\\n"
-msgstr "Modelos de %1\\n"
-
-#: lib/RT/CustomField_Overlay.pm:946 lib/RT/Record.pm:962
-msgid "That is already the current value"
-msgstr "Este já é o valor atual"
-
-#: lib/RT/CustomField_Overlay.pm:415
-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:1996
-msgid "That is the same value"
-msgstr "Este é o mesmo valor"
-
-#: lib/RT/ACE_Overlay.pm:307 lib/RT/ACE_Overlay.pm:616
-msgid "That principal already has that right"
-msgstr "Este usuário/grupo já tem este direito."
-
-#: lib/RT/Queue_Overlay.pm:755
-#. ($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:1437
-#. ($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:854
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this queue"
-msgstr "Este usuário/grupo não é um %1 desta fila"
-
-#: NOT FOUND IN SOURCE
-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:1992
-msgid "That queue does not exist"
-msgstr "Esta fila não existe"
-
-#: lib/RT/Ticket_Overlay.pm:3259
-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:712 lib/RT/Ticket_Overlay.pm:3062
-msgid "That user already owns that ticket"
-msgstr "Este usuário já possui este tíquete"
-
-#: lib/RT/Ticket_Overlay.pm:3005
-msgid "That user does not exist"
-msgstr "Este usuário não existe"
-
-#: lib/RT/User_Overlay.pm:391
-msgid "That user is already privileged"
-msgstr "Este usuário já tem privilégios"
-
-#: lib/RT/User_Overlay.pm:412
-msgid "That user is already unprivileged"
-msgstr "Este usuário já não tem privilégios"
-
-#: lib/RT/User_Overlay.pm:404
-msgid "That user is now privileged"
-msgstr "Este usuário agora tem privilégios"
-
-#: lib/RT/User_Overlay.pm:425
-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:3055
-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:235
-msgid "That's not a numerical id"
-msgstr "Este não é um identificador numérico"
-
-#: html/SelfService/Display.html:55 html/Ticket/Create.html:179 html/Ticket/Elements/ShowSummary:51
-msgid "The Basics"
-msgstr "Sumário"
-
-#: lib/RT/ACE_Overlay.pm:114
-msgid "The CC of a ticket"
-msgstr "O CC de um tíquete"
-
-#: lib/RT/ACE_Overlay.pm:115
-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"
-
-#: bin/rt-crontool:277
-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:\\n\\n"
-msgstr "Os seguintes comandos não foram processados:\\n\\n"
-
-#: lib/RT/Record.pm:965
-msgid "The new value has been set."
-msgstr "O novo valor foi atribuído."
-
-#: lib/RT/ACE_Overlay.pm:112
-msgid "The owner of a ticket"
-msgstr "O proprietário de um tíquete"
-
-#: lib/RT/ACE_Overlay.pm:113
-msgid "The requestor of a ticket"
-msgstr "O requisitante de um tíquete"
-
-#: 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"
-
-#: lib/RT/CustomField_Overlay.pm:981
-msgid "This custom field does not apply to that object"
-msgstr "Este campo personalizado não se aplica a este objeto"
-
-#: 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"
-
-#: html/Ticket/Elements/PreviewScrips:98
-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:268
-msgid "This tool allows the user to run arbitrary perl modules from within RT."
-msgstr ""
-"Esta ferramenta permite o usuário invocar módulos Perl arbitrários de dentro "
-"do RT."
-
-#: lib/RT/Transaction_Overlay.pm:327
-msgid "This transaction appears to have no content"
-msgstr "Parece que esta transação não tem conteúdo"
-
-#: html/Ticket/Elements/ShowRequestor:72
-#. ($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:422
-msgid "Thu."
-msgstr "Qui."
-
-#: NOT FOUND IN SOURCE
-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"
-
-#: html/Ticket/ModifyAll.html:48 html/Ticket/ModifyAll.html:52
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket #%1 Jumbo update: %2"
-msgstr "Tíquete #%1 Atualização jumbo: %2"
-
-#: 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: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
-#. ($T::Tickets{$template_id}->Id)
-#. ($T::Tickets{$template_id}->id)
-#. ($ticket->Id)
-msgid "Ticket %1"
-msgstr "Tíquete %1"
-
-#: lib/RT/Ticket_Overlay.pm:757 lib/RT/Ticket_Overlay.pm:777
-#. ($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"
-
-#: html/Search/Bulk.html:379 html/Tools/MyDay.html:103 html/Tools/MyDay.html:94 html/Tools/MyDay.html:97
-#. ($Ticket->Id, $_)
-#. ($id, $msg)
-msgid "Ticket %1: %2"
-msgstr "Tíquete %1: %2"
-
-#: html/Admin/Elements/QueueTabs:76
-msgid "Ticket Custom Fields"
-msgstr "Campos Personalizados do Tíquete"
-
-#: html/Ticket/History.html:48 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:324
-msgid "Ticket Resolved"
-msgstr "Tíquete Resolvido"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:71 html/Admin/Global/CustomFields/index.html:83 lib/RT/CustomField_Overlay.pm:1210
-msgid "Ticket Transactions"
-msgstr "Transações do Tíquete"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket attachment"
-msgstr "Arquivo anexo do tíquete"
-
-#: lib/RT/Tickets_Overlay.pm:2036
-msgid "Ticket content"
-msgstr "Conteúdo do tíquete"
-
-#: lib/RT/Tickets_Overlay.pm:2085
-msgid "Ticket content type"
-msgstr "Tipo do conteúdo do tíquete"
-
-#: lib/RT/Ticket_Overlay.pm:605 lib/RT/Ticket_Overlay.pm:619 lib/RT/Ticket_Overlay.pm:630 lib/RT/Ticket_Overlay.pm:765
-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"
-
-#: html/Ticket/Create.html:246
-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"
-
-#: 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"
-
-#: html/Ticket/Display.html:57
-msgid "Ticket metadata"
-msgstr "Metadados do tíquete"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket not found"
-msgstr "Tíquete não encontrado"
-
-#: etc/initialdata:310
-msgid "Ticket status changed"
-msgstr "O estado do tíquete mudou"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket watchers"
-msgstr "Observadores do tíquete"
-
-#: lib/RT/Search/FromSQL.pm:84
-#. (ref $self)
-msgid "TicketSQL search module"
-msgstr "Módulo de busca TiqueteSQL"
-
-#: 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
-msgid "Tickets"
-msgstr "Tíquetes"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets %1 %2"
-msgstr "Tíquetes %1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets %1 by %2"
-msgstr "Tíquetes %1 por %2"
-
-#: html/Tools/Reports/CreatedByDates.html:88
-msgid "Tickets created after"
-msgstr "Tíquetes criados depois de"
-
-#: 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"
-
-#: html/Tools/Reports/ResolvedByDates.html:89
-msgid "Tickets resolved after"
-msgstr "Tíquetes resolvidos depois de"
-
-#: html/Tools/Reports/ResolvedByDates.html:91
-msgid "Tickets resolved before"
-msgstr "Tíquetes resolvidos antes de"
-
-#: html/Approvals/Elements/ShowDependency:50
-msgid "Tickets which depend on this approval:"
-msgstr "Tíquetes dependentes desta aprovação:"
-
-#: html/Search/Elements/PickBasics:136 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:74
-msgid "Time Estimated"
-msgstr "Tempo Estimado"
-
-#: html/Search/Elements/PickBasics:137 html/Ticket/Create.html:198 html/Ticket/Elements/EditBasics:87 lib/RT/Tickets_Overlay.pm:2007
-msgid "Time Left"
-msgstr "Tempo Restante"
-
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:191 html/Ticket/Elements/EditBasics:80 lib/RT/Tickets_Overlay.pm:1982
-msgid "Time Worked"
-msgstr "Tempo Trabalhado"
-
-#: NOT FOUND IN SOURCE
-msgid "Time left"
-msgstr "Tempo restante"
-
-#: html/Elements/Footer:53
-msgid "Time to display"
-msgstr "Tempo de apresentação"
-
-#: NOT FOUND IN SOURCE
-msgid "Time worked"
-msgstr "Tempo trabalhado"
-
-#: NOT FOUND IN SOURCE
-msgid "TimeLeft"
-msgstr "TempoRestanrte"
-
-#: lib/RT/Ticket_Overlay.pm:1169
-msgid "TimeWorked"
-msgstr "TempoTrabalhado"
-
-#: html/Search/Elements/EditFormat:76
-msgid "Title"
-msgstr "Título"
-
-#: 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"
-
-#: html/Elements/Footer:64
-#. ('<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/Ticket_Overlay.pm:1172
-msgid "Told"
-msgstr "Última atualização"
-
-#: html/Admin/Elements/Tabs:70 html/Admin/index.html:90 html/Elements/Tabs:77 html/Tools/index.html:48 html/Tools/index.html:51
-msgid "Tools"
-msgstr "Ferramentas"
-
-#: html/Search/Elements/Chart:132
-msgid "Total"
-msgstr "Total"
-
-#: etc/initialdata:252
-msgid "Transaction"
-msgstr "Transação"
-
-#: lib/RT/Transaction_Overlay.pm:826
-#. ($self->Data)
-msgid "Transaction %1 purged"
-msgstr "Transação %1 removida"
-
-#: lib/RT/Transaction_Overlay.pm:185
-msgid "Transaction Created"
-msgstr "Transação Criada"
-
-#: 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:130
-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/Transaction_Overlay.pm:891
-msgid "Transactions are immutable"
-msgstr "Transações são imutáveis"
-
-#: NOT FOUND IN SOURCE
-msgid "Trying to delete a right: %1"
-msgstr "Tentando remover um direito de acesso: %1"
-
-#: lib/RT/Date.pm:420
-msgid "Tue."
-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
-msgid "Type"
-msgstr "Tipo"
-
-#: lib/RT/ScripCondition_Overlay.pm:130
-msgid "Unimplemented"
-msgstr "Não implementado"
-
-#: html/Admin/Users/Modify.html:91
-msgid "Unix login"
-msgstr "Usuário Unix"
-
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "NomeUsuárioUnix"
-
-#: lib/RT/Attachment_Overlay.pm:291 lib/RT/Record.pm:863
-#. ($ContentEncoding)
-#. ($self->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"
-
-#: html/Search/Build.html:461 lib/RT/Report/Tickets.pm:412
-#. ($key)
-msgid "Unknown field: %1"
-msgstr "Campo desconhecido: %1"
-
-#: html/Elements/SelectResultsPerPage:60
-msgid "Unlimited"
-msgstr "Ilimitado"
-
-#: html/Search/Elements/SelectSearchesForObjects:66
-msgid "Unnamed search"
-msgstr "Busca sen nome"
-
-#: etc/initialdata:32
-msgid "Unprivileged"
-msgstr "Não privilegiado"
-
-#: html/Admin/Elements/EditCustomFields:62
-msgid "Unselected Custom Fields"
-msgstr "Campos Personalizados não selecionados"
-
-#: html/Admin/CustomFields/Objects.html:63
-msgid "Unselected objects"
-msgstr "Objetos não selecionados"
-
-#: lib/RT/Transaction_Overlay.pm:680
-msgid "Untaken"
-msgstr "Não tomado"
-
-#: html/Admin/Elements/EditScrip:130 html/Elements/RT__Ticket/ColumnMap:304 html/Search/Bulk.html:195 html/Search/Bulk.html:77
-msgid "Update"
-msgstr "Atualizar"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "Identificador de atualização"
-
-#: html/Ticket/Update.html:137
-msgid "Update Ticket"
-msgstr "Atualizar Tíquete"
-
-#: html/Search/Bulk.html:128 html/Ticket/ModifyAll.html:89 html/Ticket/Update.html:74
-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"
-
-#: html/Search/Bulk.html:202 html/Search/Results.html:80
-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:752 lib/RT/Interface/Web.pm:606
-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"
-
-#: html/Ticket/ModifyAll.html:86
-msgid "Update ticket"
-msgstr "Atualizar o tíquete"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ticket # %1"
-msgstr "Atualizar o tíquete # %1"
-
-#: html/SelfService/Update.html:114 html/SelfService/Update.html:49
-#. ($Ticket->id)
-msgid "Update ticket #%1"
-msgstr "Atualizar o tíquete #%1"
-
-#: html/Ticket/Update.html:160
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Update ticket #%1 (%2)"
-msgstr "Atualizar tíquete #%1 (%2)"
-
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:605
-msgid "Update type was neither correspondence nor comment."
-msgstr "O tipo da atualização não foi nem correspondência e nem comentário."
-
-#: html/Elements/SelectDateType:56 html/Ticket/Elements/ShowDates:74 lib/RT/CustomField_Overlay.pm:1287 lib/RT/Ticket_Overlay.pm:1173
-msgid "Updated"
-msgstr "Atualizado"
-
-#: html/Tools/Offline.html:95
-msgid "Upload"
-msgstr "Enviar"
-
-#: lib/RT/CustomField_Overlay.pm:86
-msgid "Upload multiple files"
-msgstr "Enviar múltiplos arquivos"
-
-#: lib/RT/CustomField_Overlay.pm:81
-msgid "Upload multiple images"
-msgstr "Enviar múltiplas imagens"
-
-#: lib/RT/CustomField_Overlay.pm:87
-msgid "Upload one file"
-msgstr "Enviar um arquivo"
-
-#: lib/RT/CustomField_Overlay.pm:82
-msgid "Upload one image"
-msgstr "Enviar uma imagem"
-
-#: lib/RT/CustomField_Overlay.pm:88
-msgid "Upload up to %1 files"
-msgstr "Enviar até %1 arquivos"
-
-#: lib/RT/CustomField_Overlay.pm:83
-msgid "Upload up to %1 images"
-msgstr "Enviar até %1 imagens"
-
-#: html/Tools/Offline.html:95
-msgid "Upload your changes"
-msgstr "Enviar suas alterações"
-
-#: html/Admin/index.html:92
-msgid "Use other RT administrative tools"
-msgstr "Usar outras ferramentas administrativas RT"
-
-#: 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:508
-#. ($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"
-
-#: etc/initialdata:132 etc/initialdata:206
-msgid "User Defined"
-msgstr "Definido pelo Usuário"
-
-#: 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"
-
-#: 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
-msgid "User Rights"
-msgstr "Direitos de Acesso de Usuário"
-
-#: html/Admin/Users/Modify.html:305
-#. ($msg)
-msgid "User could not be created: %1"
-msgstr "O usuário não pôde ser criado: %1"
-
-#: lib/RT/User_Overlay.pm:332
-msgid "User created"
-msgstr "Usuário criado"
-
-#: html/Admin/CustomFields/GroupRights.html:76 html/Admin/Global/GroupRights.html:90 html/Admin/Groups/GroupRights.html:77 html/Admin/Queues/GroupRights.html:92
-msgid "User defined groups"
-msgstr "Grupos definidos pelo usuário"
-
-#: lib/RT/User_Overlay.pm:594 lib/RT/User_Overlay.pm:614
-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"
-
-#: html/Admin/Groups/index.html:105
-msgid "User-defined groups"
-msgstr "Grupos definidos pelo usuário"
-
-#: html/Admin/Users/Modify.html:71 html/Elements/Login:92 html/Ticket/Elements/AddWatchers:58
-msgid "Username"
-msgstr "Nome de usuário"
-
-#: 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
-msgid "Users"
-msgstr "Usuários"
-
-#: html/Admin/Users/index.html:87
-msgid "Users matching search criteria"
-msgstr "Usuários que satisfazem o critério de busca"
-
-#: bin/rt-crontool:136
-#. ($transaction->id)
-msgid "Using transaction #%1..."
-msgstr "Usando transação #%1"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:530
-msgid "Valid Query"
-msgstr "Consulta Válida"
-
-#: html/Admin/CustomFields/Modify.html:82
-msgid "Validation"
-msgstr "Validação"
-
-#: NOT FOUND IN SOURCE
-msgid "ValueOfQueue"
-msgstr "Valor da fila"
-
-#: html/Admin/CustomFields/Modify.html:132 html/Admin/Elements/EditCustomField:80
-msgid "Values"
-msgstr "Valores"
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "Watch"
-msgstr "Observar"
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "WatchAsAdminCc"
-msgstr "ObservarcomoAdminCC"
-
-#: NOT FOUND IN SOURCE
-msgid "Watcher loaded"
-msgstr "Observador carregado"
-
-#: html/Admin/Elements/QueueTabs:65
-msgid "Watchers"
-msgstr "Observadores"
-
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "Codificação de Web"
-
-#: lib/RT/Date.pm:421
-msgid "Wed."
-msgstr "Qua."
-
-#: html/Tools/MyDay.html:80
-msgid "What I did today"
-msgstr "O que eu fiz hoje"
-
-#: etc/initialdata:521
-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"
-
-#: etc/initialdata:485
-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:146
-msgid "When a ticket is created"
-msgstr "Quando um tíquete é criado"
-
-#: etc/initialdata:418
-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:151
-msgid "When anything happens"
-msgstr "Quando qualquer coisa acontecer"
-
-#: etc/initialdata:199
-msgid "Whenever a ticket is resolved"
-msgstr "Sempre que um tíquete for resolvido"
-
-#: etc/initialdata:185
-msgid "Whenever a ticket's owner changes"
-msgstr "Sempre que mudar o proprietário de um tíquete"
-
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
-msgid "Whenever a ticket's priority changes"
-msgstr "Sempre que a prioridade de um tíquete for mudada"
-
-#: etc/initialdata:193
-msgid "Whenever a ticket's queue changes"
-msgstr "Sempre que um tíquete mudar de fila"
-
-#: etc/initialdata:170
-msgid "Whenever a ticket's status changes"
-msgstr "Sempre que o estado de um tíquete mudar"
-
-#: etc/initialdata:207
-msgid "Whenever a user-defined condition occurs"
-msgstr "Sempre que ocorrer uma condição definida por usuário"
-
-#: etc/initialdata:164
-msgid "Whenever comments come in"
-msgstr "Sempre que um novo comentário é adicionado"
-
-#: etc/initialdata:157
-msgid "Whenever correspondence comes in"
-msgstr "Sempre que uma nova correspondência é adicionada"
-
-#: html/Admin/Users/Modify.html:191 html/User/Prefs.html:90
-msgid "Work"
-msgstr "Trabalho"
-
-#: html/Search/Results.html:84
-msgid "Work offline"
-msgstr "Trabalhar offline"
-
-#: NOT FOUND IN SOURCE
-msgid "WorkPhone"
-msgstr "Telefone de trabalho"
-
-#: html/Ticket/Elements/ShowBasics:65 html/Ticket/Update.html:66 html/Tools/MyDay.html:65
-msgid "Worked"
-msgstr "Trabalhado"
-
-#: lib/RT/Ticket_Overlay.pm:3166
-msgid "You already own this ticket"
-msgstr "Você já é proprietário deste tíquete"
-
-#: html/autohandler:216 html/autohandler:224
-msgid "You are not an authorized user"
-msgstr "Você não é um usuário autorizado"
-
-#: 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:3048
-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:3044
-msgid "You can only take tickets that are unowned"
-msgstr "Você apenas pode pegar tíquetes que não tem dono"
-
-#: 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"
-
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:778
-#. ($num, $queue)
-msgid "You found %1 tickets in queue %2"
-msgstr "Você encontrou %1 tíquetes na fila %2"
-
-#: html/NoAuth/Logout.html:54
-msgid "You have been logged out of RT."
-msgstr "Você foi desconectado do RT."
-
-#: html/SelfService/Display.html:135
-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:2005
-msgid "You may not create requests in that queue."
-msgstr "Você não pode criar requisições nesta fila."
-
-#: html/NoAuth/Logout.html:58
-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"
-
-#: etc/initialdata:502
-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."
-
-#: etc/initialdata:540
-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"
-
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "Sua requisição foi rejeitada."
-
-#: html/autohandler:253
-msgid "Your username or password is incorrect"
-msgstr "Nome de usuário ou senha incorretos"
-
-#: html/Admin/Users/Modify.html:171 html/User/Prefs.html:151
-msgid "Zip"
-msgstr "CEP"
-
-#: NOT FOUND IN SOURCE
-msgid "[no subject]"
-msgstr "[sem assunto]"
-
-#: html/Search/Elements/DisplayOptions:67
-msgid "[none]"
-msgstr "[nenhum]"
-
-#: lib/RT/System.pm:89
-msgid "allow creation of saved searches"
-msgstr "permite a criação de buscas salvas"
-
-#: lib/RT/System.pm:88
-msgid "allow loading of saved searches"
-msgstr "permite a carga de buscas salvas"
-
-#: html/User/Elements/DelegateRights:82
-#. ($right->PrincipalObj->Object->SelfDescription)
-msgid "as granted to %1"
-msgstr "como outorgado a %1"
-
-#: html/Search/Results.html:85
-msgid "chart"
-msgstr "gráfico"
-
-#: html/SelfService/Closed.html:51
-msgid "closed"
-msgstr "fechado"
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:57
-msgid "contains"
-msgstr "contém"
-
-#: NOT FOUND IN SOURCE
-msgid "content"
-msgstr "conteúdo"
-
-#: 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"
-
-#: html/Admin/Queues/Modify.html:100 lib/RT/Date.pm:348
-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:89
-msgid "deleted"
-msgstr "removido"
-
-#: html/Search/Elements/PickBasics:63
-msgid "does not match"
-msgstr "não satisfaz"
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:58
-msgid "doesn't contain"
-msgstr "não contém"
-
-#: html/Elements/SelectEqualityOperator:61
-msgid "equal to"
-msgstr "igual a"
-
-#: html/Search/Build.html:553
-msgid "error: can't move down"
-msgstr "erro: não pode mover para baixo"
-
-#: html/Search/Build.html:575
-msgid "error: can't move left"
-msgstr "erro: não pode mover para a esquerda"
-
-#: html/Search/Build.html:534
-msgid "error: can't move up"
-msgstr "erro: não pode mover para cima"
-
-#: html/Search/Build.html:618
-msgid "error: nothing to delete"
-msgstr "erro: nada para remover"
-
-#: html/Search/Build.html:539 html/Search/Build.html:558 html/Search/Build.html:580 html/Search/Build.html:609
-msgid "error: nothing to move"
-msgstr "erro: nada para mover"
-
-#: html/Search/Build.html:636
-msgid "error: nothing to toggle"
-msgstr "erro: nada para alternar"
-
-#: NOT FOUND IN SOURCE
-msgid "false"
-msgstr "falso"
-
-#: NOT FOUND IN SOURCE
-msgid "filename"
-msgstr "nome do arquivo"
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
-msgid "greater than"
-msgstr "maior que"
-
-#: lib/RT/Group_Overlay.pm:216
-#. ($self->Name)
-msgid "group '%1'"
-msgstr "grupo '%1'"
-
-#: html/Search/Results.html:90
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr "agrupado por %1"
-
-#: lib/RT/Date.pm:344
-msgid "hours"
-msgstr "horas"
-
-#: html/Search/Elements/PickBasics:50
-msgid "id"
-msgstr "identificador"
-
-#: 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
-msgid "is"
-msgstr "é"
-
-#: 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
-msgid "isn't"
-msgstr "não é"
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
-msgid "less than"
-msgstr "menor que"
-
-#: html/Search/Elements/PickBasics:62
-msgid "matches"
-msgstr "satisfazem"
-
-#: lib/RT/Date.pm:340
-msgid "min"
-msgstr ""
-
-#: html/Tools/MyDay.html:65
-msgid "minutes"
-msgstr "minutos"
-
-#: NOT FOUND IN SOURCE
-msgid "modifications\\n\\n"
-msgstr "modificações\\n\\n"
-
-#: lib/RT/Date.pm:356
-msgid "months"
-msgstr "meses"
-
-#: lib/RT/Queue_Overlay.pm:84
-msgid "new"
-msgstr "novo"
-
-#: html/Admin/Elements/PickCustomFields:66 html/Admin/Elements/PickObjects:67
-msgid "no name"
-msgstr "sem nome"
-
-#: html/Admin/Elements/EditScrips:66
-msgid "no value"
-msgstr "sem valor"
-
-#: html/Admin/Elements/EditQueueWatchers:50 html/Ticket/Elements/EditWatchers:51
-msgid "none"
-msgstr "nenhum"
-
-#: html/Elements/SelectEqualityOperator:61
-msgid "not equal to"
-msgstr "diferente de"
-
-#: NOT FOUND IN SOURCE
-msgid "notlike"
-msgstr "diferente"
-
-#: html/SelfService/Elements/MyRequests:78 lib/RT/Queue_Overlay.pm:85
-msgid "open"
-msgstr "aberto"
-
-#: lib/RT/Group_Overlay.pm:221
-#. ($self->Name, $user->Name)
-msgid "personal group '%1' for user '%2'"
-msgstr "grupo pessoal '%1' para o usuário '%2'"
-
-#: lib/RT/Group_Overlay.pm:229
-#. ($queue->Name, $self->Type)
-msgid "queue %1 %2"
-msgstr "fila %1 %2"
-
-#: lib/RT/Queue_Overlay.pm:88
-msgid "rejected"
-msgstr "rejeitado"
-
-#: lib/RT/Queue_Overlay.pm:87
-msgid "resolved"
-msgstr "resolvido"
-
-#: lib/RT/Date.pm:336
-msgid "sec"
-msgstr "seg"
-
-#: lib/RT/System.pm:87
-msgid "show Configuration tab"
-msgstr "mostrar aba de Configuração"
-
-#: html/Search/Results.html:82
-msgid "spreadsheet"
-msgstr "planilha"
-
-#: lib/RT/Queue_Overlay.pm:86
-msgid "stalled"
-msgstr "pendente"
-
-#: html/Search/Results.html:91
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr "Estilo: %1"
-
-#: html/Prefs/MyRT.html:95
-msgid "summary rows"
-msgstr "linhas do sumário"
-
-#: lib/RT/Group_Overlay.pm:224
-#. ($self->Type)
-msgid "system %1"
-msgstr "sistema %1"
-
-#: lib/RT/Group_Overlay.pm:235
-#. ($self->Type)
-msgid "system group '%1'"
-msgstr "grupo do sistema '%1'"
-
-#: html/Elements/Error:66 html/SelfService/Error.html:65
-msgid "the calling component did not specify why"
-msgstr "o componente chamador não especificou por que"
-
-#: lib/RT/Group_Overlay.pm:232
-#. ($self->Instance, $self->Type)
-msgid "ticket #%1 %2"
-msgstr "tíquete #%1 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "true"
-msgstr "verdadeiro"
-
-#: lib/RT/Group_Overlay.pm:238
-#. ($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:213
-#. ($user->Object->Name)
-msgid "user %1"
-msgstr "usuário %1"
-
-#: lib/RT/Date.pm:352
-msgid "weeks"
-msgstr "semanas"
-
-#: NOT FOUND IN SOURCE
-msgid "with template %1"
-msgstr "com modelo %1"
-
-#: lib/RT/Date.pm:360
-msgid "years"
-msgstr "anos"
-
diff --git a/rt/lib/RT/I18N/pt_pt.po b/rt/lib/RT/I18N/pt_pt.po
deleted file mode 100644
index fa32e0e33..000000000
--- a/rt/lib/RT/I18N/pt_pt.po
+++ /dev/null
@@ -1,5194 +0,0 @@
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: RT 3.5.x\n"
-"PO-Revision-Date: 2008-05-12 12:00-0000\n"
-"Last-Translator: RICARDO OLIVEIRA <rmo@eurotux.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"
-
-#: html/Widgets/SavedSearch:117
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr " %1 apagado"
-
-#: html/Widgets/SavedSearch:94
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr " %1 alterado para %2."
-
-#: html/Widgets/SavedSearch:107
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr " %1 gravado"
-
-#: 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
-#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->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
-#. ($self->ObjectType, $self->Object->Id)
-msgid "%1 #%2"
-msgstr "%1 #%2"
-
-#: lib/RT/Date.pm:367
-#. ($s, $time_unit)
-msgid "%1 %2"
-msgstr "%1 %2"
-
-#: lib/RT/Tickets_Overlay.pm:1684
-#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'})
-msgid "%1 %2 %3"
-msgstr ""
-
-#: lib/RT/Date.pm:403
-#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
-msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%1 %2 %3 %4:%5:%6 %7"
-
-#: lib/RT/Record.pm:1707 lib/RT/Transaction_Overlay.pm:668 lib/RT/Transaction_Overlay.pm:711
-#. ($cf->Name, $new_value->Content)
-#. ($field, $self->NewValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 added"
-msgstr "%1 %2 adicionado"
-
-#: lib/RT/Date.pm:364
-#. ($s, $time_unit)
-msgid "%1 %2 ago"
-msgstr "há %1 %2"
-
-#: lib/RT/Record.pm:1714 lib/RT/Transaction_Overlay.pm:675
-#. ($cf->Name, $old_content, $new_value->Content)
-#. ($field, $self->OldValue, $self->NewValue)
-msgid "%1 %2 changed to %3"
-msgstr "%1 %2 alterado para %3"
-
-#: lib/RT/Record.pm:1711 lib/RT/Transaction_Overlay.pm:671 lib/RT/Transaction_Overlay.pm:717
-#. ($cf->Name, $old_value->Content)
-#. ($field, $self->OldValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 deleted"
-msgstr "%1 %2 apagado"
-
-#: html/Admin/Elements/EditScrips:67 html/Admin/Elements/ListGlobalScrips:65 html/Ticket/Elements/PreviewScrips:105
-#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
-msgid "%1 %2 with template %3"
-msgstr ""
-
-#: html/Ticket/Elements/ShowAttachments:74
-#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
-msgid "%1 (%2) by %3"
-msgstr "%1 (%2) por %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))
-#. (loc($Ticket->Status()))
-#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-msgid "%1 (Unchanged)"
-msgstr "%1 (inalterado)"
-
-#: bin/rt-crontool:239 bin/rt-crontool:246 bin/rt-crontool:252
-#. ("--search-argument", "--search")
-#. ("--condition-argument", "--condition")
-#. ("--action-argument", "--action")
-msgid "%1 - An argument to pass to %2"
-msgstr ""
-
-#: bin/rt-crontool:264
-#. ("--verbose")
-msgid "%1 - Output status updates to STDOUT"
-msgstr ""
-
-#: bin/rt-crontool:255
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
-msgstr ""
-
-#: bin/rt-crontool:258
-#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' transaction"
-msgstr ""
-
-#: bin/rt-crontool:249
-#. ("--action")
-msgid "%1 - Specify the action module you want to use"
-msgstr ""
-
-#: bin/rt-crontool:243
-#. ("--condition")
-msgid "%1 - Specify the condition module you want to use"
-msgstr ""
-
-#: bin/rt-crontool:236
-#. ("--search")
-msgid "%1 - Specify the search module you want to use"
-msgstr ""
-
-#: bin/rt-crontool:261
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%1 - Especifique o tipo de transacção que quer usar"
-
-#: html/Elements/Footer:58
-#. ('&#187;&#124;&#171;', $RT::VERSION, '2006', '<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:152
-#. ($self->Id)
-msgid "%1 ScripAction loaded"
-msgstr ""
-
-#: lib/RT/Record.pm:1744
-#. ($args{'Value'}, $cf->Name)
-msgid "%1 added as a value for %2"
-msgstr "%1 adicionado como valor de %2"
-
-#: lib/RT/Link_Overlay.pm:146 lib/RT/Link_Overlay.pm:153
-#. ($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:75 lib/RT/Transaction_Overlay.pm:552
-#. ($self->BriefDescription , $self->CreatorObj->Name)
-#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
-msgid "%1 by %2"
-msgstr "%1 por %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'}) . '"')
-#. ($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."'")
-msgid "%1 changed from %2 to %3"
-msgstr "%1 alterado de %2 para %3"
-
-#: html/Search/Build.html:215
-#. ($Description)
-msgid "%1 copy"
-msgstr "cópia %1"
-
-#: lib/RT/Record.pm:961
-msgid "%1 could not be set to %2."
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2789
-#. ($self)
-msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:592
-#. ($obj_type)
-msgid "%1 created"
-msgstr "%1 criado"
-
-#: lib/RT/Transaction_Overlay.pm:597
-#. ($obj_type)
-msgid "%1 deleted"
-msgstr "%1 apagado"
-
-#: etc/initialdata:593
-msgid "%1 highest priority tickets I own"
-msgstr "%1 tickets com maior prioridade da minha responsabilidade"
-
-#: bin/rt-crontool:231
-#. ($0)
-msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:867
-#. ($principal->Object->Name, $args{'Type'})
-msgid "%1 is no longer a %2 for this queue."
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1576
-#. ($principal->Object->Name, $args{'Type'})
-msgid "%1 is no longer a %2 for this ticket."
-msgstr ""
-
-#: lib/RT/Record.pm:1801
-#. ($TransactionObj->OldValue, $cf->Name)
-msgid "%1 is no longer a value for custom field %2"
-msgstr ""
-
-#: html/Ticket/Elements/ShowTime:49 html/Ticket/Elements/ShowTime:51
-#. ($minutes)
-msgid "%1 min"
-msgstr "%1 min"
-
-#: etc/initialdata:601
-msgid "%1 newest unowned tickets"
-msgstr "%1 tickets mais recentes sem responsável atribuído"
-
-#: lib/RT/CustomField_Overlay.pm:896
-msgid "%1 objects"
-msgstr ""
-
-#: html/User/Elements/DelegateRights:99
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr ""
-
-#: lib/RT/Action/ResolveMembers.pm:65
-#. (ref $self)
-msgid "%1 will resolve all members of a resolved group ticket."
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:897
-msgid "%1's %2 objects"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:898
-msgid "%1's %2's %3 objects"
-msgstr ""
-
-#: html/Search/Elements/SearchPrivacy:54 html/Search/Elements/SelectSearchObject:57 html/Search/Elements/SelectSearchesForObjects:59
-#. ($object->Name)
-#. ($Object->Name)
-msgid "%1's saved searches"
-msgstr "Pesquisas gravadas de %1"
-
-#: lib/RT/Transaction_Overlay.pm:502
-#. ($self)
-msgid "%1: no attachment specified"
-msgstr "%1: anexo não especificado"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:80
-#. ($size)
-msgid "%1b"
-msgstr ""
-
-#: html/Ticket/Elements/ShowTransactionAttachments:77
-#. (int( $size / 102.4 ) / 10)
-msgid "%1k"
-msgstr ""
-
-#: html/Ticket/Elements/ShowTime:51
-#. (sprintf("%.1f",$minutes / 60))
-msgid "%quant(%1,hour)"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1144
-#. ($args{'Status'})
-msgid "'%1' is an invalid value for status"
-msgstr ""
-
-#: 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
-msgid "(Check box to delete)"
-msgstr "(Seleccione caixa para apagar)"
-
-#: html/Ticket/Elements/PreviewScrips:101
-msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr "(Seleccione caixas para desactivar notificações para os destinatários listados)"
-
-#: html/Ticket/Elements/PreviewScrips:125
-msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr "(Seleccione caixas para activar notificações para os destinatários listados)"
-
-#: html/Ticket/Create.html:221
-msgid "(Enter ticket ids or URLs, separated with spaces)"
-msgstr "(Insira identificadores de tickets, separados por espaços)"
-
-#: html/Admin/Queues/Modify.html:77 html/Admin/Queues/Modify.html:83
-#. ($RT::CorrespondAddress)
-#. ($RT::CommentAddress)
-msgid "(If left blank, will default to %1)"
-msgstr "(Por omissão será %1)"
-
-#: html/Admin/Elements/EditCustomFields:76 html/Admin/Elements/ListGlobalCustomFields:55
-msgid "(No custom fields)"
-msgstr ""
-
-#: html/Admin/Groups/Members.html:73 html/User/Groups/Members.html:76
-msgid "(No members)"
-msgstr "(Sem membros)"
-
-#: html/Admin/Elements/EditScrips:55 html/Admin/Elements/ListGlobalScrips:50
-msgid "(No scrips)"
-msgstr ""
-
-#: html/Admin/Elements/EditTemplates:54
-msgid "(No templates)"
-msgstr ""
-
-#: html/Admin/Elements/PickCustomFields:49 html/Admin/Elements/PickObjects:49
-msgid "(None)"
-msgstr "(Nada)"
-
-#: 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 ""
-
-#: html/Ticket/Create.html:105
-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: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 ""
-
-#: html/Ticket/Create.html:95
-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:98
-msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
-msgstr ""
-
-#: html/Ticket/Elements/EditWatchers:62 html/Ticket/Elements/ShowUserEntry:55
-msgid "(Will not be sent email)"
-msgstr "(Não vai ser enviado email)"
-
-#: html/Tools/MyDay.html:53
-#. ($session{'CurrentUser'}->Name)
-msgid "(displaying new and open tickets for %1)"
-msgstr "(mostrar tickets novos e abertos de %1)"
-
-#: html/Admin/Groups/index.html:59 html/User/Groups/index.html:56
-msgid "(empty)"
-msgstr "(vazio)"
-
-#: html/Admin/Users/index.html:62
-msgid "(no name listed)"
-msgstr "(sem nome)"
-
-#: 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
-msgid "(no value)"
-msgstr "(sem valor)"
-
-#: html/Admin/Elements/EditCustomFieldValues:49
-msgid "(no values)"
-msgstr "(sem valores)"
-
-#: html/Elements/EditLinks:133 html/Ticket/Elements/BulkLinks:51
-msgid "(only one ticket)"
-msgstr "(apenas um ticket)"
-
-#: html/Elements/RT__Ticket/ColumnMap:151
-msgid "(pending approval)"
-msgstr "(aprovações pendentes)"
-
-#: html/Elements/RT__Ticket/ColumnMap:154
-msgid "(pending other Collection)"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:73
-msgid "(required)"
-msgstr "(obrigatório)"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:84
-msgid "(untitled)"
-msgstr ""
-
-#: html/Ticket/Elements/Reminders:135
-msgid "(yyyy/mm/dd)"
-msgstr ""
-
-#: html/Elements/EditCustomFieldSelect:59
-msgid "-"
-msgstr ""
-
-#: bin/rt-crontool:97
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:55
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket->Status%>"
-
-#: html/Elements/SelectTicketTypes:50
-msgid "<% $_ %>"
-msgstr "<% $_ %>"
-
-#: html/Search/Elements/SelectLinks:50
-msgid "<%$_%>"
-msgstr "<%$_%>"
-
-#: html/Search/Elements/DisplayOptions:75
-msgid "<%$field%>"
-msgstr "<%$field%>"
-
-#: html/Elements/CreateTicket:49
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"Novo Pedido em\" />&nbsp;%1"
-
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:785
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"Novo Pedido em\">&nbsp;%1"
-
-#: etc/initialdata:218
-msgid "A blank template"
-msgstr "Template em branco"
-
-#: html/Admin/Users/Modify.html:375
-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:176 lib/RT/Principal_Overlay.pm:221
-msgid "ACE not found"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:855
-msgid "ACEs can only be created and deleted."
-msgstr ""
-
-#: html/Search/Elements/SelectAndOr:48
-msgid "AND"
-msgstr "E"
-
-#: html/User/Elements/Tabs:55
-msgid "About me"
-msgstr "Sobre mim"
-
-#: html/Admin/Users/Modify.html:108
-msgid "Access control"
-msgstr "Controle de Acesso"
-
-#: html/Admin/Elements/EditScrip:67
-msgid "Action"
-msgstr "Acção"
-
-#: lib/RT/Scrip_Overlay.pm:174
-#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "Acção %1 não encontrada"
-
-#: bin/rt-crontool:173
-msgid "Action committed.\\n"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:170
-msgid "Action is mandatory argument"
-msgstr ""
-
-#: bin/rt-crontool:169
-msgid "Action prepared..."
-msgstr ""
-
-#: html/Search/Build.html:87
-msgid "Add"
-msgstr "Adicionar"
-
-#: html/Search/Bulk.html:94
-msgid "Add AdminCc"
-msgstr "Adicionar AdminCc"
-
-#: html/Search/Bulk.html:90
-msgid "Add Cc"
-msgstr "Adicionar Cc"
-
-#: html/Search/Elements/EditFormat:51
-msgid "Add Columns"
-msgstr "Adicionar colunas"
-
-#: html/Search/Elements/PickCriteria:48
-msgid "Add Criteria"
-msgstr "Adicionar critérios"
-
-#: html/Ticket/Create.html:149 html/Ticket/Update.html:118
-msgid "Add More Files"
-msgstr "Adicionar mais ficheiros"
-
-#: html/Search/Bulk.html:86
-msgid "Add Requestor"
-msgstr ""
-
-#: html/Admin/Elements/AddCustomFieldValue:48
-msgid "Add Value"
-msgstr ""
-
-#: html/Admin/Global/Scrip.html:85
-msgid "Add a scrip which will apply to all queues"
-msgstr ""
-
-#: html/Search/Build.html:111 html/Search/Build.html:96
-msgid "Add and Search"
-msgstr "Adicionar e pesquisar"
-
-#: html/Search/Bulk.html:126
-msgid "Add comments or replies to selected tickets"
-msgstr "Adicionar comentários ou respostas aos tickets seleccionados"
-
-#: html/Admin/Groups/Members.html:65 html/User/Groups/Members.html:62
-msgid "Add members"
-msgstr "Adicionar membros"
-
-#: html/Admin/Queues/People.html:89 html/Ticket/Elements/AddWatchers:51
-msgid "Add new watchers"
-msgstr "Adicionar novos watchers"
-
-#: html/Search/Build.html:87
-msgid "Add these terms to your search"
-msgstr "Adicionar estes termos à sua pesquisa"
-
-#: html/Search/Bulk.html:160
-msgid "Add values"
-msgstr "Adicionar valores"
-
-#: lib/RT/CustomField_Overlay.pm:110
-msgid "Add, delete and modify custom field values for objects"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:758
-#. ($args{'Type'})
-msgid "Added principal as a %1 for this queue"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1448
-#. ($self->loc($args{'Type'}))
-msgid "Added principal as a %1 for this ticket"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:149 html/User/Prefs.html:135
-msgid "Address1"
-msgstr "Endereço (1)"
-
-#: html/Admin/Users/Modify.html:154 html/User/Prefs.html:139
-msgid "Address2"
-msgstr "Endereço (2)"
-
-#: html/Ticket/Create.html:100
-msgid "Admin Cc"
-msgstr ""
-
-#: etc/initialdata:295
-msgid "Admin Comment"
-msgstr "Comentário de Admin"
-
-#: etc/initialdata:274
-msgid "Admin Correspondence"
-msgstr ""
-
-#: html/Admin/Queues/index.html:48 html/Admin/Queues/index.html:51
-msgid "Admin queues"
-msgstr ""
-
-#: html/Admin/Global/index.html:49 html/Admin/Global/index.html:51
-msgid "Admin/Global configuration"
-msgstr ""
-
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:62 lib/RT/ACE_Overlay.pm:115
-msgid "AdminCc"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "AdminCustomField"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "AdminGroup"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:167
-msgid "AdminGroupMembership"
-msgstr ""
-
-#: lib/RT/System.pm:82
-msgid "AdminOwnPersonalGroups"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "AdminQueue"
-msgstr ""
-
-#: lib/RT/System.pm:83
-msgid "AdminUsers"
-msgstr ""
-
-#: html/Admin/Queues/People.html:71 html/Ticket/Elements/EditPeople:77
-msgid "Administrative Cc"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:218
-msgid "Advanced"
-msgstr "Avançado"
-
-#: html/Elements/SelectDateRelation:59
-msgid "After"
-msgstr ""
-
-#: html/Search/Elements/PickCriteria:54
-msgid "Aggregator"
-msgstr "Agregador"
-
-#: etc/initialdata:363
-msgid "All Approvals Passed"
-msgstr "Todas as aprovações tratadas"
-
-#: html/Admin/Queues/index.html:77
-msgid "All Queues"
-msgstr "Todas as Queues"
-
-#: html/Search/Elements/EditQuery:58
-msgid "And/Or"
-msgstr "E/Ou"
-
-#: html/Admin/CustomFields/Modify.html:75 html/Admin/Elements/CustomFieldTabs:85
-msgid "Applies to"
-msgstr "Aplica-se a"
-
-#: html/Search/Edit.html:66
-msgid "Apply"
-msgstr "Aplicar"
-
-#: html/Search/Edit.html:66
-msgid "Apply your changes"
-msgstr "Aplicar as alterações"
-
-#: html/Elements/Tabs:80
-msgid "Approval"
-msgstr "Aprovação"
-
-#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:65 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"
-
-#: html/Approvals/index.html:77
-#. ($ticket->Id)
-msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr ""
-
-#: html/Approvals/index.html:75
-#. ($ticket->Id)
-msgid "Approval #%1: Notes recorded"
-msgstr ""
-
-#: etc/initialdata:351
-msgid "Approval Passed"
-msgstr ""
-
-#: etc/initialdata:374
-msgid "Approval Rejected"
-msgstr ""
-
-#: html/Approvals/Elements/Approve:71
-msgid "Approve"
-msgstr ""
-
-#: etc/initialdata:504 etc/initialdata:506
-#. (# loc $note)
-msgid "Approver's notes: %1"
-msgstr ""
-
-#: lib/RT/Date.pm:446
-msgid "Apr."
-msgstr "Apr"
-
-#: html/Search/Elements/DisplayOptions:83
-msgid "Asc"
-msgstr "Asc"
-
-#: html/Elements/SelectSortOrder:58
-msgid "Ascending"
-msgstr "Ascendente"
-
-#: lib/RT/Queue_Overlay.pm:98
-msgid "Assign and remove custom fields"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:98
-msgid "AssignCustomFields"
-msgstr ""
-
-#: html/Search/Bulk.html:144 html/SelfService/Update.html:89 html/Ticket/ModifyAll.html:117 html/Ticket/Update.html:118
-msgid "Attach"
-msgstr "Anexar"
-
-#: html/SelfService/Create.html:94 html/Ticket/Create.html:145
-msgid "Attach file"
-msgstr "Anexar ficheiro"
-
-#: html/SelfService/Update.html:77 html/Ticket/Create.html:133 html/Ticket/Update.html:96
-msgid "Attached file"
-msgstr "Ficheiro anexo"
-
-#: html/Ticket/ShowEmailRecord.html:54 html/Ticket/ShowEmailRecord.html:58 html/Ticket/ShowEmailRecord.html:61
-#. ($Attachment)
-msgid "Attachment '%1' could not be loaded"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:510
-msgid "Attachment created"
-msgstr "Anexo criado"
-
-#: lib/RT/Tickets_Overlay.pm:2134
-msgid "Attachment filename"
-msgstr ""
-
-#: html/Ticket/Elements/ShowAttachments:49
-msgid "Attachments"
-msgstr "Anexos"
-
-#: lib/RT/Attributes_Overlay.pm:173
-msgid "Attribute Deleted"
-msgstr ""
-
-#: lib/RT/Date.pm:450
-msgid "Aug."
-msgstr "Aug"
-
-#: etc/initialdata:221
-msgid "Autoreply"
-msgstr "Resposta automática"
-
-#: etc/initialdata:72
-msgid "Autoreply To Requestors"
-msgstr "Resposta automática para utilizadores"
-
-#: html/Widgets/SelectionBox:191
-msgid "Available"
-msgstr "Disponível"
-
-#: 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
-msgid "Basics"
-msgstr "Informação básica"
-
-#: 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
-msgid "Be sure to save your changes"
-msgstr ""
-
-#: html/Elements/SelectDateRelation:57 lib/RT/CurrentUser.pm:363
-msgid "Before"
-msgstr "Antes"
-
-#: html/Elements/Logo:49
-msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
-
-#: etc/initialdata:217
-msgid "Blank"
-msgstr "Branco"
-
-#: html/Search/Elements/EditFormat:86
-msgid "Bold"
-msgstr ""
-
-#: html/Search/Results.html:81
-msgid "Bookmarkable link"
-msgstr ""
-
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:71
-msgid "Brief headers"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:228
-msgid "Bulk Update"
-msgstr "Actualização em bloco"
-
-#: lib/RT/User_Overlay.pm:1855
-msgid "Can not modify system users"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "Can this principal see this queue"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:382
-msgid "Can't add a custom field value without a name"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:88
-#. ($Class)
-msgid "Can't find a collection class for '%1'"
-msgstr ""
-
-#: html/Search/Build.html:288
-msgid "Can't find a saved search to work with"
-msgstr "Impossível encontrar a pesquisa gravada definida"
-
-#: lib/RT/Link_Overlay.pm:161
-msgid "Can't link a ticket to itself"
-msgstr ""
-
-#: html/Widgets/SavedSearch:110
-#. (loc($self->{SearchType}))
-msgid "Can't save %1"
-msgstr ""
-
-#: html/Search/Build.html:292
-msgid "Can't save this search"
-msgstr "Não é possível gravar esta pesquisa"
-
-#: lib/RT/Record.pm:1304 lib/RT/Record.pm:1380
-msgid "Can't specifiy both base and target"
-msgstr ""
-
-#: html/autohandler:206
-#. ($msg)
-msgid "Cannot create user: %1"
-msgstr "Não é possível criar utilizador: %1"
-
-#: html/Admin/Elements/AddCustomFieldValue:64 html/Admin/Elements/EditCustomFieldValues:60
-msgid "Category"
-msgstr "Categoria"
-
-#: 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
-msgid "Cc"
-msgstr ""
-
-#: html/SelfService/Prefs.html:54
-msgid "Change password"
-msgstr "Mudar password"
-
-#: html/Elements/Submit:80
-msgid "Check All"
-msgstr "Seleccionar todos"
-
-#: html/SelfService/Update.html:80 html/Ticket/Create.html:136 html/Ticket/Update.html:99
-msgid "Check box to delete"
-msgstr "Seleccione caixa para apagar"
-
-#: html/Admin/Elements/SelectRights:57
-msgid "Check box to revoke right"
-msgstr ""
-
-#: html/Elements/EditLinks:149 html/Elements/EditLinks:86 html/Elements/ShowLinks:80 html/Ticket/Create.html:226 html/Ticket/Elements/BulkLinks:66
-msgid "Children"
-msgstr "Filhos"
-
-#: html/NoAuth/js/util.js:203
-msgid "Choose a date"
-msgstr "Escolha uma data"
-
-#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:143
-msgid "City"
-msgstr "Cidade"
-
-#: html/Widgets/SelectionBox:214
-msgid "Clear"
-msgstr ""
-
-#: html/Elements/Submit:82
-msgid "Clear All"
-msgstr "Limpar todos"
-
-#: html/Helpers/CalPopup.html:53
-msgid "Close window"
-msgstr "Fechar janela"
-
-#: html/Ticket/Elements/ShowDates:70
-msgid "Closed"
-msgstr "Fechado"
-
-#: html/SelfService/Closed.html:48 html/SelfService/Elements/Tabs:81
-msgid "Closed tickets"
-msgstr "Tickets fechados"
-
-#: lib/RT/CustomField_Overlay.pm:91
-msgid "Combobox: Select or enter multiple values"
-msgstr "Seleccione ou insira valores múltiplos"
-
-#: lib/RT/CustomField_Overlay.pm:92
-msgid "Combobox: Select or enter one value"
-msgstr "Seleccione ou insira um valor"
-
-#: lib/RT/CustomField_Overlay.pm:93
-msgid "Combobox: Select or enter up to %1 values"
-msgstr "Seleccione ou insira até %1 valores"
-
-#: html/Ticket/Elements/ShowTransaction:193 html/Ticket/Elements/Tabs:187
-msgid "Comment"
-msgstr "Comentário"
-
-#: html/Admin/Queues/Modify.html:81
-msgid "Comment Address"
-msgstr "Morada de Comentário"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "Comment on tickets"
-msgstr "Comentar tickets"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "CommentOnTicket"
-msgstr ""
-
-#: html/Tools/MyDay.html:67
-msgid "Comments"
-msgstr "Comentários"
-
-#: html/Ticket/ModifyAll.html:93 html/Ticket/Update.html:77
-msgid "Comments (Not sent to requestors)"
-msgstr "Comentários (não so enviados para utilizadores)"
-
-#: html/Search/Bulk.html:130
-msgid "Comments (not sent to requestors)"
-msgstr "Comentários (não so enviados para utilizadores)"
-
-#: html/Admin/Users/Modify.html:229 html/Ticket/Elements/ShowRequestor:69
-msgid "Comments about this user"
-msgstr "Comentários sobre este utilizador"
-
-#: lib/RT/Transaction_Overlay.pm:655
-msgid "Comments added"
-msgstr "Comentários adicionados"
-
-#: lib/RT/Action/Generic.pm:177
-msgid "Commit Stubbed"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:61
-msgid "Condition"
-msgstr "Condição"
-
-#: lib/RT/Scrip_Overlay.pm:186
-msgid "Condition is mandatory argument"
-msgstr "Condição é argumento obrigatório"
-
-#: bin/rt-crontool:153
-msgid "Condition matches..."
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:190
-msgid "Condition not found"
-msgstr ""
-
-#: html/Elements/Tabs:87
-msgid "Configuration"
-msgstr "Configuração"
-
-#: html/SelfService/Prefs.html:56
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: html/Admin/Elements/ModifyTemplate:67 html/Elements/SelectAttachmentField:50 html/Ticket/ModifyAll.html:121
-msgid "Content"
-msgstr "Conteúdo"
-
-#: html/Elements/SelectAttachmentField:51
-msgid "Content-Type"
-msgstr ""
-
-#: html/Search/Elements/EditSearches:67
-msgid "Copy"
-msgstr "Copiar"
-
-#: etc/initialdata:286
-msgid "Correspondence"
-msgstr "Correspondência"
-
-#: lib/RT/Transaction_Overlay.pm:651
-msgid "Correspondence added"
-msgstr "Correspondência adicionada"
-
-#: lib/RT/Record.pm:1682 lib/RT/Record.pm:1729
-#. ($value_msg)
-msgid "Could not add new custom field value: %1"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3062 lib/RT/Ticket_Overlay.pm:3070 lib/RT/Ticket_Overlay.pm:3087
-msgid "Could not change owner. "
-msgstr "Não foi possível alterar responsável"
-
-#: html/Admin/CustomFields/Modify.html:163
-#. ($msg)
-msgid "Could not create CustomField"
-msgstr ""
-
-#: html/Admin/Elements/EditCustomField:115
-#. ($msg)
-msgid "Could not create CustomField: %1"
-msgstr ""
-
-#: html/User/Groups/Modify.html:100 lib/RT/Group_Overlay.pm:496 lib/RT/Group_Overlay.pm:503
-msgid "Could not create group"
-msgstr ""
-
-#: html/Admin/Global/Template.html:94 html/Admin/Queues/Template.html:95
-#. ($msg)
-msgid "Could not create template: %1"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1077 lib/RT/Ticket_Overlay.pm:409
-msgid "Could not create ticket. Queue not set"
-msgstr "Não é possível criar pedido. Especifique uma fila."
-
-#: 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
-msgid "Could not create user"
-msgstr "Não foi possível criar utilizador"
-
-#: lib/RT/Queue_Overlay.pm:737 lib/RT/Ticket_Overlay.pm:1416
-msgid "Could not find or create that user"
-msgstr "Não foi possível criar ou encontrar esse utilizador"
-
-#: lib/RT/Queue_Overlay.pm:804 lib/RT/Ticket_Overlay.pm:1497
-msgid "Could not find that principal"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:71
-msgid "Could not load CustomField %1"
-msgstr ""
-
-#: html/Admin/Groups/Members.html:114 html/User/Groups/Members.html:113 html/User/Groups/Modify.html:105
-msgid "Could not load group"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:121
-#. ($privacy)
-msgid "Could not load object for %1"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:199
-msgid "Could not load search attribute"
-msgstr "Não é possível carregar o atributo da pesquisa"
-
-#: lib/RT/Queue_Overlay.pm:756
-#. ($args{'Type'})
-msgid "Could not make that principal a %1 for this queue"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1437
-#. ($self->loc($args{'Type'}))
-msgid "Could not make that principal a %1 for this ticket"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:864
-#. ($args{'Type'})
-msgid "Could not remove that principal as a %1 for this queue"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1564
-#. ($args{'Type'})
-msgid "Could not remove that principal as a %1 for this ticket"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:193
-msgid "Could not set user info"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:161
-msgid "Couldn't add attachment"
-msgstr "Não foi possível adicionar anexo"
-
-#: lib/RT/Group_Overlay.pm:1005
-msgid "Couldn't add member to group"
-msgstr "Não foi possível adicionar membro a grupo"
-
-#: lib/RT/Record.pm:1741 lib/RT/Record.pm:1793
-#. ($Msg)
-msgid "Couldn't create a transaction: %1"
-msgstr "Não foi possível criar uma transacção: %1"
-
-#: lib/RT/Record.pm:970
-msgid "Couldn't find row"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:979
-msgid "Couldn't find that principal"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:412
-msgid "Couldn't find that value"
-msgstr ""
-
-#: lib/RT/CurrentUser.pm:147
-#. ($self->Id)
-msgid "Couldn't load %1 from the users database.\\n"
-msgstr ""
-
-#: html/Admin/CustomFields/UserRights.html:151
-#. ($id)
-msgid "Couldn't load Class %1"
-msgstr ""
-
-#: html/Admin/CustomFields/GroupRights.html:109
-#. ($id)
-msgid "Couldn't load CustomField %1"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2009
-#. ($self->Id)
-msgid "Couldn't load copy of ticket #%1."
-msgstr ""
-
-#: html/Admin/Groups/GroupRights.html:111 html/Admin/Groups/UserRights.html:98
-#. ($id)
-msgid "Couldn't load group %1"
-msgstr ""
-
-#: lib/RT/Link_Overlay.pm:204 lib/RT/Link_Overlay.pm:213 lib/RT/Link_Overlay.pm:240
-msgid "Couldn't load link"
-msgstr ""
-
-#: html/Admin/Elements/ObjectCustomFields:85 html/Admin/Queues/CustomFields.html:61 html/Admin/Users/CustomFields.html:61
-#. ($id)
-msgid "Couldn't load object %1"
-msgstr ""
-
-#: html/Admin/Queues/People.html:144
-#. ($id)
-msgid "Couldn't load queue"
-msgstr ""
-
-#: html/Admin/Queues/GroupRights.html:124 html/Admin/Queues/UserRights.html:95
-#. ($id)
-msgid "Couldn't load queue %1"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:128 html/Admin/Elements/EditScrip:169
-#. ($id)
-msgid "Couldn't load scrip #%1"
-msgstr ""
-
-#: html/SelfService/Display.html:160 lib/RT/Action/CreateTickets.pm:682
-#. ($id)
-msgid "Couldn't load ticket '%1'"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2637
-#. ($args{'URI'})
-msgid "Couldn't resolve '%1' into a URI."
-msgstr ""
-
-#: lib/RT/Link_Overlay.pm:113
-#. ($args{'Base'})
-msgid "Couldn't resolve base '%1' into a URI."
-msgstr ""
-
-#: lib/RT/Link_Overlay.pm:128
-#. ($args{'Target'})
-msgid "Couldn't resolve target '%1' into a URI."
-msgstr ""
-
-#: html/Admin/Users/Modify.html:176 html/User/Prefs.html:155
-msgid "Country"
-msgstr "País"
-
-#: 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
-msgid "Create"
-msgstr "Criar"
-
-#: etc/initialdata:135
-msgid "Create Tickets"
-msgstr "Criar tickets"
-
-#: html/Admin/CustomFields/Modify.html:152 html/Admin/Elements/EditCustomField:98
-msgid "Create a CustomField"
-msgstr ""
-
-#: html/Admin/Queues/CustomField.html:71
-#. ($QueueObj->Name())
-msgid "Create a CustomField for queue %1"
-msgstr ""
-
-#: html/Admin/Groups/Modify.html:105 html/Admin/Groups/Modify.html:131
-msgid "Create a new group"
-msgstr "Criar novo grupo"
-
-#: html/User/Groups/Modify.html:115 html/User/Groups/Modify.html:90
-msgid "Create a new personal group"
-msgstr ""
-
-#: html/Ticket/Create.html:49 html/Ticket/Create.html:53 html/Ticket/Create.html:62
-msgid "Create a new ticket"
-msgstr "Criar novo ticket"
-
-#: html/Admin/Users/Modify.html:256 html/Admin/Users/Modify.html:318
-msgid "Create a new user"
-msgstr "Criar novo utilizador"
-
-#: html/Admin/Queues/Modify.html:127
-msgid "Create a queue"
-msgstr "Criar queue"
-
-#: html/Admin/Queues/Scrip.html:91
-#. ($QueueObj->Name)
-msgid "Create a scrip for queue %1"
-msgstr ""
-
-#: html/Admin/Global/Template.html:87 html/Admin/Queues/Template.html:88
-msgid "Create a template"
-msgstr "Criar template"
-
-#: html/SelfService/Create.html:48 html/SelfService/CreateTicketInQueue.html:48
-msgid "Create a ticket"
-msgstr "Criar ticket"
-
-#: etc/initialdata:137
-msgid "Create new tickets based on this scrip's template"
-msgstr "Criar novo pedido baseado num modelo existente"
-
-#: html/SelfService/Create.html:107
-msgid "Create ticket"
-msgstr "Criar ticket"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "Create tickets in this queue"
-msgstr "Criar tickets nesta queue"
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "Create, delete and modify custom fields"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "Create, delete and modify queues"
-msgstr ""
-
-#: lib/RT/System.pm:82
-msgid "Create, delete and modify the members of personal groups"
-msgstr ""
-
-#: lib/RT/System.pm:83
-msgid "Create, delete and modify users"
-msgstr ""
-
-#: lib/RT/System.pm:89
-msgid "CreateSavedSearch"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "CreateTicket"
-msgstr ""
-
-#: html/Elements/SelectDateType:49 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1171
-msgid "Created"
-msgstr "Criado"
-
-#: html/Admin/CustomFields/Modify.html:165 html/Admin/Elements/EditCustomField:119
-#. ($CustomFieldObj->Name())
-msgid "Created CustomField %1"
-msgstr "Campo Personalisado %1 criado"
-
-#: html/Tools/Reports/Elements/Tabs:65
-msgid "Created in a date range"
-msgstr ""
-
-#: 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"
-
-#: html/Search/Elements/PickBasics:104
-msgid "Creator"
-msgstr ""
-
-#: html/Elements/EditLinks:51
-msgid "Current Links"
-msgstr "Links actuais"
-
-#: html/Admin/Elements/EditScrips:53
-msgid "Current Scrips"
-msgstr ""
-
-#: html/Admin/Groups/Members.html:62 html/User/Groups/Members.html:65
-msgid "Current members"
-msgstr "Membros actuais"
-
-#: html/Admin/Elements/SelectRights:53
-msgid "Current rights"
-msgstr "Direitos actuais"
-
-#: html/Search/Elements/EditQuery:49
-msgid "Current search"
-msgstr "Pesquisa actual"
-
-#: html/Admin/Queues/People.html:64 html/Ticket/Elements/EditPeople:68
-msgid "Current watchers"
-msgstr ""
-
-#: 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
-msgid "Custom Fields"
-msgstr ""
-
-#: html/Admin/CustomFields/index.html:62
-#. ($lookup)
-msgid "Custom Fields for %1"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:109
-msgid "Custom action cleanup code"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:105
-msgid "Custom action preparation code"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:101
-msgid "Custom condition"
-msgstr ""
-
-#: lib/RT/Tickets_Overlay.pm:2619
-#. ($CF->Name, $args{OPERATOR}, $args{VALUE})
-msgid "Custom field %1 %2 %3"
-msgstr ""
-
-#: lib/RT/Record.pm:1625
-#. ($args{'Field'})
-msgid "Custom field %1 does not apply to this object"
-msgstr ""
-
-#: lib/RT/Tickets_Overlay.pm:2613
-#. ($CF->Name)
-msgid "Custom field %1 has a value."
-msgstr ""
-
-#: lib/RT/Tickets_Overlay.pm:2609
-#. ($CF->Name)
-msgid "Custom field %1 has no value."
-msgstr ""
-
-#: lib/RT/Record.pm:1614 lib/RT/Record.pm:1776
-#. ($args{'Field'})
-msgid "Custom field %1 not found"
-msgstr ""
-
-#: lib/RT/Report/Tickets.pm:120 lib/RT/Report/Tickets.pm:123
-#. ($cf)
-#. ($obj->Name)
-msgid "Custom field '%1'"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:1160
-#. ($args{'Content'}, $self->Name)
-msgid "Custom field value %1 could not be found for custom field %2"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:422
-msgid "Custom field value could not be deleted"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:1172
-msgid "Custom field value could not be found"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:1174 lib/RT/CustomField_Overlay.pm:420
-msgid "Custom field value deleted"
-msgstr ""
-
-#: html/Elements/SelectGroups:53 html/Elements/SelectUsers:53 lib/RT/Transaction_Overlay.pm:659
-msgid "CustomField"
-msgstr ""
-
-#: html/Prefs/MyRT.html:80 html/Prefs/Quicksearch.html:72 html/Prefs/Search.html:77
-msgid "Customize"
-msgstr ""
-
-#: 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
-msgid "Dates"
-msgstr "Datas"
-
-#: lib/RT/Date.pm:454
-msgid "Dec."
-msgstr "Dec"
-
-#: etc/initialdata:222
-msgid "Default Autoresponse template"
-msgstr ""
-
-#: html/Tools/Offline.html:63
-msgid "Default Queue"
-msgstr "Queue por omissão"
-
-#: html/Tools/Offline.html:72
-msgid "Default Requestor"
-msgstr ""
-
-#: etc/initialdata:296
-msgid "Default admin comment template"
-msgstr ""
-
-#: etc/initialdata:275
-msgid "Default admin correspondence template"
-msgstr ""
-
-#: etc/initialdata:287
-msgid "Default correspondence template"
-msgstr ""
-
-#: etc/initialdata:253
-msgid "Default transaction template"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:637
-#. ($type, $self->Field, ( $self->OldValue ? "'" . $self->OldValue . "'" : $self->loc("(no value)") ), "'" . $self->NewValue . "'")
-msgid "Default: %1/%2 changed from %3 to %4"
-msgstr ""
-
-#: html/User/Delegation.html:48 html/User/Delegation.html:51
-msgid "Delegate rights"
-msgstr ""
-
-#: lib/RT/System.pm:86
-msgid "Delegate specific rights which have been granted to you."
-msgstr ""
-
-#: lib/RT/System.pm:86
-msgid "DelegateRights"
-msgstr ""
-
-#: html/User/Elements/Tabs:61
-msgid "Delegation"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:77 html/Search/Elements/EditFormat:105 html/Search/Elements/EditQuery:59 html/Search/Elements/EditSearches:65 html/Widgets/SelectionBox:212
-msgid "Delete"
-msgstr "Apagar"
-
-#: html/Admin/Elements/EditTemplates:81
-msgid "Delete Template"
-msgstr "Apagar template"
-
-#: lib/RT/SavedSearch.pm:222
-#. ($msg)
-msgid "Delete failed: %1"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:76
-msgid "Delete selected scrips"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:116
-msgid "Delete tickets"
-msgstr "Apagar tickets"
-
-#: html/Search/Bulk.html:161
-msgid "Delete values"
-msgstr "Apagar valores"
-
-#: lib/RT/Queue_Overlay.pm:116
-msgid "DeleteTicket"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:220
-msgid "Deleted search"
-msgstr "Pesquisa apagada"
-
-#: lib/RT/Queue_Overlay.pm:396
-msgid "Deleting this object would break referential integrity"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:514
-msgid "Deleting this object would violate referential integrity"
-msgstr ""
-
-#: html/Approvals/Elements/Approve:75
-msgid "Deny"
-msgstr ""
-
-#: 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
-msgid "Depended on by"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:739
-#. ($value)
-msgid "Dependency by %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:779
-#. ($value)
-msgid "Dependency by %1 deleted"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:736
-#. ($value)
-msgid "Dependency on %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:776
-#. ($value)
-msgid "Dependency on %1 deleted"
-msgstr ""
-
-#: 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
-msgid "Depends on"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:88
-msgid "Desc"
-msgstr ""
-
-#: html/Elements/SelectSortOrder:58
-msgid "Descending"
-msgstr "Descendente"
-
-#: html/SelfService/Create.html:102 html/Ticket/Create.html:154
-msgid "Describe the issue below"
-msgstr "Descreva o pedido, abaixo"
-
-#: 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
-msgid "Description"
-msgstr "Descrição"
-
-#: html/Search/Elements/EditFormat:73 html/Ticket/Elements/Tabs:110
-msgid "Display"
-msgstr "Mostrar"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "Display Access Control List"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:48
-msgid "Display Columns"
-msgstr "Visualizar Colunas"
-
-#: lib/RT/Queue_Overlay.pm:101
-msgid "Display Scrip templates for this queue"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "Display Scrips for this queue"
-msgstr ""
-
-#: html/Ticket/Elements/ShowHistory:61
-msgid "Display mode"
-msgstr "Modo de visualização"
-
-#: lib/RT/Group_Overlay.pm:170
-msgid "Display saved searches for this group"
-msgstr "Visualizar a pesquisa gravada para este grupo"
-
-#: html/Elements/Footer:63
-msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-msgstr ""
-
-#: lib/RT/System.pm:77
-msgid "Do anything and everything"
-msgstr ""
-
-#: html/Elements/Refresh:53
-msgid "Don't refresh this page."
-msgstr ""
-
-#: html/Ticket/Elements/ShowTransactionAttachments:84
-msgid "Download"
-msgstr "Descarregar"
-
-#: html/Admin/Groups/index.html:63 html/Admin/Users/index.html:66
-msgid "Download as a tab-delimited file"
-msgstr "Descarregar num ficheiro separado por tabs"
-
-#: 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
-msgid "Due"
-msgstr "Prazo"
-
-#: html/Elements/Quicksearch:50 html/Elements/ShowSearch:51 html/index.html:109
-msgid "Edit"
-msgstr "Editar"
-
-#: html/Search/Bulk.html:151
-msgid "Edit Custom Fields"
-msgstr "Editar Campos Personalizados"
-
-#: html/Admin/Elements/ObjectCustomFields:94 html/Admin/Queues/CustomFields.html:66 html/Admin/Users/CustomFields.html:66
-#. ($Object->Name)
-msgid "Edit Custom Fields for %1"
-msgstr "Editar Campos Personalizados de %1"
-
-#: html/Admin/Global/CustomFields/Groups.html:56
-msgid "Edit Custom Fields for all groups"
-msgstr "Editar Campos Personalizados para todos os grupos"
-
-#: html/Admin/Global/CustomFields/Users.html:56
-msgid "Edit Custom Fields for all users"
-msgstr "Editar Campos Personalizados para todos os utilizadores"
-
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:56 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"
-
-#: html/Search/Bulk.html:190 html/Ticket/ModifyLinks.html:59
-msgid "Edit Links"
-msgstr "Editar ligações"
-
-#: html/Search/Edit.html:70
-msgid "Edit Query"
-msgstr "Editar Pesquisa"
-
-#: html/Ticket/Elements/Tabs:216
-msgid "Edit Search"
-msgstr "Editar Pesquisa"
-
-#: html/Admin/Queues/Templates.html:65
-#. ($QueueObj->Name)
-msgid "Edit Templates for queue %1"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "Edit saved searches for this group"
-msgstr "Editar Pesquisas para este grupo"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:62 html/Admin/Global/index.html:69
-msgid "Edit system templates"
-msgstr "Editar modelos de sistema"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "EditSavedSearches"
-msgstr ""
-
-#: html/Admin/Queues/Modify.html:142
-#. ($QueueObj->Name)
-msgid "Editing Configuration for queue %1"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:169 html/Admin/Elements/EditCustomField:122
-#. ($CustomFieldObj->Name())
-msgid "Editing CustomField %1"
-msgstr ""
-
-#: html/Admin/Groups/Members.html:57
-#. ($Group->Name)
-msgid "Editing membership for group %1"
-msgstr ""
-
-#: html/User/Groups/Members.html:152
-#. ($Group->Name)
-msgid "Editing membership for personal group %1"
-msgstr ""
-
-#: lib/RT/Record.pm:1317 lib/RT/Record.pm:1394 lib/RT/Ticket_Overlay.pm:2512 lib/RT/Ticket_Overlay.pm:2602
-msgid "Either base or target must be specified"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:76 html/Ticket/Elements/AddWatchers:79 html/User/Prefs.html:67
-msgid "Email"
-msgstr "Email"
-
-#: lib/RT/User_Overlay.pm:237
-msgid "Email address in use"
-msgstr "Endereço de email já utilizado"
-
-#: html/Admin/CustomFields/Modify.html:100 html/Admin/Elements/EditCustomField:74
-msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "Activo (remover selecção desta caixa desactiva este campo)"
-
-#: html/Admin/Groups/Modify.html:89 html/User/Groups/Modify.html:76
-msgid "Enabled (Unchecking this box disables this group)"
-msgstr "Activo (remover selecção desta caixa desactiva este grupo)"
-
-#: html/Admin/Queues/Modify.html:107
-msgid "Enabled (Unchecking this box disables this queue)"
-msgstr "Activo (remover selecção desta caixa desactiva esta queue)"
-
-#: html/Admin/Queues/index.html:80
-msgid "Enabled Queues"
-msgstr "Queues activas"
-
-#: html/Admin/Elements/EditCustomField:138 html/Admin/Groups/Modify.html:156 html/Admin/Users/Modify.html:354 html/User/Groups/Modify.html:140
-#. (loc_fuzzy($msg))
-msgid "Enabled status %1"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:187 html/Admin/Queues/Modify.html:164
-#. (loc_fuzzy($msg))
-msgid "Enabled status: %1"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:66
-msgid "Enter multiple values"
-msgstr ""
-
-#: html/Elements/EditLinks:127
-msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:67
-msgid "Enter one value"
-msgstr "Inserir um valor"
-
-#: 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."
-
-#: html/Elements/EditLinks:120 html/Search/Bulk.html:191
-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:68
-msgid "Enter up to %1 values"
-msgstr "Inserir até %1 valores"
-
-#: html/Elements/Login:78 html/SelfService/Error.html:48 html/SelfService/Error.html:49
-msgid "Error"
-msgstr "Erro"
-
-#: lib/RT/Queue_Overlay.pm:681
-msgid "Error in parameters to Queue->AddWatcher"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:837
-msgid "Error in parameters to Queue->DeleteWatcher"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1376
-msgid "Error in parameters to Ticket->AddWatcher"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1531
-msgid "Error in parameters to Ticket->DeleteWatcher"
-msgstr ""
-
-#: html/Search/Build.html:390
-#. ($val, $token, $string)
-msgid "Error near ->%1<- expecting a %2 in '%3'"
-msgstr ""
-
-#: bin/rt-crontool:287
-msgid "Escalate tickets"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:59
-msgid "Estimated"
-msgstr "Estimado"
-
-#: etc/initialdata:20
-msgid "Everyone"
-msgstr "Todos"
-
-#: bin/rt-crontool:273
-msgid "Example:"
-msgstr "Exemplo:"
-
-#: html/Admin/Users/Modify.html:101
-msgid "Extra info"
-msgstr "Informação adicional"
-
-#: lib/RT/SavedSearch.pm:179
-msgid "Failed to create search attribute"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:378
-msgid "Failed to find 'Privileged' users pseudogroup."
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:385
-msgid "Failed to find 'Unprivileged' users pseudogroup"
-msgstr ""
-
-#: bin/rt-crontool:208
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:154
-#. ($privacy)
-msgid "Failed to load object for %1"
-msgstr ""
-
-#: lib/RT/Date.pm:444
-msgid "Feb."
-msgstr "Feb"
-
-#: html/Elements/SelectAttachmentField:52
-msgid "Filename"
-msgstr "Ficheiro"
-
-#: lib/RT/CustomField_Overlay.pm:71
-msgid "Fill in multiple text areas"
-msgstr "Preencher múltiplas áreas de texto"
-
-#: lib/RT/CustomField_Overlay.pm:76
-msgid "Fill in multiple wikitext areas"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:72
-msgid "Fill in one text area"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:77
-msgid "Fill in one wikitext area"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:109 html/Admin/CustomFields/Modify.html:120
-msgid "Fill in this field with a URL."
-msgstr "Preencha este campo com um URL"
-
-#: lib/RT/CustomField_Overlay.pm:73
-msgid "Fill in up to %1 text areas"
-msgstr "Preencha até %1 áreas de texto"
-
-#: lib/RT/CustomField_Overlay.pm:78
-msgid "Fill in up to %1 wikitext areas"
-msgstr ""
-
-#: html/Search/Elements/PickBasics:151 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:99 lib/RT/Tickets_Overlay.pm:2030
-msgid "Final Priority"
-msgstr "Prioridade final"
-
-#: lib/RT/Ticket_Overlay.pm:1166
-msgid "FinalPriority"
-msgstr ""
-
-#: html/Admin/Groups/index.html:74 html/Admin/Queues/People.html:84 html/Ticket/Elements/EditPeople:57
-msgid "Find groups whose"
-msgstr "Encontrar grupos cujo"
-
-#: html/Admin/Queues/People.html:80 html/Admin/Users/index.html:72 html/Ticket/Elements/EditPeople:53
-msgid "Find people whose"
-msgstr "Encontrar pessoas cujo"
-
-#: html/Search/Results.html:149
-msgid "Find tickets"
-msgstr "Encontrar tickets"
-
-#: html/Ticket/Elements/Tabs:83
-msgid "First"
-msgstr "Primeiro"
-
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:764
-msgid "Foo Bar Baz"
-msgstr ""
-
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:755
-msgid "Foo!"
-msgstr ""
-
-#: html/Search/Bulk.html:85
-msgid "Force change"
-msgstr "Forçar alteraçao"
-
-#: html/Search/Elements/EditFormat:54
-msgid "Format"
-msgstr ""
-
-#: html/Search/Results.html:147
-#. ($ticketcount)
-msgid "Found %quant(%1,ticket)"
-msgstr ""
-
-#: lib/RT/Record.pm:973
-msgid "Found Object"
-msgstr ""
-
-#: lib/RT/Date.pm:423
-msgid "Fri."
-msgstr "Fri"
-
-#: html/Ticket/Elements/ShowHistory:68 html/Ticket/Elements/ShowHistory:74
-msgid "Full headers"
-msgstr "Cabeçalhos completos"
-
-#: html/Tools/Offline.html:87
-msgid "Get template from file"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:705
-#. ($New->Name)
-msgid "Given to %1"
-msgstr ""
-
-#: html/Admin/Elements/Tabs:67 html/Admin/index.html:84
-msgid "Global"
-msgstr ""
-
-#: html/Admin/Elements/EditCustomFields:57
-msgid "Global Custom Fields"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:61
-msgid "Global custom field configuration"
-msgstr ""
-
-#: html/Admin/Global/MyRT.html:95
-#. ($pane)
-msgid "Global portlet %1 saved."
-msgstr ""
-
-#: html/Admin/Elements/SelectTemplate:61
-#. (loc($Template->Name))
-msgid "Global template: %1"
-msgstr ""
-
-#: 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
-msgid "Go!"
-msgstr ""
-
-#: html/Elements/GotoTicket:48 html/SelfService/Elements/GotoTicket:48
-msgid "Goto ticket"
-msgstr "Ir para ticket"
-
-#: html/Ticket/Elements/AddWatchers:69 html/Ticket/Elements/ShowGroupMembers:57 html/User/Elements/DelegateRights:101
-msgid "Group"
-msgstr "Grupo"
-
-#: 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
-msgid "Group Rights"
-msgstr "Direitos do grupo"
-
-#: lib/RT/Group_Overlay.pm:985
-msgid "Group already has member"
-msgstr "Grupo já tem membro"
-
-#: html/Admin/Groups/Modify.html:115
-#. ($create_msg)
-msgid "Group could not be created: %1"
-msgstr "Grupo não pôde ser criado: %1"
-
-#: lib/RT/Group_Overlay.pm:523
-msgid "Group created"
-msgstr "Grupo criado"
-
-#: lib/RT/Group_Overlay.pm:1157
-msgid "Group has no such member"
-msgstr "O grupo não tem esse membro"
-
-#: 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
-msgid "Group not found"
-msgstr "Grupo não encontrado"
-
-#: 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
-msgid "Groups"
-msgstr "Grupos"
-
-#: lib/RT/Group_Overlay.pm:991
-msgid "Groups can't be members of their members"
-msgstr "Grupos não podem ser membros dos seus membros"
-
-#: html/Admin/Groups/index.html:88
-msgid "Groups matching search criteria"
-msgstr "Grupos que preenchem critérios"
-
-#: html/Ticket/Elements/ShowRequestor:79
-msgid "Groups this user belongs to"
-msgstr "Grupos a que este utilizador pertence"
-
-#: lib/RT/Interface/CLI.pm:96 lib/RT/Interface/CLI.pm:96
-msgid "Hello!"
-msgstr "Olá!"
-
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:771
-#. ($name)
-msgid "Hello, %1"
-msgstr "Olá, %1"
-
-#: html/Admin/Elements/GroupTabs:72 html/Admin/Elements/UserTabs:66 html/Ticket/Elements/ShowHistory:55 html/Ticket/Elements/Tabs:113
-msgid "History"
-msgstr "Histórico"
-
-#: html/Admin/Groups/History.html:64
-#. ($GroupObj->Name)
-msgid "History of the group %1"
-msgstr "Histórico do grupo %1"
-
-#: html/Admin/Users/History.html:64
-#. ($UserObj->Name)
-msgid "History of the user %1"
-msgstr "Histórico do utilizador %1"
-
-#: html/Elements/Tabs:68
-msgid "Homepage"
-msgstr "Home"
-
-#: html/Elements/SelectTimeUnits:50
-msgid "Hours"
-msgstr "Horas"
-
-#: lib/RT/Base.pm:135
-#. (6)
-msgid "I have %quant(%1,concrete mixer)."
-msgstr ""
-
-#: html/Search/Build.html:466 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
-msgstr "Estou perdido"
-
-#: html/Ticket/Elements/ShowBasics:50 lib/RT/Tickets_Overlay.pm:1955
-msgid "Id"
-msgstr "Id"
-
-#: html/Admin/Users/Modify.html:67 html/User/Prefs.html:62
-msgid "Identity"
-msgstr "Identidade"
-
-#: etc/initialdata:429
-msgid "If an approval is rejected, reject the original and delete pending approvals"
-msgstr ""
-
-#: html/Tools/Offline.html:76
-msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr "Se nenhum Requerente for especificado, criar um pedido sem Requerente."
-
-#: html/Tools/Offline.html:67
-msgid "If no queue is specified, create tickets in this queue."
-msgstr "Se nenhuma queue foi definida, criar tickets nesta queue"
-
-#: bin/rt-crontool:269
-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:128 html/Ticket/Modify.html:62 html/Ticket/ModifyAll.html:130 html/Ticket/ModifyPeople.html:62
-msgid "If you've updated anything above, be sure to"
-msgstr "Se actualizou algo acima, certifique-se que"
-
-#: lib/RT/Record.pm:964
-msgid "Illegal value for %1"
-msgstr ""
-
-#: lib/RT/Record.pm:967
-msgid "Immutable field"
-msgstr ""
-
-#: html/Admin/Groups/index.html:67
-msgid "Include disabled groups in listing."
-msgstr "Incluir grupos desactivados na listagem"
-
-#: html/Admin/Queues/index.html:67
-msgid "Include disabled queues in listing."
-msgstr "Incluir queues desactivadas na listagem"
-
-#: html/Admin/Users/index.html:73
-msgid "Include disabled users in search."
-msgstr "Incluir utilizadores desactivados na listagem"
-
-#: html/Admin/CustomFields/Modify.html:115
-msgid "Include page"
-msgstr "Incluir página"
-
-#: html/Search/Build.html:492 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
-msgstr "Query incompleta"
-
-#: html/Search/Build.html:489 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
-msgstr "Query incompleta"
-
-#: html/Search/Elements/PickBasics:150 lib/RT/Tickets_Overlay.pm:2005
-msgid "Initial Priority"
-msgstr "Prioridade Inicial"
-
-#: lib/RT/Ticket_Overlay.pm:1165 lib/RT/Ticket_Overlay.pm:1167
-msgid "InitialPriority"
-msgstr ""
-
-#: lib/RT/ScripAction_Overlay.pm:135
-msgid "Input error"
-msgstr ""
-
-#: html/Elements/ValidateCustomFields:70 lib/RT/CustomField_Overlay.pm:1024 lib/RT/CustomField_Overlay.pm:1165
-#. ($self->FriendlyPattern)
-#. ($CF->FriendlyPattern)
-msgid "Input must match %1"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3522
-msgid "Internal Error"
-msgstr "Erro interno"
-
-#: lib/RT/Record.pm:315
-#. ($id->{error_message})
-msgid "Internal Error: %1"
-msgstr "Erro interno: %1"
-
-#: lib/RT/Group_Overlay.pm:670
-msgid "Invalid Group Type"
-msgstr ""
-
-#: lib/RT/Principal_Overlay.pm:163
-msgid "Invalid Right"
-msgstr "Direito Inválido"
-
-#: lib/RT/Record.pm:969
-msgid "Invalid data"
-msgstr "Dados Inválidos"
-
-#: lib/RT/CustomField_Overlay.pm:210 lib/RT/CustomField_Overlay.pm:681
-#. ($msg)
-msgid "Invalid pattern: %1"
-msgstr "Padrão inválido: %1"
-
-#: lib/RT/Scrip_Overlay.pm:159 lib/RT/Template_Overlay.pm:246
-msgid "Invalid queue"
-msgstr "Queue inválida"
-
-#: lib/RT/ACE_Overlay.pm:266 lib/RT/ACE_Overlay.pm:275 lib/RT/ACE_Overlay.pm:281 lib/RT/ACE_Overlay.pm:292
-msgid "Invalid right"
-msgstr "Direito inválido"
-
-#: lib/RT/Record.pm:290
-#. ($key)
-msgid "Invalid value for %1"
-msgstr "Valor inválido para %1"
-
-#: lib/RT/Record.pm:1632
-msgid "Invalid value for custom field"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:426
-msgid "Invalid value for status"
-msgstr "Valor inválido para estado"
-
-#: bin/rt-crontool:270
-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:271
-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:233
-msgid "It takes several arguments:"
-msgstr "Necessários vários argumentos:"
-
-#: html/Search/Elements/EditFormat:87
-msgid "Italic"
-msgstr "Itálico"
-
-#: lib/RT/Date.pm:443
-msgid "Jan."
-msgstr "Jan"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "Join or leave this group"
-msgstr ""
-
-#: lib/RT/Date.pm:449
-msgid "Jul."
-msgstr "Jul"
-
-#: html/Ticket/Elements/Tabs:127
-msgid "Jumbo"
-msgstr ""
-
-#: lib/RT/Date.pm:448
-msgid "Jun."
-msgstr "Jun"
-
-#: html/Admin/Users/Modify.html:96 html/User/Prefs.html:78
-msgid "Language"
-msgstr "Língua"
-
-#: html/Search/Elements/EditFormat:81
-msgid "Large"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:98
-msgid "Last"
-msgstr "Último"
-
-#: html/Ticket/Elements/EditDates:61 html/Ticket/Elements/ShowDates:62
-msgid "Last Contact"
-msgstr "Último Contacto"
-
-#: html/Elements/SelectDateType:52
-msgid "Last Contacted"
-msgstr ""
-
-#: html/Elements/SelectDateType:53
-msgid "Last Updated"
-msgstr "Última actualização"
-
-#: html/Search/Elements/PickBasics:105
-msgid "LastUpdatedBy"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:70
-msgid "Left"
-msgstr "Restante"
-
-#: html/Admin/Users/Modify.html:111
-msgid "Let this user access RT"
-msgstr "Permitir que este utilizador aceda ao RT"
-
-#: html/Admin/Users/Modify.html:115
-msgid "Let this user be granted rights"
-msgstr "Permitir que este utilizador tenha direitos"
-
-#: html/Search/Elements/EditFormat:70
-msgid "Link"
-msgstr "Ligação"
-
-#: lib/RT/Record.pm:1328
-msgid "Link already exists"
-msgstr "Ligação já existe"
-
-#: lib/RT/Record.pm:1342
-msgid "Link could not be created"
-msgstr "Ligação não pôde ser criada"
-
-#: lib/RT/Record.pm:1348
-#. ($TransString)
-msgid "Link created (%1)"
-msgstr "Ligação criada (%1)"
-
-#: lib/RT/Record.pm:1409
-#. ($TransString)
-msgid "Link deleted (%1)"
-msgstr "Ligação apagada (%1)"
-
-#: lib/RT/Record.pm:1415
-msgid "Link not found"
-msgstr "Ligação não encontrada"
-
-#: html/Ticket/ModifyLinks.html:48 html/Ticket/ModifyLinks.html:52
-#. ($Ticket->Id)
-msgid "Link ticket #%1"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:104
-msgid "Link values to"
-msgstr "Ligar valores a"
-
-#: lib/RT/Ticket_Overlay.pm:702
-msgid "Linking. Permission denied"
-msgstr "Ligação. Permissão negada"
-
-#: html/Ticket/Create.html:219 html/Ticket/Elements/ShowSummary:97 html/Ticket/Elements/Tabs:122 html/Ticket/ModifyAll.html:80
-msgid "Links"
-msgstr "Ligações"
-
-#: html/Search/Elements/EditSearches:77
-msgid "Load"
-msgstr "Carregar"
-
-#: html/Search/Elements/EditSearches:75
-msgid "Load saved search:"
-msgstr "Carregar pesquisa gravada:"
-
-#: lib/RT/System.pm:88
-msgid "LoadSavedSearch"
-msgstr ""
-
-#: html/Admin/Tools/Configuration.html:66
-msgid "Loaded perl modules"
-msgstr "Módulos perl carregados"
-
-#: lib/RT/SavedSearch.pm:113
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr "Pesquisa %1 carregada"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:128
-msgid "Location"
-msgstr "Localização"
-
-#: html/Elements/Header:93
-#. ("<span>".$session{'CurrentUser'}->Name."</span>")
-msgid "Logged in as %1"
-msgstr "Ligado como %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
-msgid "Login"
-msgstr "Entrar"
-
-#: html/Elements/Header:103
-msgid "Logout"
-msgstr "Sair"
-
-#: lib/RT/CustomField_Overlay.pm:935
-msgid "Lookup type mismatch"
-msgstr ""
-
-#: html/Search/Bulk.html:84
-msgid "Make Owner"
-msgstr "Definir Proprietário"
-
-#: html/Search/Bulk.html:108
-msgid "Make Status"
-msgstr "Definir estado"
-
-#: html/Search/Bulk.html:116
-msgid "Make date Due"
-msgstr "Definir data como prazo"
-
-#: html/Search/Bulk.html:118
-msgid "Make date Resolved"
-msgstr ""
-
-#: html/Search/Bulk.html:112
-msgid "Make date Started"
-msgstr ""
-
-#: html/Search/Bulk.html:110
-msgid "Make date Starts"
-msgstr ""
-
-#: html/Search/Bulk.html:114
-msgid "Make date Told"
-msgstr ""
-
-#: html/Search/Bulk.html:104
-msgid "Make priority"
-msgstr "Definir prioridade"
-
-#: html/Search/Bulk.html:106
-msgid "Make queue"
-msgstr ""
-
-#: html/Search/Bulk.html:102
-msgid "Make subject"
-msgstr "Definir assunto"
-
-#: lib/RT/Group_Overlay.pm:171
-msgid "Make this group visible to user"
-msgstr ""
-
-#: html/Admin/index.html:80
-msgid "Manage custom fields and custom field values"
-msgstr ""
-
-#: html/Admin/index.html:71
-msgid "Manage groups and group membership"
-msgstr "Gerir grupos e membros de grupos"
-
-#: html/Admin/index.html:87
-msgid "Manage properties and configuration which apply to all queues"
-msgstr "Gerir propriedades e configuração que se aplica a todas as queues"
-
-#: html/Admin/index.html:76
-msgid "Manage queues and queue-specific properties"
-msgstr "Gerir queues e propriedades específicas das queues"
-
-#: html/Admin/index.html:66
-msgid "Manage users and passwords"
-msgstr "Gerir utilizadores e passwords"
-
-#: lib/RT/Date.pm:445
-msgid "Mar."
-msgstr "Mar"
-
-#: lib/RT/Date.pm:447
-msgid "May."
-msgstr "May"
-
-#: lib/RT/Transaction_Overlay.pm:752
-#. ($value)
-msgid "Member %1 added"
-msgstr "Membro %1 adicionado"
-
-#: lib/RT/Transaction_Overlay.pm:792
-#. ($value)
-msgid "Member %1 deleted"
-msgstr "Membro %1 apagado"
-
-#: lib/RT/Group_Overlay.pm:1002
-msgid "Member added"
-msgstr "Membro adicionado"
-
-#: lib/RT/Group_Overlay.pm:1164
-msgid "Member deleted"
-msgstr "Membro apagado"
-
-#: lib/RT/Group_Overlay.pm:1168
-msgid "Member not deleted"
-msgstr "Membro não apagado"
-
-#: html/Elements/SelectLinkType:49
-msgid "Member of"
-msgstr "Membro de"
-
-#: html/Admin/Elements/GroupTabs:65 html/User/Elements/GroupTabs:65
-msgid "Members"
-msgstr "Membros"
-
-#: lib/RT/Transaction_Overlay.pm:749
-#. ($value)
-msgid "Membership in %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:789
-#. ($value)
-msgid "Membership in %1 deleted"
-msgstr ""
-
-#: html/Admin/Elements/UserTabs:63
-msgid "Memberships"
-msgstr ""
-
-#: html/Admin/Users/Memberships.html:62
-#. ($UserObj->Name)
-msgid "Memberships of the user %1"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2896
-msgid "Merge Successful"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2774
-msgid "Merge failed. Couldn't set EffectiveId"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:2791
-msgid "Merge failed. Couldn't set Status"
-msgstr ""
-
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:50
-msgid "Merge into"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:755
-#. ($value)
-msgid "Merged into %1"
-msgstr ""
-
-#: html/Search/Bulk.html:145 html/Ticket/Update.html:120
-msgid "Message"
-msgstr "Mensagem"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:166
-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"
-
-#: lib/RT/Ticket_Overlay.pm:2445
-msgid "Message could not be recorded"
-msgstr "Mensagem não pôde ser gravada"
-
-#: lib/RT/Ticket_Overlay.pm:2448
-msgid "Message recorded"
-msgstr "Mensagem gravada"
-
-#: html/Ticket/Elements/PreviewScrips:124
-msgid "Messages about this ticket will not be sent to..."
-msgstr "Mensagens sobre este ticket não serão enviadas a..."
-
-#: html/Elements/SelectTimeUnits:49
-msgid "Minutes"
-msgstr "Minutos"
-
-#: html/Search/Build.html:496 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr ""
-
-#: lib/RT/Record.pm:971
-msgid "Missing a primary key?: %1"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:196 html/User/Prefs.html:94
-msgid "Mobile"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "Modify Access Control List"
-msgstr "Alterar Lista de Controle de Acessos"
-
-#: 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:100
-#. (loc(lc($Types)))
-msgid "Modify Custom Fields which apply to all %1"
-msgstr ""
-
-#: html/Admin/Global/GroupRights.html:108 html/Admin/Groups/GroupRights.html:96 html/Admin/Queues/GroupRights.html:109
-msgid "Modify Group Rights"
-msgstr "Alterar Direitos de Grupo"
-
-#: html/Admin/Groups/Members.html:107 html/User/Groups/Members.html:103
-msgid "Modify Members"
-msgstr "Alterar Membros"
-
-#: 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"
-
-#: html/Admin/Global/UserRights.html:76 html/Admin/Groups/UserRights.html:78 html/Admin/Queues/UserRights.html:77
-msgid "Modify User Rights"
-msgstr "Alterar Direitos de Utilizadores"
-
-#: html/Admin/Queues/CustomField.html:68
-#. ($QueueObj->Name())
-msgid "Modify a CustomField for queue %1"
-msgstr ""
-
-#: html/Admin/Queues/Scrip.html:84
-#. ($QueueObj->Name)
-msgid "Modify a scrip for queue %1"
-msgstr "Alterar uma scrip da queue %1"
-
-#: html/Admin/Global/Scrip.html:77
-msgid "Modify a scrip that applies to all queues"
-msgstr "Alterar uma scrip que se aplica a todas as queues"
-
-#: html/Admin/CustomFields/Objects.html:92
-#. ($CF->Name)
-msgid "Modify associated objects for %1"
-msgstr ""
-
-#: html/Ticket/ModifyDates.html:48 html/Ticket/ModifyDates.html:52
-#. ($TicketObj->Id)
-msgid "Modify dates for #%1"
-msgstr "Alterar datas de #%1"
-
-#: html/Ticket/ModifyDates.html:59
-#. ($TicketObj->Id)
-msgid "Modify dates for ticket # %1"
-msgstr "Alterar datas do ticket # %1"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:67 html/Admin/Global/index.html:74
-msgid "Modify global custom fields"
-msgstr ""
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:72 html/Admin/Global/GroupRights.html:48 html/Admin/Global/GroupRights.html:51 html/Admin/Global/index.html:79
-msgid "Modify global group rights"
-msgstr "Alterar direitos de grupo globais"
-
-#: html/Admin/Global/GroupRights.html:56
-msgid "Modify global group rights."
-msgstr "Alterar direitos de grupo globais"
-
-#: html/Admin/Global/UserRights.html:48 html/Admin/Global/UserRights.html:51 html/Admin/Global/index.html:83
-msgid "Modify global user rights"
-msgstr "Alterar direitos de utilizador globais"
-
-#: html/Admin/Global/UserRights.html:56
-msgid "Modify global user rights."
-msgstr "Alterar direitos de utilizador globais"
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "Modify group metadata or delete group"
-msgstr ""
-
-#: html/Admin/CustomFields/GroupRights.html:113
-#. ($CustomFieldObj->Name)
-msgid "Modify group rights for custom field %1"
-msgstr ""
-
-#: html/Admin/Groups/GroupRights.html:48 html/Admin/Groups/GroupRights.html:52 html/Admin/Groups/GroupRights.html:58
-#. ($GroupObj->Name)
-msgid "Modify group rights for group %1"
-msgstr "Alterar direitos de grupo para o grupo %1"
-
-#: html/Admin/Queues/GroupRights.html:48 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:167
-msgid "Modify membership roster for this group"
-msgstr ""
-
-#: lib/RT/System.pm:84
-msgid "Modify one's own RT account"
-msgstr ""
-
-#: html/Admin/Queues/People.html:48 html/Admin/Queues/People.html:52
-#. ($QueueObj->Name)
-msgid "Modify people related to queue %1"
-msgstr "Alterar pessoas relacionadas com a queue %1"
-
-#: html/Ticket/ModifyPeople.html:48 html/Ticket/ModifyPeople.html:52 html/Ticket/ModifyPeople.html:59
-#. ($Ticket->id)
-#. ($Ticket->Id)
-msgid "Modify people related to ticket #%1"
-msgstr "Alterar pessoas relacionadas com o ticket %1"
-
-#: html/Admin/Queues/Scrips.html:69
-#. ($QueueObj->Name)
-msgid "Modify scrips for queue %1"
-msgstr "Alterar scrips da queue %1"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:58 html/Admin/Global/Scrips.html:67 html/Admin/Global/index.html:65
-msgid "Modify scrips which apply to all queues"
-msgstr "Alterar scrips que se aplicam a todas as queues"
-
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:101
-#. (loc($TemplateObj->Name()))
-msgid "Modify template %1"
-msgstr "Alterar template %1"
-
-#: html/Admin/Global/Templates.html:67
-msgid "Modify templates which apply to all queues"
-msgstr "Alterar templates que se aplicam a todas as queues"
-
-#: html/Admin/Global/index.html:87
-msgid "Modify the default \"RT at a glance\" view"
-msgstr "Alterar a página principal"
-
-#: html/Admin/Groups/Modify.html:125 html/User/Groups/Modify.html:109
-#. ($Group->Name)
-msgid "Modify the group %1"
-msgstr "Alterar o grupo %1"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "Modify the queue watchers"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:313
-#. ($UserObj->Name)
-msgid "Modify the user %1"
-msgstr "Alterar o utilizador %1"
-
-#: html/Ticket/ModifyAll.html:60
-#. ($Ticket->Id)
-msgid "Modify ticket # %1"
-msgstr "Alterar o ticket # %1"
-
-#: html/Ticket/Modify.html:48 html/Ticket/Modify.html:51 html/Ticket/Modify.html:57
-#. ($TicketObj->Id)
-msgid "Modify ticket #%1"
-msgstr "Alterar ticket # %1"
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "Modify tickets"
-msgstr "Alterar tickets"
-
-#: html/Admin/CustomFields/UserRights.html:159
-#. ($CustomFieldObj->Name)
-msgid "Modify user rights for custom field %1"
-msgstr ""
-
-#: html/Admin/Groups/UserRights.html:48 html/Admin/Groups/UserRights.html:52 html/Admin/Groups/UserRights.html:58
-#. ($GroupObj->Name)
-msgid "Modify user rights for group %1"
-msgstr "Alterar direitos de utilizadores para o grupo %1"
-
-#: html/Admin/Queues/UserRights.html:48 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:96
-msgid "ModifyACL"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:110
-msgid "ModifyCustomField"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "ModifyOwnMembership"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "ModifyQueueWatchers"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "ModifyScrips"
-msgstr ""
-
-#: lib/RT/System.pm:84
-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:419
-msgid "Mon."
-msgstr "Mon"
-
-#: html/Ticket/Elements/ShowRequestor:63
-#. ($name)
-msgid "More about %1"
-msgstr "Mais sobre %1"
-
-#: html/Admin/Elements/PickCustomFields:85
-msgid "Move down"
-msgstr "Mover para baixo"
-
-#: html/Admin/Elements/PickCustomFields:77
-msgid "Move up"
-msgstr "Mover para cima"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:50
-msgid "Multiple"
-msgstr "Múltiplo"
-
-#: lib/RT/User_Overlay.pm:228
-msgid "Must specify 'Name' attribute"
-msgstr ""
-
-#: html/SelfService/Elements/MyRequests:79
-#. ($friendly_status)
-msgid "My %1 tickets"
-msgstr "Os meus %1 tickets"
-
-#: html/Tools/Elements/Tabs:65
-msgid "My Day"
-msgstr ""
-
-#: html/Approvals/index.html:48 html/Approvals/index.html:49
-msgid "My approvals"
-msgstr "As minhas aprovações"
-
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56
-msgid "My saved searches"
-msgstr "As minhas pesquisas guardadas"
-
-#: 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
-msgid "Name"
-msgstr "Nome"
-
-#: lib/RT/User_Overlay.pm:235
-msgid "Name in use"
-msgstr "Nome em utilização"
-
-#: html/Ticket/Elements/ShowDates:75
-msgid "Never"
-msgstr "Nunca"
-
-#: html/Elements/EditLinks:118
-msgid "New Links"
-msgstr "Novas Ligações"
-
-#: html/Admin/Users/Modify.html:121 html/User/Prefs.html:111
-msgid "New Password"
-msgstr "Nova Password"
-
-#: etc/initialdata:332
-msgid "New Pending Approval"
-msgstr "Novas aprovações pendentes"
-
-#: html/Ticket/Elements/Tabs:214
-msgid "New Search"
-msgstr "Nova Pesquisa"
-
-#: html/Admin/Elements/CustomFieldTabs:95 html/Admin/Queues/CustomField.html:75
-msgid "New custom field"
-msgstr ""
-
-#: html/Admin/Elements/GroupTabs:79 html/User/Elements/GroupTabs:75
-msgid "New group"
-msgstr "Novo grupo"
-
-#: html/SelfService/Prefs.html:55
-msgid "New password"
-msgstr "Nova password"
-
-#: lib/RT/User_Overlay.pm:818
-msgid "New password notification sent"
-msgstr ""
-
-#: html/Admin/Elements/QueueTabs:97
-msgid "New queue"
-msgstr "Nova queue"
-
-#: html/Ticket/Elements/Reminders:120
-msgid "New reminder:"
-msgstr "Nova Nota"
-
-#: html/Admin/Elements/SelectRights:67
-msgid "New rights"
-msgstr "Novos direitos"
-
-#: html/Admin/Global/Scrip.html:65 html/Admin/Global/Scrips.html:62 html/Admin/Queues/Scrip.html:73 html/Admin/Queues/Scrips.html:78
-msgid "New scrip"
-msgstr "Novo 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
-msgid "New template"
-msgstr "Novo template"
-
-#: html/SelfService/Elements/Tabs:87 html/SelfService/Elements/Tabs:91
-msgid "New ticket"
-msgstr "Novo ticket"
-
-#: lib/RT/Ticket_Overlay.pm:2751
-msgid "New ticket doesn't exist"
-msgstr "Novo ticket não existe"
-
-#: html/Admin/Elements/UserTabs:83
-msgid "New user"
-msgstr "Novo utilizador"
-
-#: html/Admin/Elements/CreateUserCalled:49
-msgid "New user called"
-msgstr "Novo utilizador chamado"
-
-#: html/Admin/Queues/People.html:78 html/Ticket/Elements/EditPeople:52
-msgid "New watchers"
-msgstr ""
-
-#: html/Helpers/CalPopup.html:60 html/Ticket/Elements/Tabs:94
-msgid "Next"
-msgstr "Próximo"
-
-#: html/Elements/TicketList:108
-msgid "Next Page"
-msgstr "Próxima Página"
-
-#: html/Admin/Users/Modify.html:86 html/User/Prefs.html:74
-msgid "Nickname"
-msgstr "Nick"
-
-#: html/Admin/CustomFields/UserRights.html:147
-msgid "No Class defined"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:168 html/Admin/Elements/EditCustomField:121
-msgid "No CustomField"
-msgstr ""
-
-#: html/Admin/CustomFields/GroupRights.html:105
-msgid "No CustomField defined"
-msgstr ""
-
-#: html/Admin/Groups/GroupRights.html:107 html/Admin/Groups/UserRights.html:94
-msgid "No Group defined"
-msgstr "Sem Grupo definido"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:484
-msgid "No Query"
-msgstr ""
-
-#: html/Admin/Queues/GroupRights.html:120 html/Admin/Queues/UserRights.html:91
-msgid "No Queue defined"
-msgstr ""
-
-#: bin/rt-crontool:75
-msgid "No RT user found. Please consult your RT administrator.\\n"
-msgstr ""
-
-#: html/Admin/Global/Template.html:98 html/Admin/Queues/Template.html:99
-msgid "No Template"
-msgstr ""
-
-#: html/Approvals/Elements/Approve:79
-msgid "No action"
-msgstr ""
-
-#: lib/RT/Record.pm:966
-msgid "No column specified"
-msgstr ""
-
-#: html/Ticket/Elements/ShowRequestor:70
-msgid "No comment entered about this user"
-msgstr ""
-
-#: 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
-#. (ref $self)
-msgid "No description for %1"
-msgstr "Sem descrição para %1"
-
-#: lib/RT/Users_Overlay.pm:192
-msgid "No group specified"
-msgstr "Grupo não especificado"
-
-#: html/Admin/Groups/index.html:54
-msgid "No groups matching search criteria found."
-msgstr "Nenhum grupo verificou o critério de pesquisa especificado."
-
-#: lib/RT/Ticket_Overlay.pm:2386
-msgid "No message attached"
-msgstr "Sem mensagem anexada"
-
-#: lib/RT/User_Overlay.pm:1036
-msgid "No password set"
-msgstr "Password não definida"
-
-#: lib/RT/Queue_Overlay.pm:363
-msgid "No permission to create queues"
-msgstr "Sem permissão para criar queues"
-
-#: lib/RT/Ticket_Overlay.pm:1090 lib/RT/Ticket_Overlay.pm:422
-#. ($QueueObj->Name)
-msgid "No permission to create tickets in the queue '%1'"
-msgstr "Sem permissão para criar tickets na queue '%1'"
-
-#: lib/RT/User_Overlay.pm:188
-msgid "No permission to create users"
-msgstr "Sem permissão para criar utilizadores"
-
-#: html/SelfService/Display.html:210
-msgid "No permission to display that ticket"
-msgstr "Sem permissão para ver esse ticket"
-
-#: lib/RT/SavedSearch.pm:158
-msgid "No permission to save system-wide searches"
-msgstr "Não tem permissão para gravar uma pesquisa de sistema"
-
-#: html/SelfService/Update.html:119
-msgid "No permission to view update ticket"
-msgstr "Sem permissão para ver ou actualizar esse ticket"
-
-#: lib/RT/Ticket_Overlay.pm:1482
-msgid "No principal specified"
-msgstr ""
-
-#: html/Admin/Queues/People.html:177 html/Admin/Queues/People.html:187
-msgid "No principals selected."
-msgstr ""
-
-#: html/Admin/Queues/index.html:59
-msgid "No queues matching search criteria found."
-msgstr "Nenhuma fila verificou os critérios de pesquisa especificados"
-
-#: html/Admin/Elements/SelectRights:108
-msgid "No rights found"
-msgstr ""
-
-#: html/Admin/Elements/SelectRights:55
-msgid "No rights granted."
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:198
-msgid "No search loaded"
-msgstr "Nenhuma pesquisa carregada"
-
-#: html/Search/Bulk.html:234
-msgid "No search to operate on."
-msgstr "Nenhuma pesquisa possível"
-
-#: html/Elements/RT__Ticket/ColumnMap:139 html/Search/Results.rdf:80
-msgid "No subject"
-msgstr "Sem assunto"
-
-#: html/Search/Chart:101
-msgid "No tickets found."
-msgstr "Tickets não encontrados"
-
-#: lib/RT/Transaction_Overlay.pm:549 lib/RT/Transaction_Overlay.pm:586
-msgid "No transaction type specified"
-msgstr ""
-
-#: html/Admin/Users/index.html:57
-msgid "No users matching search criteria found."
-msgstr "Nenhum proprietário verificou o critério de pesquisa."
-
-#: lib/RT/Record.pm:963
-msgid "No value sent to _Set!\\n"
-msgstr ""
-
-#: html/Elements/QuickCreate:61
-msgid "Nobody"
-msgstr "Nobody"
-
-#: lib/RT/Record.pm:968
-msgid "Nonexistant field?"
-msgstr ""
-
-#: html/Search/Chart:149 html/Search/Elements/Chart:90
-msgid "Not Set"
-msgstr "Não definido"
-
-#: html/Elements/Header:98
-msgid "Not logged in."
-msgstr "Desligado"
-
-#: lib/RT/Date.pm:399
-msgid "Not set"
-msgstr ""
-
-#: html/NoAuth/Reminder.html:50
-msgid "Not yet implemented."
-msgstr ""
-
-#: html/Approvals/Elements/Approve:83
-msgid "Notes"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:821
-msgid "Notification could not be sent"
-msgstr "Notificação não pôde ser enviada"
-
-#: etc/initialdata:101
-msgid "Notify AdminCcs"
-msgstr ""
-
-#: etc/initialdata:97
-msgid "Notify AdminCcs as Comment"
-msgstr "Notificar AdminCCS como Comentário"
-
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
-msgid "Notify Ccs"
-msgstr ""
-
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
-msgid "Notify Ccs as Comment"
-msgstr "Notificar CCs como Comentário"
-
-#: etc/initialdata:128
-msgid "Notify Other Recipients"
-msgstr ""
-
-#: etc/initialdata:124
-msgid "Notify Other Recipients as Comment"
-msgstr "Notificar outros recipientes como comentário"
-
-#: etc/initialdata:85
-msgid "Notify Owner"
-msgstr "Notificar Proprietário"
-
-#: etc/initialdata:81
-msgid "Notify Owner as Comment"
-msgstr "Notificar Proprietário como comentário"
-
-#: etc/initialdata:376
-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:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr ""
-
-#: etc/initialdata:334
-msgid "Notify Owners and AdminCcs of new items pending their approval"
-msgstr ""
-
-#: etc/initialdata:77
-msgid "Notify Requestors"
-msgstr "Notificar Requerentes"
-
-#: etc/initialdata:111
-msgid "Notify Requestors and Ccs"
-msgstr "Notificar Requerentes e CCs"
-
-#: etc/initialdata:106
-msgid "Notify Requestors and Ccs as Comment"
-msgstr "Notificar Requerentes e CCs como comentário"
-
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
-msgstr "Notificar Requerentes, CCs e AdminCCs"
-
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr "Notificar Requerentes, CCs e AdminCCs como comentário"
-
-#: lib/RT/Date.pm:453
-msgid "Nov."
-msgstr "Nov"
-
-#: html/Search/Elements/SelectAndOr:49
-msgid "OR"
-msgstr "OU"
-
-#: lib/RT/Record.pm:329
-msgid "Object could not be created"
-msgstr ""
-
-#: lib/RT/Record.pm:130
-msgid "Object could not be deleted"
-msgstr ""
-
-#: lib/RT/Record.pm:348
-msgid "Object created"
-msgstr ""
-
-#: lib/RT/Record.pm:127
-msgid "Object deleted"
-msgstr "Objecto apagado"
-
-#: html/Admin/CustomFields/Objects.html:74 html/Admin/Elements/ObjectCustomFields:65
-#. ($ObjectType)
-#. ($LookupType)
-msgid "Object of type %1 cannot take custom fields"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:970
-msgid "Object type mismatch"
-msgstr ""
-
-#: lib/RT/Date.pm:452
-msgid "Oct."
-msgstr "Oct"
-
-#: html/Tools/Elements/Tabs:57
-msgid "Offline"
-msgstr "Offline"
-
-#: html/Tools/Offline.html:51
-msgid "Offline edits"
-msgstr ""
-
-#: html/Tools/Offline.html:48
-msgid "Offline upload"
-msgstr ""
-
-#: html/Elements/SelectDateRelation:58
-msgid "On"
-msgstr "Em"
-
-#: lib/RT/Transaction_Overlay.pm:349
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-msgid "On %1, %2 wrote:"
-msgstr ""
-
-#: etc/initialdata:163
-msgid "On Comment"
-msgstr "Em comentário"
-
-#: etc/initialdata:156
-msgid "On Correspond"
-msgstr "Em Resposta"
-
-#: etc/initialdata:145
-msgid "On Create"
-msgstr "Em Criação"
-
-#: etc/initialdata:184
-msgid "On Owner Change"
-msgstr "Em Alteração de Dono"
-
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
-msgid "On Priority Change"
-msgstr "Em Alteração de Prioridade"
-
-#: etc/initialdata:192
-msgid "On Queue Change"
-msgstr "Em Alteração de Queue"
-
-#: etc/initialdata:198
-msgid "On Resolve"
-msgstr "Em Resolução"
-
-#: etc/initialdata:169
-msgid "On Status Change"
-msgstr "Em Alteração de Estado"
-
-#: etc/initialdata:150
-msgid "On Transaction"
-msgstr "Em Transacção"
-
-#: 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 ""
-
-#: 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 ""
-
-#: html/Admin/CustomFields/index.html:77
-msgid "Only show custom fields for:"
-msgstr ""
-
-#: etc/initialdata:139
-msgid "Open Tickets"
-msgstr "Tickets Abertos"
-
-#: html/Ticket/Elements/Tabs:162
-msgid "Open it"
-msgstr "Abrir"
-
-#: html/SelfService/Elements/Tabs:78 html/SelfService/index.html:48
-msgid "Open tickets"
-msgstr "Tickets Abertos"
-
-#: etc/initialdata:140
-msgid "Open tickets on correspondence"
-msgstr "Abrir Tickets em resposta"
-
-#: html/Prefs/MyRT.html:72
-msgid "Options"
-msgstr "Opções"
-
-#: html/Search/Elements/DisplayOptions:61
-msgid "Order by"
-msgstr "Ordenar por"
-
-#: html/Admin/Users/Modify.html:144 html/User/Prefs.html:131
-msgid "Organization"
-msgstr "Organização"
-
-#: html/Approvals/Elements/Approve:55
-#. ($approving->Id, $approving->Subject)
-msgid "Originating ticket: #%1"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:643
-msgid "Outgoing email about a comment recorded"
-msgstr "Registado email sobre um comentário"
-
-#: lib/RT/Transaction_Overlay.pm:647
-msgid "Outgoing email recorded"
-msgstr "Registado email"
-
-#: html/Admin/Queues/Modify.html:92
-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 ""
-
-#: 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:2195
-msgid "Owner"
-msgstr "Dono"
-
-#: lib/RT/Ticket_Overlay.pm:539
-#. ($Owner->Name)
-msgid "Owner '%1' does not have rights to own this ticket."
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3100
-#. ($OldOwnerObj->Name, $NewOwnerObj->Name)
-msgid "Owner changed from %1 to %2"
-msgstr "Dono alterado de %1 para %2"
-
-#: lib/RT/Ticket_Overlay.pm:507
-msgid "Owner could not be set."
-msgstr "Dono não pôde ser definido."
-
-#: lib/RT/Transaction_Overlay.pm:693
-#. ($Old->Name , $New->Name)
-msgid "Owner forcibly changed from %1 to %2"
-msgstr "Proprietário forçado de %1 para %2"
-
-#: html/Elements/TicketList:82
-#. ($Page, $pages)
-msgid "Page %1 of %2"
-msgstr "Página %1 de %2"
-
-#: html/Admin/Users/Modify.html:201 html/User/Prefs.html:98
-msgid "Pager"
-msgstr ""
-
-#: html/Elements/EditLinks:145 html/Elements/EditLinks:77 html/Elements/ShowLinks:70 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:62
-msgid "Parents"
-msgstr ""
-
-#: html/Elements/Login:97 html/User/Prefs.html:107
-msgid "Password"
-msgstr "Password"
-
-#: html/NoAuth/Reminder.html:48
-msgid "Password Reminder"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:802 lib/RT/User_Overlay.pm:1047
-msgid "Password changed"
-msgstr "Password alterada"
-
-#: lib/RT/User_Overlay.pm:1039 lib/RT/User_Overlay.pm:216
-#. ($RT::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:1046
-msgid "Password set"
-msgstr "Password definida"
-
-#: html/User/Prefs.html:242
-#. (loc_fuzzy($msg))
-msgid "Password: %1"
-msgstr "Password: %1"
-
-#: lib/RT/User_Overlay.pm:1032
-msgid "Password: Permission Denied"
-msgstr "Password: Permissão Negada"
-
-#: html/Admin/Users/Modify.html:368
-msgid "Passwords do not match."
-msgstr "As passwords não coincidem."
-
-#: html/User/Prefs.html:244
-msgid "Passwords do not match. Your password has not been changed"
-msgstr "As passwords não coincidem. A sua password não foi alterada"
-
-#: html/Ticket/Elements/ShowSummary:64 html/Ticket/Elements/Tabs:121 html/Ticket/ModifyAll.html:74
-msgid "People"
-msgstr "Pessoas"
-
-#: etc/initialdata:133
-msgid "Perform a user-defined action"
-msgstr ""
-
-#: html/Admin/Tools/Configuration.html:96
-msgid "Perl configuration"
-msgstr ""
-
-#: 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
-msgid "Permission Denied"
-msgstr "Permissão Negada"
-
-#: lib/RT/Template_Overlay.pm:240 lib/RT/Template_Overlay.pm:249
-msgid "Permission denied"
-msgstr "Permissão Negada"
-
-#: lib/RT/Template_Overlay.pm:379
-msgid "Permissions denied"
-msgstr "Permissão Negada"
-
-#: html/User/Elements/Tabs:58
-msgid "Personal Groups"
-msgstr "Grupos Pessoais"
-
-#: html/User/Groups/index.html:53 html/User/Groups/index.html:63
-msgid "Personal groups"
-msgstr "Grupos Pessoais"
-
-#: html/User/Elements/DelegateRights:60
-msgid "Personal groups:"
-msgstr "Grupos Pessoais:"
-
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:83
-msgid "Phone numbers"
-msgstr "Números de telefone"
-
-#: 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
-msgid "Preferences"
-msgstr "Preferências"
-
-#: html/Admin/Users/MyRT.html:122
-#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr "Preferências %1 para utilizador %2 ."
-
-#: html/Prefs/MyRT.html:143
-#. ($pane)
-msgid "Preferences saved for %1."
-msgstr "Preferências gravadas para %1."
-
-#: lib/RT/Action/Generic.pm:197
-msgid "Prepare Stubbed"
-msgstr ""
-
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:86
-msgid "Prev"
-msgstr ""
-
-#: html/Elements/TicketList:105
-msgid "Previous Page"
-msgstr "Página Anterior"
-
-#: lib/RT/ACE_Overlay.pm:159 lib/RT/ACE_Overlay.pm:241 lib/RT/ACE_Overlay.pm:571
-#. ($args{'PrincipalId'})
-msgid "Principal %1 not found."
-msgstr ""
-
-#: 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:1979
-msgid "Priority"
-msgstr "Prioridade"
-
-#: html/Admin/Queues/Modify.html:88
-msgid "Priority starts at"
-msgstr "Prioridade começa em"
-
-#: html/Search/Elements/EditSearches:52
-msgid "Privacy:"
-msgstr "Privacidade:"
-
-#: etc/initialdata:25
-msgid "Privileged"
-msgstr "Privilegiados"
-
-#: html/Admin/Users/Modify.html:346 html/User/Prefs.html:233
-#. (loc_fuzzy($msg))
-msgid "Privileged status: %1"
-msgstr ""
-
-#: html/Admin/Users/index.html:104
-msgid "Privileged users"
-msgstr "Utilizadores privilegiados"
-
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
-msgid "Pseudogroup for internal use"
-msgstr ""
-
-#: html/Search/Build.html:123
-msgid "Query Builder"
-msgstr "Construtor de Pesquisas"
-
-#: html/Search/Elements/Chart:103
-msgid "Query:"
-msgstr "Pesquisa"
-
-#: 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:1806
-msgid "Queue"
-msgstr "Queue"
-
-#: html/Admin/Queues/CustomField.html:65 html/Admin/Queues/Scrip.html:63 html/Admin/Queues/Scrips.html:71 html/Admin/Queues/Templates.html:67
-#. ($Queue)
-#. ($id)
-msgid "Queue %1 not found"
-msgstr "Queue %1 não encontrada"
-
-#: html/Admin/Queues/Modify.html:66
-msgid "Queue Name"
-msgstr "Nome da Queue"
-
-#: lib/RT/Queue_Overlay.pm:367
-msgid "Queue already exists"
-msgstr "Essa Queue já existe"
-
-#: lib/RT/Queue_Overlay.pm:376 lib/RT/Queue_Overlay.pm:382
-msgid "Queue could not be created"
-msgstr "A Queue não pôde ser criada"
-
-#: html/Ticket/Create.html:319 lib/t/regression/01ticket_link_searching.t:17
-msgid "Queue could not be loaded."
-msgstr ""
-
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:386 lib/RT/StyleGuide.pod:807
-msgid "Queue created"
-msgstr "Queue criada"
-
-#: html/SelfService/Display.html:128 lib/RT/CustomField_Overlay.pm:199
-msgid "Queue not found"
-msgstr "Queue não encontrada"
-
-#: html/Admin/Elements/Tabs:61 html/Admin/index.html:74
-msgid "Queues"
-msgstr "Queues"
-
-#: html/Elements/MyAdminQueues:48
-msgid "Queues I administer"
-msgstr ""
-
-#: html/Elements/MySupportQueues:48
-msgid "Queues I'm an AdminCc for"
-msgstr ""
-
-#: html/Elements/Quicksearch:49 html/Prefs/Elements/Tabs:60 html/Prefs/Quicksearch.html:72
-msgid "Quick search"
-msgstr "Pesquisa rápida"
-
-#: html/Elements/QuickCreate:49
-msgid "Quick ticket creation"
-msgstr "Criação de tickets rápida"
-
-#: html/Search/Results.html:83
-msgid "RSS"
-msgstr "RSS"
-
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:794
-#. ($RT::VERSION, $RT::rtname)
-msgid "RT %1 for %2"
-msgstr "RT %1 para %2"
-
-#: html/Admin/index.html:48 html/Admin/index.html:49
-msgid "RT Administration"
-msgstr "Administração RT"
-
-#: html/Elements/Error:65 html/SelfService/Error.html:64
-msgid "RT Error"
-msgstr "Erro RT"
-
-#: html/SelfService/Elements/Tabs:72 html/SelfService/Elements/Tabs:74
-msgid "RT Self Service"
-msgstr "RT Self Service"
-
-#: html/Admin/Tools/Configuration.html:75
-msgid "RT Variables"
-msgstr ""
-
-#: 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
-msgid "RT at a glance"
-msgstr "RT no geral"
-
-#: html/Admin/Users/MyRT.html:77
-#. ($UserObj->Name)
-msgid "RT at a glance for the user %1"
-msgstr "\"RT no geral\" do utilizador %1"
-
-#: html/Admin/CustomFields/Modify.html:119
-msgid "RT can include content from another web service when showing this custom field."
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:108
-msgid "RT can make this custom field's values into hyperlinks to another service."
-msgstr ""
-
-#: html/Elements/SetupSessionCookie:102
-msgid "RT couldn't store your session."
-msgstr ""
-
-#: html/Elements/Logo:51 html/Elements/PageLayout:176
-#. ($RT::rtname)
-msgid "RT for %1"
-msgstr "RT para %1"
-
-#: html/Search/Simple.html:62
-msgid "RT will look for anything else you enter in ticket subjects."
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:110 html/Admin/CustomFields/Modify.html:121
-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:81 html/User/Prefs.html:71
-msgid "Real Name"
-msgstr "Nome"
-
-#: html/Tools/MyDay.html:76
-msgid "Record all updates"
-msgstr "Gravar todas as actualizações"
-
-#: lib/RT/Transaction_Overlay.pm:746
-#. ($value)
-msgid "Reference by %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:786
-#. ($value)
-msgid "Reference by %1 deleted"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:743
-#. ($value)
-msgid "Reference to %1 added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:783
-#. ($value)
-msgid "Reference to %1 deleted"
-msgstr ""
-
-#: html/Elements/EditLinks:104 html/Elements/EditLinks:157 html/Elements/ShowLinks:94 html/Ticket/Create.html:228 html/Ticket/Elements/BulkLinks:74
-msgid "Referred to by"
-msgstr "Referido por"
-
-#: 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
-msgid "Refers to"
-msgstr "Refere-se a"
-
-#: 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:832
-#. ($ticket->Subject)
-msgid "Reminder '%1' added"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:845
-#. ($ticket->Subject)
-msgid "Reminder '%1' completed"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:838
-#. ($ticket->Subject)
-msgid "Reminder '%1' reopened"
-msgstr ""
-
-#: html/Ticket/Reminders.html:48
-#. ($Ticket->Id)
-msgid "Reminder ticket #%1"
-msgstr ""
-
-#: html/Elements/MyReminders:50 html/Ticket/Elements/ShowSummary:77 html/Ticket/Elements/Tabs:124 html/Ticket/Reminders.html:54
-msgid "Reminders"
-msgstr "Lembretes"
-
-#: html/Ticket/Reminders.html:52
-#. ($Ticket->Id)
-msgid "Reminders for ticket #%1"
-msgstr "Notas para o pedido #%1"
-
-#: html/Search/Bulk.html:96
-msgid "Remove AdminCc"
-msgstr ""
-
-#: html/Search/Bulk.html:92
-msgid "Remove Cc"
-msgstr ""
-
-#: html/Search/Bulk.html:88
-msgid "Remove Requestor"
-msgstr ""
-
-#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:149
-msgid "Reply"
-msgstr "Responder"
-
-#: html/Admin/Queues/Modify.html:74
-msgid "Reply Address"
-msgstr "Endereço de Resposta"
-
-#: html/Search/Bulk.html:131 html/Ticket/ModifyAll.html:96 html/Ticket/Update.html:80
-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 ""
-
-#: html/Tools/Elements/Tabs:61 html/Tools/Reports/index.html:48 html/Tools/Reports/index.html:49
-msgid "Reports"
-msgstr "Relatórios"
-
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:113
-msgid "Requestor"
-msgstr ""
-
-#: html/SelfService/Create.html:65 html/Ticket/Create.html:82 html/Ticket/Elements/EditPeople:71 html/Ticket/Elements/ShowPeople:54
-msgid "Requestors"
-msgstr "Requerentes"
-
-#: html/Admin/Queues/Modify.html:98
-msgid "Requests should be due in"
-msgstr ""
-
-#: lib/RT/Attribute_Overlay.pm:148
-#. ('Object')
-msgid "Required parameter '%1' not specified"
-msgstr ""
-
-#: html/Elements/Submit:85
-msgid "Reset"
-msgstr ""
-
-#: html/Admin/Users/MyRT.html:62 html/Prefs/MyRT.html:62
-msgid "Reset to default"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:186 html/User/Prefs.html:86
-msgid "Residence"
-msgstr "Residência"
-
-#: html/Ticket/Elements/Tabs:158
-msgid "Resolve"
-msgstr "Resolver"
-
-#: html/Ticket/Update.html:158
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Resolve ticket #%1 (%2)"
-msgstr "Resolver ticket #%1 (%2)"
-
-#: etc/initialdata:323 html/Elements/SelectDateType:51 lib/RT/Ticket_Overlay.pm:1174
-msgid "Resolved"
-msgstr "Resolvido"
-
-#: html/Tools/Reports/Elements/Tabs:57
-msgid "Resolved by owner"
-msgstr "Resolvido pelo dono"
-
-#: html/Tools/Reports/Elements/Tabs:61
-msgid "Resolved in date range"
-msgstr "Resolvido dentro do intervalo de datas"
-
-#: html/Tools/Reports/ResolvedByDates.html:54
-msgid "Resolved tickets in period, grouped by owner"
-msgstr "Tickets resolvidos no período, agrupados por dono"
-
-#: html/Tools/Reports/ResolvedByOwner.html:52
-msgid "Resolved tickets, grouped by owner"
-msgstr "Tickets resolvidos, agrupados por dono"
-
-#: html/Elements/ListActions:48 html/Search/Elements/NewListActions:49
-msgid "Results"
-msgstr "Resultados"
-
-#: html/Admin/Users/Modify.html:128 html/User/Prefs.html:118
-msgid "Retype Password"
-msgstr "Repita Password"
-
-#: html/Search/Elements/EditSearches:63
-msgid "Revert"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:632
-msgid "Right Delegated"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:322
-msgid "Right Granted"
-msgstr "Direito concedido"
-
-#: lib/RT/ACE_Overlay.pm:180
-msgid "Right Loaded"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:697 lib/RT/ACE_Overlay.pm:718
-msgid "Right could not be revoked"
-msgstr ""
-
-#: html/User/Delegation.html:87
-msgid "Right not found"
-msgstr "Direito não encontrado"
-
-#: lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:657
-msgid "Right not loaded."
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:714
-msgid "Right revoked"
-msgstr ""
-
-#: html/Admin/Elements/UserTabs:72
-msgid "Rights"
-msgstr "Direitos"
-
-#: html/Admin/CustomFields/UserRights.html:102 lib/RT/Interface/Web.pm:992
-#. ($object_type)
-msgid "Rights could not be granted for %1"
-msgstr ""
-
-#: html/Admin/CustomFields/UserRights.html:132 lib/RT/Interface/Web.pm:1021
-#. ($object_type)
-msgid "Rights could not be revoked for %1"
-msgstr ""
-
-#: html/Admin/Global/GroupRights.html:74 html/Admin/Queues/GroupRights.html:76
-msgid "Roles"
-msgstr "Perfis"
-
-#: html/Prefs/MyRT.html:74
-msgid "Rows per box"
-msgstr "Linhas por caixa"
-
-#: html/Search/Elements/DisplayOptions:95
-msgid "Rows per page"
-msgstr "Linhas por página"
-
-#: lib/RT/Date.pm:424
-msgid "Sat."
-msgstr "Sat"
-
-#: 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
-msgid "Save"
-msgstr "Gravar"
-
-#: 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
-msgid "Save Changes"
-msgstr "Gravar Alterações"
-
-#: html/User/Prefs.html:183
-msgid "Save Preferences"
-msgstr "Gravar Preferências"
-
-#: html/Ticket/Elements/PreviewScrips:133
-msgid "Save changes"
-msgstr "Gravar alterações"
-
-#: lib/RT/SavedSearch.pm:175
-#. ($name)
-msgid "Saved search %1"
-msgstr "Pesquisa gravada %1"
-
-#: html/Search/Elements/EditSearches:102 html/Widgets/SavedSearch:154
-msgid "Saved searches"
-msgstr ""
-
-#: html/Admin/Elements/ListGlobalScrips:62 html/Admin/Global/Scrip.html:79 html/Admin/Queues/Scrip.html:86
-#. ($scrip->Id)
-#. ($id)
-msgid "Scrip #%1"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:205
-msgid "Scrip Created"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:54
-msgid "Scrip Fields"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:111
-msgid "Scrip deleted"
-msgstr ""
-
-#: html/Admin/Elements/QueueTabs:69 html/Admin/Elements/SystemTabs:56 html/Admin/Global/index.html:64
-msgid "Scrips"
-msgstr ""
-
-#: html/Admin/Queues/Scrips.html:57
-msgid "Scrips which apply to all queues"
-msgstr ""
-
-#: html/Elements/SimpleSearch:50 html/Search/Simple.html:67
-msgid "Search"
-msgstr "Procurar"
-
-#: html/Prefs/SearchOptions.html:49 html/Prefs/SearchOptions.html:52
-msgid "Search Preferences"
-msgstr "Preferências de pesquisa"
-
-#: lib/RT/SavedSearch.pm:117
-msgid "Search attribute load failure"
-msgstr "Erro a carregar o atributo de pesquisa"
-
-#: html/Approvals/Elements/PendingMyApproval:61
-msgid "Search for approvals"
-msgstr "Procurar nas aprovações"
-
-#: html/Search/Simple.html:77
-msgid "Search for tickets"
-msgstr "Procurar 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>."
-msgstr ""
-
-#: html/User/Elements/Tabs:64
-msgid "Search options"
-msgstr "Opções de pesquisa"
-
-#: html/Search/Chart.html:58
-#. ($PrimaryGroupBy)
-msgid "Search results grouped by %1"
-msgstr "Resultados de pesquisa agrupados por %1"
-
-#: lib/RT/SavedSearch.pm:205
-#. ($msg)
-msgid "Search update: %1"
-msgstr "Actualização de pesquisa: %1"
-
-#: 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>."
-
-#: bin/rt-crontool:267
-msgid "Security:"
-msgstr "Segurança:"
-
-#: html/Elements/ShowCustomFields:102
-msgid "See also:"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:107
-msgid "See custom fields"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:108
-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:107
-msgid "SeeCustomField"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:171
-msgid "SeeGroup"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "SeeQueue"
-msgstr ""
-
-#: html/Admin/CustomFields/index.html:48 html/Admin/CustomFields/index.html:51
-msgid "Select a Custom Field"
-msgstr ""
-
-#: html/Admin/Groups/index.html:80
-msgid "Select a group"
-msgstr "Escolha um grupo"
-
-#: html/Admin/Queues/index.html:56
-msgid "Select a queue"
-msgstr "Escolha uma queue"
-
-#: html/SelfService/CreateTicketInQueue.html:50
-msgid "Select a queue for your new ticket"
-msgstr "Escolha uma queue para o novo ticket"
-
-#: html/Admin/Users/index.html:48 html/Admin/Users/index.html:51 html/Admin/Users/index.html:54
-msgid "Select a user"
-msgstr "Escolha um utilizador"
-
-#: html/Admin/Elements/CustomFieldTabs:92
-msgid "Select custom field"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:72
-msgid "Select custom fields for all user groups"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:67
-msgid "Select custom fields for all users"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/index.html:78
-msgid "Select custom fields for tickets in all queues"
-msgstr "Seleccioned os \"Campos Personalizados\" para os pedidos em todas as filas"
-
-#: html/Admin/Global/CustomFields/index.html:85
-msgid "Select custom fields for transactions on tickets in all queues"
-msgstr ""
-
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
-msgid "Select group"
-msgstr "Escolha grupo"
-
-#: lib/RT/CustomField_Overlay.pm:61
-msgid "Select multiple values"
-msgstr "Escolha múltiplos valores"
-
-#: lib/RT/CustomField_Overlay.pm:62
-msgid "Select one value"
-msgstr "Escolha um valor"
-
-#: html/Admin/Elements/QueueTabs:94
-msgid "Select queue"
-msgstr "Escolha a queue"
-
-#: 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"
-
-#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:59 html/Admin/Queues/Scrip.html:69 html/Admin/Queues/Scrips.html:75
-msgid "Select scrip"
-msgstr ""
-
-#: html/Admin/Global/Template.html:77 html/Admin/Global/Templates.html:59 html/Admin/Queues/Template.html:78 html/Admin/Queues/Templates.html:70
-msgid "Select template"
-msgstr "Escolha template"
-
-#: lib/RT/CustomField_Overlay.pm:63
-msgid "Select up to %1 values"
-msgstr ""
-
-#: html/Admin/Elements/UserTabs:80
-msgid "Select user"
-msgstr "Escolha utilizador"
-
-#: html/Admin/Elements/EditCustomFields:60
-msgid "Selected Custom Fields"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:61
-msgid "Selected objects"
-msgstr ""
-
-#: html/Widgets/SelectionBox:220
-msgid "Selections modified. Please save your changes"
-msgstr ""
-
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
-msgstr "Enviar email para todos os watchers"
-
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
-msgstr "Enviar email para todos os watchers como um comentário"
-
-#: etc/initialdata:112
-msgid "Send mail to requestors and Ccs"
-msgstr ""
-
-#: etc/initialdata:107
-msgid "Send mail to requestors and Ccs as a comment"
-msgstr ""
-
-#: etc/initialdata:78
-msgid "Sends a message to the requestors"
-msgstr ""
-
-#: etc/initialdata:125 etc/initialdata:129
-msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr ""
-
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
-msgid "Sends mail to the Ccs"
-msgstr ""
-
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
-msgid "Sends mail to the Ccs as a comment"
-msgstr ""
-
-#: etc/initialdata:102
-msgid "Sends mail to the administrative Ccs"
-msgstr ""
-
-#: etc/initialdata:98
-msgid "Sends mail to the administrative Ccs as a comment"
-msgstr ""
-
-#: etc/initialdata:82 etc/initialdata:86
-msgid "Sends mail to the owner"
-msgstr "Enviar email para o dono"
-
-#: lib/RT/Date.pm:451
-msgid "Sep."
-msgstr "Sep"
-
-#: html/Ticket/Elements/ShowTransaction:161
-msgid "Show"
-msgstr "Mostrar"
-
-#: html/Search/Elements/EditFormat:58
-msgid "Show Columns"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:222
-msgid "Show Results"
-msgstr "Mostrar Resultados"
-
-#: html/Approvals/Elements/PendingMyApproval:66
-msgid "Show approved requests"
-msgstr ""
-
-#: html/Ticket/Create.html:391
-msgid "Show basics"
-msgstr "Mostrar informação básica"
-
-#: html/Approvals/Elements/PendingMyApproval:67
-msgid "Show denied requests"
-msgstr ""
-
-#: html/Ticket/Create.html:394
-msgid "Show details"
-msgstr "Mostrar detalhes"
-
-#: html/Approvals/Elements/PendingMyApproval:65
-msgid "Show pending requests"
-msgstr "Mostrar pedidos pendentes"
-
-#: html/Approvals/Elements/PendingMyApproval:68
-msgid "Show requests awaiting other approvals"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "ShowACL"
-msgstr ""
-
-#: lib/RT/System.pm:87
-msgid "ShowConfigTab"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "ShowOutgoingEmail"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:170
-msgid "ShowSavedSearches"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "ShowScrips"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:101
-msgid "ShowTemplate"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:105
-msgid "ShowTicket"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "ShowTicketComments"
-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 ""
-
-#: html/Admin/Users/Modify.html:234 html/User/Prefs.html:170
-msgid "Signature"
-msgstr "Assinatura"
-
-#: html/Elements/Tabs:71
-msgid "Simple Search"
-msgstr "Pesquisa Simples"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:49
-msgid "Single"
-msgstr ""
-
-#: html/Search/Elements/EditFormat:77
-msgid "Size"
-msgstr "Tamanho"
-
-#: html/Elements/Header:91
-msgid "Skip Menu"
-msgstr ""
-
-#: html/Search/Elements/EditFormat:80
-msgid "Small"
-msgstr "Pequeno"
-
-#: html/Admin/CustomFields/Modify.html:122
-msgid "Some browsers may only load content from the same domain as your RT server."
-msgstr ""
-
-#: html/Admin/Elements/AddCustomFieldValue:51 html/Admin/Elements/EditCustomFieldValues:56
-msgid "Sort"
-msgstr "Ordenar"
-
-#: html/Admin/Elements/EditScrip:80
-msgid "Stage"
-msgstr ""
-
-#: html/Elements/SelectDateType:50 html/Ticket/Elements/EditDates:55 html/Ticket/Elements/ShowDates:58
-msgid "Started"
-msgstr "Iniciado"
-
-#: html/Elements/SelectDateType:54 html/Ticket/Create.html:211 html/Ticket/Elements/EditDates:50 html/Ticket/Elements/ShowDates:54
-msgid "Starts"
-msgstr "Começa"
-
-#: html/Admin/Users/Modify.html:165 html/User/Prefs.html:147
-msgid "State"
-msgstr "Estado"
-
-#: 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:1840
-msgid "Status"
-msgstr "Estado"
-
-#: etc/initialdata:309
-msgid "Status Change"
-msgstr "Alteração de Estado"
-
-#: lib/RT/Transaction_Overlay.pm:605
-#. ("'" . $self->loc( $self->OldValue ) . "'", "'" . $self->loc( $self->NewValue ) . "'")
-msgid "Status changed from %1 to %2"
-msgstr "Alteração de estado de %1 para %2"
-
-#: html/Ticket/Elements/Tabs:180
-msgid "Steal"
-msgstr "Roubar"
-
-#: lib/RT/Queue_Overlay.pm:119
-msgid "Steal tickets"
-msgstr "Roubar tickets"
-
-#: lib/RT/Queue_Overlay.pm:119
-msgid "StealTicket"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:699
-#. ($Old->Name)
-msgid "Stolen from %1"
-msgstr "Roubado de %1"
-
-#: html/Search/Elements/EditFormat:83
-msgid "Style"
-msgstr ""
-
-#: 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:1922
-msgid "Subject"
-msgstr "Assunto"
-
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:813 lib/RT/Transaction_Overlay.pm:721
-#. ($self->Data)
-msgid "Subject changed to %1"
-msgstr "Assunto alterado para %1"
-
-#: html/Elements/Submit:77
-msgid "Submit"
-msgstr "Enviar"
-
-#: lib/RT/Group_Overlay.pm:776
-msgid "Succeeded"
-msgstr ""
-
-#: lib/RT/Date.pm:425
-msgid "Sun."
-msgstr "Sun"
-
-#: lib/RT/System.pm:77
-msgid "SuperUser"
-msgstr ""
-
-#: html/User/Elements/DelegateRights:100
-msgid "System"
-msgstr ""
-
-#: html/Admin/Elements/ToolTabs:56 html/Admin/Tools/Configuration.html:50
-msgid "System Configuration"
-msgstr "Configuração de Sistema"
-
-#: 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:1020 lib/RT/Interface/Web.pm:991
-msgid "System Error"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:226 lib/RT/Transaction_Overlay.pm:232
-#. ($msg)
-msgid "System Error: %1"
-msgstr ""
-
-#: html/Admin/Tools/index.html:49
-msgid "System Tools"
-msgstr "Ferramentas de Sistema"
-
-#: lib/RT/ACE_Overlay.pm:635
-msgid "System error. Right not delegated."
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:165 lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:325
-msgid "System error. Right not granted."
-msgstr ""
-
-#: html/Admin/CustomFields/GroupRights.html:60 html/Admin/Global/GroupRights.html:58 html/Admin/Groups/GroupRights.html:60 html/Admin/Queues/GroupRights.html:59
-msgid "System groups"
-msgstr "Grupos de sistema"
-
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
-msgstr ""
-
-#: lib/RT/CurrentUser.pm:359
-msgid "TEST_STRING"
-msgstr ""
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:74 html/Ticket/Elements/Tabs:172
-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:684
-msgid "Taken"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:73 html/Tools/Offline.html:80
-msgid "Template"
-msgstr "Template"
-
-#: html/Admin/Global/Template.html:110 html/Admin/Queues/Template.html:115
-#. ($TemplateObj->Id())
-msgid "Template #%1"
-msgstr "Template $%1"
-
-#: html/Admin/Elements/EditTemplates:112
-msgid "Template deleted"
-msgstr "Template apagado"
-
-#: lib/RT/Scrip_Overlay.pm:178
-msgid "Template is mandatory argument"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:182
-msgid "Template not found"
-msgstr ""
-
-#: lib/RT/Template_Overlay.pm:346
-msgid "Template parsed"
-msgstr ""
-
-#: lib/RT/Template_Overlay.pm:398
-msgid "Template parsing error"
-msgstr ""
-
-#: html/Admin/Elements/QueueTabs:72 html/Admin/Elements/SystemTabs:59 html/Admin/Global/index.html:68
-msgid "Templates"
-msgstr "Templates"
-
-#: lib/RT/CustomField_Overlay.pm:946 lib/RT/Record.pm:962
-msgid "That is already the current value"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:415
-msgid "That is not a value for this custom field"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1987
-msgid "That is the same value"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:307 lib/RT/ACE_Overlay.pm:616
-msgid "That principal already has that right"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:748
-#. ($args{'Type'})
-msgid "That principal is already a %1 for this queue"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1428
-#. ($self->loc($args{'Type'}))
-msgid "That principal is already a %1 for this ticket"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:856
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this queue"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1550
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this ticket"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:1983
-msgid "That queue does not exist"
-msgstr "Essa queue não existe"
-
-#: lib/RT/Ticket_Overlay.pm:3250
-msgid "That ticket has unresolved dependencies"
-msgstr ""
-
-#: lib/RT/Action/CreateTickets.pm:712 lib/RT/Ticket_Overlay.pm:3053
-msgid "That user already owns that ticket"
-msgstr "Esse utilizador já é dono desse ticket"
-
-#: lib/RT/Ticket_Overlay.pm:2996
-msgid "That user does not exist"
-msgstr "Esse utilizador não existe"
-
-#: lib/RT/User_Overlay.pm:391
-msgid "That user is already privileged"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:412
-msgid "That user is already unprivileged"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:404
-msgid "That user is now privileged"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:425
-msgid "That user is now unprivileged"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3046
-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:235
-msgid "That's not a numerical id"
-msgstr ""
-
-#: html/SelfService/Display.html:55 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:51
-msgid "The Basics"
-msgstr "O Básico"
-
-#: lib/RT/ACE_Overlay.pm:114
-msgid "The CC of a ticket"
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:115
-msgid "The administrative CC of a ticket"
-msgstr ""
-
-#: bin/rt-crontool:277
-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:965
-msgid "The new value has been set."
-msgstr ""
-
-#: lib/RT/ACE_Overlay.pm:112
-msgid "The owner of a ticket"
-msgstr "O dono de um ticket"
-
-#: lib/RT/ACE_Overlay.pm:113
-msgid "The requestor of a ticket"
-msgstr ""
-
-#: html/Admin/Elements/EditUserComments:49
-msgid "These comments aren't generally visible to the user"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:981
-msgid "This custom field does not apply to that object"
-msgstr ""
-
-#: 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"
-
-#: html/Elements/SetupSessionCookie:106
-#. ($RT::MasonSessionDir)
-msgid "This may mean that that the directory '%1' isn't writable or a database table is missing or corrupt."
-msgstr ""
-
-#: html/Ticket/Elements/PreviewScrips:98
-msgid "This message will be sent to..."
-msgstr "Esta mensagem será enviada para..."
-
-#: bin/rt-crontool:268
-msgid "This tool allows the user to run arbitrary perl modules from within RT."
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:327
-msgid "This transaction appears to have no content"
-msgstr "Esta transacção não parece ter conteúdo"
-
-#: html/Ticket/Elements/ShowRequestor:72
-#. ($rows)
-msgid "This user's %1 highest priority tickets"
-msgstr "%1 tickets deste utilizador com maior prioridade"
-
-#: lib/RT/Date.pm:422
-msgid "Thu."
-msgstr "Thu"
-
-#: html/Ticket/ModifyAll.html:48 html/Ticket/ModifyAll.html:52
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket #%1 Jumbo update: %2"
-msgstr ""
-
-#: html/Approvals/Elements/ShowDependency:69
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-msgid "Ticket #%1: %2"
-msgstr "Ticket #%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
-#. ($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
-#. ($self->Id, $QueueObj->Name)
-msgid "Ticket %1 created in queue '%2'"
-msgstr "Ticket %1 criado na queue '%2'"
-
-#: html/Search/Bulk.html:380 html/Tools/MyDay.html:103 html/Tools/MyDay.html:94 html/Tools/MyDay.html:97
-#. ($Ticket->Id, $_)
-#. ($id, $msg)
-msgid "Ticket %1: %2"
-msgstr "Ticket %1: %2"
-
-#: html/Admin/Elements/QueueTabs:76
-msgid "Ticket Custom Fields"
-msgstr ""
-
-#: html/Ticket/History.html:48 html/Ticket/History.html:51
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket History # %1 %2"
-msgstr "Histórico do ticket # %1 %2"
-
-#: etc/initialdata:324
-msgid "Ticket Resolved"
-msgstr "Ticket Resolvido"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:71 html/Admin/Global/CustomFields/index.html:83 lib/RT/CustomField_Overlay.pm:1210
-msgid "Ticket Transactions"
-msgstr "Transacções do ticket"
-
-#: lib/RT/Tickets_Overlay.pm:2109
-msgid "Ticket content"
-msgstr "Conteúdo do ticket"
-
-#: lib/RT/Tickets_Overlay.pm:2158
-msgid "Ticket content type"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:605 lib/RT/Ticket_Overlay.pm:619 lib/RT/Ticket_Overlay.pm:630 lib/RT/Ticket_Overlay.pm:765
-msgid "Ticket could not be created due to an internal error"
-msgstr ""
-
-#: html/Ticket/Create.html:247
-msgid "Ticket could not be loaded"
-msgstr ""
-
-#: html/Ticket/Display.html:57
-msgid "Ticket metadata"
-msgstr ""
-
-#: etc/initialdata:310
-msgid "Ticket status changed"
-msgstr "Estado do ticket alterado"
-
-#: lib/RT/Search/FromSQL.pm:84
-#. (ref $self)
-msgid "TicketSQL search module"
-msgstr ""
-
-#: 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
-msgid "Tickets"
-msgstr "Tickets"
-
-#: lib/RT/Tickets_Overlay.pm:2350
-#. ($self->loc( $args{'TYPE'} ), ( $args{'BASE'} || $args{'TICKET'} ))
-msgid "Tickets %1 %2"
-msgstr "Tickets %1 %2"
-
-#: lib/RT/Tickets_Overlay.pm:2302
-#. ($self->loc( $args{'TYPE'} ), ( $args{'TARGET'} || $args{'TICKET'} ))
-msgid "Tickets %1 by %2"
-msgstr "Tickets %1 por %2"
-
-#: html/Tools/Reports/CreatedByDates.html:88
-msgid "Tickets created after"
-msgstr "Tickets criados depois de"
-
-#: html/Tools/Reports/CreatedByDates.html:90
-msgid "Tickets created before"
-msgstr "Tickets criados antes de"
-
-#: html/Tools/Reports/ResolvedByDates.html:89
-msgid "Tickets resolved after"
-msgstr "Tickets resolvidos depois de"
-
-#: html/Tools/Reports/ResolvedByDates.html:91
-msgid "Tickets resolved before"
-msgstr "Tickets resolvidos antes de"
-
-#: html/Approvals/Elements/ShowDependency:50
-msgid "Tickets which depend on this approval:"
-msgstr "Pedidos que dependem desta aprovação"
-
-#: html/Search/Elements/PickBasics:136 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:74
-msgid "Time Estimated"
-msgstr "Tempo previsto"
-
-#: html/Search/Elements/PickBasics:137 html/Ticket/Create.html:199 html/Ticket/Elements/EditBasics:87 lib/RT/Tickets_Overlay.pm:2080
-msgid "Time Left"
-msgstr "Tempo disponível"
-
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:192 html/Ticket/Elements/EditBasics:80 lib/RT/Tickets_Overlay.pm:2055
-msgid "Time Worked"
-msgstr "Tempo de trabalho"
-
-#: html/Elements/Footer:53
-msgid "Time to display"
-msgstr "Tempo usado para disponibilizar página"
-
-#: lib/RT/Ticket_Overlay.pm:1169
-msgid "TimeWorked"
-msgstr ""
-
-#: html/Search/Elements/EditFormat:76
-msgid "Title"
-msgstr ""
-
-#: html/Elements/Footer:64
-#. ('<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:1172
-msgid "Told"
-msgstr ""
-
-#: html/Admin/Elements/Tabs:70 html/Admin/index.html:90 html/Elements/Tabs:77 html/Tools/index.html:48 html/Tools/index.html:51
-msgid "Tools"
-msgstr "Ferramentas"
-
-#: html/Search/Elements/Chart:132
-msgid "Total"
-msgstr "Total"
-
-#: etc/initialdata:252
-msgid "Transaction"
-msgstr "Transacção"
-
-#: lib/RT/Transaction_Overlay.pm:826
-#. ($self->Data)
-msgid "Transaction %1 purged"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:185
-msgid "Transaction Created"
-msgstr "Transacção Criada"
-
-#: html/Admin/Elements/QueueTabs:80
-msgid "Transaction Custom Fields"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:130
-msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:891
-msgid "Transactions are immutable"
-msgstr ""
-
-#: lib/RT/Date.pm:420
-msgid "Tue."
-msgstr "Tue"
-
-#: 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:1894
-msgid "Type"
-msgstr "Tipo"
-
-#: lib/RT/ScripCondition_Overlay.pm:130
-msgid "Unimplemented"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:91
-msgid "Unix login"
-msgstr ""
-
-#: lib/RT/Attachment_Overlay.pm:291 lib/RT/Record.pm:863
-#. ($self->ContentEncoding)
-#. ($ContentEncoding)
-msgid "Unknown ContentEncoding %1"
-msgstr ""
-
-#: html/Search/Build.html:461 lib/RT/Report/Tickets.pm:410
-#. ($key)
-msgid "Unknown field: %1"
-msgstr ""
-
-#: html/Elements/SelectResultsPerPage:60
-msgid "Unlimited"
-msgstr ""
-
-#: html/Search/Elements/SelectSearchesForObjects:66
-msgid "Unnamed search"
-msgstr "Procura sem nome"
-
-#: etc/initialdata:32
-msgid "Unprivileged"
-msgstr ""
-
-#: html/Admin/Elements/EditCustomFields:62
-msgid "Unselected Custom Fields"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:63
-msgid "Unselected objects"
-msgstr ""
-
-#: lib/RT/Transaction_Overlay.pm:680
-msgid "Untaken"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:130 html/Elements/RT__Ticket/ColumnMap:304 html/Search/Bulk.html:195 html/Search/Bulk.html:77
-msgid "Update"
-msgstr "Actualizar"
-
-#: html/Ticket/Update.html:137
-msgid "Update Ticket"
-msgstr "Actualizar Ticket"
-
-#: html/Search/Bulk.html:128 html/Ticket/ModifyAll.html:89 html/Ticket/Update.html:74
-msgid "Update Type"
-msgstr "Tipo de actualização"
-
-#: html/Search/Bulk.html:202 html/Search/Results.html:80
-msgid "Update multiple tickets"
-msgstr "Actualizar múltiplos tickets"
-
-#: lib/RT/Action/CreateTickets.pm:752 lib/RT/Interface/Web.pm:611
-msgid "Update not recorded."
-msgstr ""
-
-#: html/Ticket/ModifyAll.html:86
-msgid "Update ticket"
-msgstr "Actualizar ticket"
-
-#: html/SelfService/Update.html:114 html/SelfService/Update.html:49
-#. ($Ticket->id)
-msgid "Update ticket #%1"
-msgstr "Actualizar ticket #%1"
-
-#: html/Ticket/Update.html:160
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Update ticket #%1 (%2)"
-msgstr "Actualizar ticket #%1 (%2)"
-
-#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:610
-msgid "Update type was neither correspondence nor comment."
-msgstr ""
-
-#: html/Elements/SelectDateType:56 html/Ticket/Elements/ShowDates:74 lib/RT/CustomField_Overlay.pm:1287 lib/RT/Ticket_Overlay.pm:1173
-msgid "Updated"
-msgstr "Actualizado"
-
-#: html/Tools/Offline.html:95
-msgid "Upload"
-msgstr "Carregar"
-
-#: lib/RT/CustomField_Overlay.pm:86
-msgid "Upload multiple files"
-msgstr "Carregar múltiplos ficheiros"
-
-#: lib/RT/CustomField_Overlay.pm:81
-msgid "Upload multiple images"
-msgstr "Carregar múltiplas imagens"
-
-#: lib/RT/CustomField_Overlay.pm:87
-msgid "Upload one file"
-msgstr "Carregar um ficheiro"
-
-#: lib/RT/CustomField_Overlay.pm:82
-msgid "Upload one image"
-msgstr "Carregar uma imagem"
-
-#: lib/RT/CustomField_Overlay.pm:88
-msgid "Upload up to %1 files"
-msgstr "Carregar até %1 ficheiros"
-
-#: lib/RT/CustomField_Overlay.pm:83
-msgid "Upload up to %1 images"
-msgstr "Carregar até %1 imagens"
-
-#: html/Tools/Offline.html:95
-msgid "Upload your changes"
-msgstr ""
-
-#: html/Admin/index.html:92
-msgid "Use other RT administrative tools"
-msgstr "Utilizar outras ferramentas administrativas do RT"
-
-#: lib/RT/Ticket_Overlay.pm:508
-#. ($args{'Owner'})
-msgid "User '%1' could not be found."
-msgstr "Utilizador '%1' não encontrado"
-
-#: etc/initialdata:132 etc/initialdata:206
-msgid "User Defined"
-msgstr ""
-
-#: html/Admin/Elements/EditScrip:95
-msgid "User Defined conditions and actions"
-msgstr ""
-
-#: 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
-msgid "User Rights"
-msgstr "Direitos de utilizador"
-
-#: lib/RT/Interface/Web.pm:1392
-#. ($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 ""
-
-#: html/Admin/Users/Modify.html:305
-#. ($msg)
-msgid "User could not be created: %1"
-msgstr "Utilizador não criado: %1"
-
-#: lib/RT/User_Overlay.pm:332
-msgid "User created"
-msgstr "Utilizador criado"
-
-#: html/Admin/CustomFields/GroupRights.html:76 html/Admin/Global/GroupRights.html:90 html/Admin/Groups/GroupRights.html:77 html/Admin/Queues/GroupRights.html:92
-msgid "User defined groups"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:594 lib/RT/User_Overlay.pm:614
-msgid "User loaded"
-msgstr "Utilizador carregado"
-
-#: html/Admin/Groups/index.html:105
-msgid "User-defined groups"
-msgstr "Grupos definidos por utilizadores"
-
-#: html/Admin/Users/Modify.html:71 html/Elements/Login:92 html/Ticket/Elements/AddWatchers:58
-msgid "Username"
-msgstr "Username"
-
-#: 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
-msgid "Users"
-msgstr "Utilizadores"
-
-#: html/Admin/Users/index.html:87
-msgid "Users matching search criteria"
-msgstr "Utilizadores que verificam o critério de pesquisa"
-
-#: bin/rt-crontool:136
-#. ($transaction->id)
-msgid "Using transaction #%1..."
-msgstr ""
-
-#: lib/RT/Tickets_Overlay_SQL.pm:530
-msgid "Valid Query"
-msgstr "Query válida"
-
-#: html/Admin/CustomFields/Modify.html:82
-msgid "Validation"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:132 html/Admin/Elements/EditCustomField:80
-msgid "Values"
-msgstr "Valores"
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "Watch"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "WatchAsAdminCc"
-msgstr ""
-
-#: html/Admin/Elements/QueueTabs:65
-msgid "Watchers"
-msgstr ""
-
-#: lib/RT/Date.pm:421
-msgid "Wed."
-msgstr "Wed"
-
-#: html/Tools/MyDay.html:80
-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 ""
-
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr ""
-
-#: etc/initialdata:146
-msgid "When a ticket is created"
-msgstr "Quando um ticket é criado"
-
-#: etc/initialdata:418
-msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
-msgstr ""
-
-#: etc/initialdata:151
-msgid "When anything happens"
-msgstr "Quando algo acontece"
-
-#: etc/initialdata:199
-msgid "Whenever a ticket is resolved"
-msgstr "Quando um ticket é resolvido"
-
-#: etc/initialdata:185
-msgid "Whenever a ticket's owner changes"
-msgstr ""
-
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
-msgid "Whenever a ticket's priority changes"
-msgstr ""
-
-#: etc/initialdata:193
-msgid "Whenever a ticket's queue changes"
-msgstr ""
-
-#: etc/initialdata:170
-msgid "Whenever a ticket's status changes"
-msgstr ""
-
-#: etc/initialdata:207
-msgid "Whenever a user-defined condition occurs"
-msgstr ""
-
-#: etc/initialdata:164
-msgid "Whenever comments come in"
-msgstr ""
-
-#: etc/initialdata:157
-msgid "Whenever correspondence comes in"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:191 html/User/Prefs.html:90
-msgid "Work"
-msgstr ""
-
-#: html/Search/Results.html:84
-msgid "Work offline"
-msgstr ""
-
-#: html/Ticket/Elements/ShowBasics:65 html/Ticket/Update.html:66 html/Tools/MyDay.html:65
-msgid "Worked"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3157
-msgid "You already own this ticket"
-msgstr "Este ticket já é seu"
-
-#: html/autohandler:216 html/autohandler:224
-msgid "You are not an authorized user"
-msgstr ""
-
-#: 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:3039
-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:3035
-msgid "You can only take tickets that are unowned"
-msgstr "Só pode responsabilizar-se por tickets que não têm dono"
-
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:778
-#. ($num, $queue)
-msgid "You found %1 tickets in queue %2"
-msgstr "Encontrou %1 tickets na queue %2"
-
-#: html/NoAuth/Logout.html:54
-msgid "You have been logged out of RT."
-msgstr "Saiu do RT"
-
-#: html/SelfService/Display.html:135
-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:1996
-msgid "You may not create requests in that queue."
-msgstr "Não pode criar pedidos nessa queue"
-
-#: html/NoAuth/Logout.html:58
-msgid "You're welcome to login again"
-msgstr ""
-
-#: etc/initialdata:502 etc/initialdata:504
-#. (# loc $self->TransactionObj->CreatorObj->Name,)
-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:253
-msgid "Your username or password is incorrect"
-msgstr "Login ou password errados"
-
-#: html/Admin/Users/Modify.html:171 html/User/Prefs.html:151
-msgid "Zip"
-msgstr "Código Postal"
-
-#: html/Search/Elements/DisplayOptions:67
-msgid "[none]"
-msgstr ""
-
-#: lib/RT/System.pm:89
-msgid "allow creation of saved searches"
-msgstr ""
-
-#: lib/RT/System.pm:88
-msgid "allow loading of saved searches"
-msgstr ""
-
-#: html/User/Elements/DelegateRights:82
-#. ($right->PrincipalObj->Object->SelfDescription)
-msgid "as granted to %1"
-msgstr ""
-
-#: html/Search/Results.html:85
-msgid "chart"
-msgstr ""
-
-#: html/SelfService/Closed.html:51
-msgid "closed"
-msgstr "fechado"
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:57
-msgid "contains"
-msgstr "contém"
-
-#: lib/RT/Report/Tickets.pm:347
-msgid "current: $current, want $want, Error near ->$val<- expecting a $token in '$string'\\n"
-msgstr ""
-
-#: html/Admin/Queues/Modify.html:100 lib/RT/Date.pm:348
-msgid "days"
-msgstr "dias"
-
-#: lib/RT/Queue_Overlay.pm:89
-msgid "deleted"
-msgstr "apagado"
-
-#: html/Search/Elements/PickBasics:63
-msgid "does not match"
-msgstr ""
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectMatch:58
-msgid "doesn't contain"
-msgstr "não contém"
-
-#: html/Elements/SelectEqualityOperator:61
-msgid "equal to"
-msgstr "igual a"
-
-#: html/Search/Build.html:553
-msgid "error: can't move down"
-msgstr ""
-
-#: html/Search/Build.html:575
-msgid "error: can't move left"
-msgstr ""
-
-#: html/Search/Build.html:534
-msgid "error: can't move up"
-msgstr ""
-
-#: html/Search/Build.html:618
-msgid "error: nothing to delete"
-msgstr ""
-
-#: html/Search/Build.html:539 html/Search/Build.html:558 html/Search/Build.html:580 html/Search/Build.html:609
-msgid "error: nothing to move"
-msgstr ""
-
-#: html/Search/Build.html:636
-msgid "error: nothing to toggle"
-msgstr ""
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
-msgid "greater than"
-msgstr "maior do que"
-
-#: lib/RT/Group_Overlay.pm:216
-#. ($self->Name)
-msgid "group '%1'"
-msgstr "grupo '%1'"
-
-#: html/Search/Results.html:90
-#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query))
-msgid "grouped by %1"
-msgstr "agrupado por %1"
-
-#: lib/RT/Date.pm:344
-msgid "hours"
-msgstr "horas"
-
-#: html/Search/Elements/PickBasics:50
-msgid "id"
-msgstr "id"
-
-#: 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
-msgid "is"
-msgstr "é"
-
-#: 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
-msgid "isn't"
-msgstr "não é"
-
-#: html/Elements/SelectCustomFieldOperator:61 html/Elements/SelectEqualityOperator:61
-msgid "less than"
-msgstr "menos do que"
-
-#: html/Search/Elements/PickBasics:62
-msgid "matches"
-msgstr "coincide"
-
-#: lib/RT/Date.pm:340
-msgid "min"
-msgstr ""
-
-#: html/Tools/MyDay.html:65
-msgid "minutes"
-msgstr "minutos"
-
-#: lib/RT/Date.pm:356
-msgid "months"
-msgstr "meses"
-
-#: lib/RT/Queue_Overlay.pm:84
-msgid "new"
-msgstr "novo"
-
-#: html/Admin/Elements/PickCustomFields:66 html/Admin/Elements/PickObjects:67
-msgid "no name"
-msgstr "sem nome"
-
-#: html/Admin/Elements/EditScrips:66
-msgid "no value"
-msgstr "sem valor"
-
-#: html/Admin/Elements/EditQueueWatchers:50 html/Ticket/Elements/EditWatchers:51
-msgid "none"
-msgstr "nenhum"
-
-#: html/Elements/SelectEqualityOperator:61
-msgid "not equal to"
-msgstr "diferente de"
-
-#: html/SelfService/Elements/MyRequests:78 lib/RT/Queue_Overlay.pm:85
-msgid "open"
-msgstr "aberto"
-
-#: lib/RT/Group_Overlay.pm:221
-#. ($self->Name, $user->Name)
-msgid "personal group '%1' for user '%2'"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:229
-#. ($queue->Name, $self->Type)
-msgid "queue %1 %2"
-msgstr "queue %1 %2"
-
-#: lib/RT/Queue_Overlay.pm:88
-msgid "rejected"
-msgstr "rejeitado"
-
-#: lib/RT/Queue_Overlay.pm:87
-msgid "resolved"
-msgstr "resolvido"
-
-#: lib/RT/Date.pm:336
-msgid "sec"
-msgstr ""
-
-#: lib/RT/System.pm:87
-msgid "show Configuration tab"
-msgstr ""
-
-#: html/Search/Results.html:82
-msgid "spreadsheet"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:86
-msgid "stalled"
-msgstr "pendente"
-
-#: html/Search/Results.html:91
-#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
-msgstr ""
-
-#: html/Prefs/MyRT.html:95
-msgid "summary rows"
-msgstr "linhas de sumário"
-
-#: lib/RT/Group_Overlay.pm:224
-#. ($self->Type)
-msgid "system %1"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:235
-#. ($self->Type)
-msgid "system group '%1'"
-msgstr ""
-
-#: html/Elements/Error:66 html/SelfService/Error.html:65
-msgid "the calling component did not specify why"
-msgstr ""
-
-#: lib/RT/Group_Overlay.pm:232
-#. ($self->Instance, $self->Type)
-msgid "ticket #%1 %2"
-msgstr "ticket #%1 %2"
-
-#: lib/RT/Group_Overlay.pm:238
-#. ($self->Id)
-msgid "undescribed group %1"
-msgstr "grupo indefinido %1"
-
-#: lib/RT/Group_Overlay.pm:213
-#. ($user->Object->Name)
-msgid "user %1"
-msgstr "utilizador %1"
-
-#: lib/RT/Date.pm:352
-msgid "weeks"
-msgstr "semanas"
-
-#: lib/RT/Date.pm:360
-msgid "years"
-msgstr "anos"
-
diff --git a/rt/lib/RT/I18N/zh_cn.po b/rt/lib/RT/I18N/zh_cn.po
deleted file mode 100644
index 23dae6f0b..000000000
--- a/rt/lib/RT/I18N/zh_cn.po
+++ /dev/null
@@ -1,8423 +0,0 @@
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: RT 3.6.x\n"
-"PO-Revision-Date: 2007-12-09 13:05+0800\n"
-"Last-Translator: Audrey Tang <cpan@audreyt.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"
-
-#: html/Widgets/SavedSearch:70
-#. ($self->{CurrentSearch}{Object}->Description)
-msgid " %1 deleted."
-msgstr " 已删除 %1。"
-
-#: html/Widgets/SavedSearch:47
-#. ($self->{CurrentSearch}{Description}, $args->{Description})
-msgid " %1 renamed to %2."
-msgstr " %1 已更å为 %2。"
-
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr " %1 已储存。"
-
-#: NOT FOUND IN SOURCE
-msgid "#"
-msgstr "#"
-
-#: NOT FOUND IN SOURCE
-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
-#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
-msgid "#%1: %2"
-msgstr "#%1: %2"
-
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr "$1"
-
-#: lib/RT/Record.pm:940
-#. ($label)
-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:256
-#. ($self->ObjectType, $self->Object->Id)
-msgid "%1 #%2"
-msgstr "%1 #%2"
-
-#: lib/RT/Date.pm:365
-#. ($s, $time_unit)
-msgid "%1 %2"
-msgstr "%1 %2"
-
-#: NOT FOUND IN SOURCE
-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))
-msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%7-%2-%3 %4:%5:%6 %1"
-
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
-#. ($field, $self->NewValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 added"
-msgstr "%2 已新增为 %1"
-
-#: lib/RT/Date.pm:362
-#. ($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)
-#. ($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)
-#. ($field, $self->OldValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 deleted"
-msgstr "%2 已自 %1 删除"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 %2 of group %3"
-msgstr "%3 群组的 %1 %2"
-
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
-#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->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
-#. ($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))
-#. (loc($Ticket->Status()))
-#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-msgid "%1 (Unchanged)"
-msgstr "%1 (未更改)"
-
-#: 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")
-msgid "%1 - An argument to pass to %2"
-msgstr "%1 - 传递给 %2 的一个å‚æ•°"
-
-#: bin/rt-crontool:262
-#. ("--verbose")
-msgid "%1 - Output status updates to STDOUT"
-msgstr "%1 - 将更新状æ€è¾“出到 STDOUT"
-
-#: bin/rt-crontool:253
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
-msgstr "%1 - 指定欲使用的模æ¿ç¼–å·"
-
-#: bin/rt-crontool:256
-#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
-msgstr "%1 - 指定欲使用的更动为 'first' (第一项) 或 'last' (最åŽä¸€é¡¹)"
-
-#: bin/rt-crontool:247
-#. ("--action")
-msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - 指定欲使用的动作模å—"
-
-#: bin/rt-crontool:241
-#. ("--condition")
-msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - 指定欲使用的æ¡ä»¶æ¨¡å—"
-
-#: bin/rt-crontool:234
-#. ("--search")
-msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - 指定欲使用的查询模å—"
-
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%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>',)
-msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr "%1 RT %2 版,%4 版æƒæ‰€æœ‰ï¼Œ1996-%3。"
-
-#: lib/RT/ScripAction_Overlay.pm:150
-#. ($self->Id)
-msgid "%1 ScripAction loaded"
-msgstr "加载手续 %1"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 Total"
-msgstr "共 %1 笔"
-
-#: lib/RT/Record.pm:1722
-#. ($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)"
-
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
-#. ($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
-#. ($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."'")
-msgid "%1 changed from %2 to %3"
-msgstr "%1 的值从 %2 改为 %3"
-
-#: html/Search/Build.html:213
-#. ($Description)
-msgid "%1 copy"
-msgstr "%1 å¤åˆ¶"
-
-#: lib/RT/Record.pm:944
-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
-#. ($self)
-msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr "%1 无法将现况设æˆå·²è§£å†³ã€‚RT æ•°æ®åº“内容å¯èƒ½ä¸ä¸€è‡´ã€‚"
-
-#: lib/RT/Transaction_Overlay.pm:571
-#. ($obj_type)
-msgid "%1 created"
-msgstr "已建立 %1"
-
-#: lib/RT/Transaction_Overlay.pm:576
-#. ($obj_type)
-msgid "%1 deleted"
-msgstr "已删除 %1"
-
-#: etc/initialdata:593
-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:229
-#. ($0)
-msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr "%1 是从外部排程程åº(如 cron)æ¥å¯¹ç”³è¯·å•è¿›è¡Œæ“作的工具。"
-
-#: lib/RT/Queue_Overlay.pm:863
-#. ($principal->Object->Name, $args{'Type'})
-msgid "%1 is no longer a %2 for this queue."
-msgstr "%1 å·²ä¸å†æ˜¯æ­¤è¡¨å•çš„ %2。"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 å·²ä¸å†æ˜¯æ­¤ç”³è¯·å•çš„ %2。"
-
-#: NOT FOUND IN SOURCE
-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 ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„表å•ç¼–å·ã€‚"
-
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
-#. ($minutes)
-msgid "%1 min"
-msgstr "%1 分钟"
-
-#: etc/initialdata:601
-msgid "%1 newest unowned tickets"
-msgstr "å‰ %1 份待认领的申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 not shown"
-msgstr "没有显示 %1"
-
-#: lib/RT/CustomField_Overlay.pm:893
-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 项结果"
-
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "%1æƒé™"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 succeeded\\n"
-msgstr "%1 完æˆ\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "ä¸çŸ¥é“ $MessageID çš„ %1 类别"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "ä¸çŸ¥é“ %2 çš„ %1 类别"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 was created without a CurrentUser\\n"
-msgstr "%1 新增时未指定现行使用者"
-
-#: lib/RT/Action/ResolveMembers.pm:63
-#. (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
-msgid "%1's %2 objects"
-msgstr "%1 内的 %2 对象"
-
-#: lib/RT/CustomField_Overlay.pm:895
-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
-#. ($object->Name)
-#. ($Object->Name)
-msgid "%1's saved searches"
-msgstr "%1 的预存查询"
-
-#: lib/RT/Transaction_Overlay.pm:481
-#. ($self)
-msgid "%1: no attachment specified"
-msgstr "%1:未指定附件"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:78
-#. ($size)
-msgid "%1b"
-msgstr "%1 字节"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:75
-#. (int( $size / 102.4 ) / 10)
-msgid "%1k"
-msgstr "%1k 字节"
-
-#: html/Ticket/Elements/ShowTime:49
-#. (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:1142
-#. ($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
-msgid "(Check box to delete)"
-msgstr "(点选欲删除的项目)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Check boxes to delete)"
-msgstr "(点选欲删除的项目)"
-
-#: html/Ticket/Elements/PreviewScrips:99
-msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr "(点选欲åœç”¨é€šçŸ¥çš„收件人)"
-
-#: html/Ticket/Elements/PreviewScrips:123
-msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr "(点选欲å¯ç”¨é€šçŸ¥çš„收件人)"
-
-#: html/Ticket/Create.html:218
-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)
-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
-msgid "(No custom fields)"
-msgstr "(没有自订字段)"
-
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
-msgid "(No members)"
-msgstr "(没有æˆå‘˜)"
-
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
-msgid "(No scrips)"
-msgstr "(没有手续)"
-
-#: html/Admin/Elements/EditTemplates:52
-msgid "(No templates)"
-msgstr "没有模æ¿"
-
-#: NOT FOUND IN SOURCE
-msgid "(No workflows)"
-msgstr "没有æµç¨‹"
-
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
-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>更改åŽç»­çš„收件者åå•ã€‚)"
-
-#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<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>更改åŽç»­çš„收件者åå•ã€‚)"
-
-#: html/Ticket/Create.html:103
-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>更改åŽç»­çš„收件者åå•ã€‚)"
-
-#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•ä¸Šä»¥é€—å·éš”开的电å­é‚®ä»¶åœ°å€ã€‚è¿™<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>更改åŽç»­çš„收件者åå•ã€‚)"
-
-#: html/Ticket/Create.html:93
-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>更改åŽç»­çš„收件者åå•ã€‚)"
-
-#: html/Admin/Elements/EditScrip:96
-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
-msgid "(Will not be sent email)"
-msgstr "(ä¸ä¼šæ”¶åˆ°é‚®ä»¶)"
-
-#: NOT FOUND IN SOURCE
-msgid "(default delegate)"
-msgstr "(预设代ç†äºº)"
-
-#: NOT FOUND IN SOURCE
-msgid "(delete)"
-msgstr "(删除)"
-
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
-msgid "(empty)"
-msgstr "(空白)"
-
-#: NOT FOUND IN SOURCE
-msgid "(new)"
-msgstr "(新增)"
-
-#: html/Admin/Users/index.html:60
-msgid "(no name listed)"
-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
-msgid "(no value)"
-msgstr "(æ— )"
-
-#: html/Admin/Elements/EditCustomFieldValues:47
-msgid "(no values)"
-msgstr "(没有值)"
-
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
-msgid "(only one ticket)"
-msgstr "(仅能指定一份申请å•)"
-
-#: html/Elements/RT__Ticket/ColumnMap:149
-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
-msgid "(required)"
-msgstr "(å¿…å¡«)"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "(untitled)"
-msgstr "(未命å)"
-
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr "(yyyy/mm/dd)"
-
-#: NOT FOUND IN SOURCE
-msgid "*"
-msgstr "★"
-
-#: html/Elements/EditCustomFieldSelect:57
-msgid "-"
-msgstr "-"
-
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr "--transaction 的值仅能为 'first' 或 'last'"
-
-#: NOT FOUND IN SOURCE
-msgid ":"
-msgstr ":"
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket->Status%>"
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
-msgstr "<% $_ %>"
-
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr "<%$_%>"
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr "<%$field%>"
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"æ出申请å•\" />&nbsp;%1"
-
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"æ出申请å•\">&nbsp;%1"
-
-#: etc/initialdata:218
-msgid "A blank template"
-msgstr "空白模æ¿"
-
-#: html/Admin/Users/Modify.html:371
-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:174 lib/RT/Principal_Overlay.pm:219
-msgid "ACE not found"
-msgstr "找ä¸åˆ° ACE 设定"
-
-#: lib/RT/ACE_Overlay.pm:853
-msgid "ACEs can only be created and deleted."
-msgstr "祇能新增或删除 ACE 设定。"
-
-#: NOT FOUND IN SOURCE
-msgid "ACLEquivalence"
-msgstr "ACLEquivalence"
-
-#: html/Search/Elements/SelectAndOr:46
-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 "个人信æ¯"
-
-#: html/User/Elements/Tabs:53
-msgid "About me"
-msgstr "个人信æ¯"
-
-#: NOT FOUND IN SOURCE
-msgid "Access Right"
-msgstr "系统使用登录æƒé™"
-
-#: html/Admin/Users/Modify.html:106
-msgid "Access control"
-msgstr "å­˜å–æƒé™"
-
-#: html/Admin/Elements/EditScrip:65
-msgid "Action"
-msgstr "动作"
-
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "动作 %1 找ä¸åˆ°"
-
-#: NOT FOUND IN SOURCE
-msgid "Action committed."
-msgstr "动作执行完毕"
-
-#: bin/rt-crontool:171
-msgid "Action committed.\\n"
-msgstr "动作执行完毕。\\n"
-
-#: lib/RT/Scrip_Overlay.pm:168
-msgid "Action is mandatory argument"
-msgstr "动作为必填字段"
-
-#: bin/rt-crontool:167
-msgid "Action prepared..."
-msgstr "动作准备完毕..."
-
-#: NOT FOUND IN SOURCE
-msgid "Activated Date"
-msgstr "申请激活时间"
-
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr "新增"
-
-#: html/Search/Bulk.html:92
-msgid "Add AdminCc"
-msgstr "新增管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: html/Search/Bulk.html:88
-msgid "Add Cc"
-msgstr "新增副本收件人"
-
-#: html/Search/Elements/EditFormat:49
-msgid "Add Columns"
-msgstr "新增字段"
-
-#: html/Search/Elements/PickCriteria:46
-msgid "Add Criteria"
-msgstr "新增æ¡ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Add Entry"
-msgstr "新增列"
-
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
-msgid "Add More Files"
-msgstr "新增更多附件"
-
-#: NOT FOUND IN SOURCE
-msgid "Add Next State"
-msgstr "新增下一项关å¡"
-
-#: html/Search/Bulk.html:84
-msgid "Add Requestor"
-msgstr "新增申请人"
-
-#: html/Admin/Elements/AddCustomFieldValue:46
-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 "新增一é“手续到此表å•"
-
-#: html/Admin/Global/Scrip.html:83
-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
-msgid "Add comments or replies to selected tickets"
-msgstr "新增评论或回å¤åˆ°æŒ‡å®šçš„申请å•"
-
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
-msgid "Add members"
-msgstr "新增æˆå‘˜"
-
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
-msgid "Add new watchers"
-msgstr "新增视察员"
-
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
-msgstr "将这些æ¡ä»¶åŠ è¿›æŸ¥è¯¢å†…"
-
-#: html/Search/Bulk.html:158
-msgid "Add values"
-msgstr "新增值"
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "Add, delete and modify custom field values for objects"
-msgstr "新增ã€åˆ é™¤åŠä¿®æ”¹å¯¹è±¡çš„自订字段值"
-
-#: NOT FOUND IN SOURCE
-msgid "AddNextState"
-msgstr "新增下一项关å¡"
-
-#: lib/RT/Queue_Overlay.pm:763
-#. ($args{'Type'})
-msgid "Added principal as a %1 for this queue"
-msgstr "å•ä½å·²æ–°å¢žä¸ºæ­¤è¡¨å•çš„ %1"
-
-#: lib/RT/Ticket_Overlay.pm:1455
-#. ($self->loc($args{'Type'}))
-msgid "Added principal as a %1 for this ticket"
-msgstr "å•ä½å·²æ–°å¢žä¸ºæ­¤ç”³è¯·å•çš„ %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Additional Hints"
-msgstr "é¢å¤–æ示"
-
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
-msgid "Address1"
-msgstr "ä½å€"
-
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
-msgid "Address2"
-msgstr "ä½å€(ç»­)"
-
-#: NOT FOUND IN SOURCE
-msgid "Adjust Blinking Rate"
-msgstr "调整闪çƒé€Ÿåº¦å¿«æ…¢"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin"
-msgstr "管ç†å‘˜"
-
-#: html/Ticket/Create.html:98
-msgid "Admin Cc"
-msgstr "管ç†å‘˜å‰¯æœ¬"
-
-#: etc/initialdata:295
-msgid "Admin Comment"
-msgstr "管ç†å‘˜è¯„论"
-
-#: etc/initialdata:274
-msgid "Admin Correspondence"
-msgstr "管ç†å‘˜å›žå¤"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin Rights"
-msgstr "管ç†å‘˜æƒé™"
-
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
-msgid "Admin queues"
-msgstr "表å•ç®¡ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin users"
-msgstr "使用者管ç†"
-
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
-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"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminAllPersonalGroups"
-msgstr "管ç†æ‰€æœ‰ä»£ç†äººç¾¤ç»„"
-
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
-msgid "AdminCc"
-msgstr "管ç†å‘˜å‰¯æœ¬"
-
-msgid "AdminCc.EmailAddress"
-msgstr "管ç†å‘˜å‰¯æœ¬: 电å­é‚®ä»¶ä¿¡ç®±"
-
-msgid "Cc.EmailAddress"
-msgstr "副本: 电å­é‚®ä»¶ä¿¡ç®±"
-
-msgid "Requestor.EmailAddress"
-msgstr "申请人: 电å­é‚®ä»¶ä¿¡ç®±"
-
-msgid "Custom.Ownership"
-msgstr "自订: 承办状æ€"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminComment"
-msgstr "管ç†å‘˜è¯„论"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCorrespondence"
-msgstr "管ç†å‘˜å›žå¤"
-
-#: lib/RT/CustomField_Overlay.pm:106
-msgid "AdminCustomField"
-msgstr "管ç†è‡ªè®¢å­—段"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCustomFields"
-msgstr "管ç†è‡ªè®¢å­—段"
-
-#: lib/RT/Group_Overlay.pm:163
-msgid "AdminGroup"
-msgstr "管ç†ç¾¤ç»„"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminGroupDescription"
-msgstr "管ç†ç¾¤ç»„æè¿°"
-
-#: lib/RT/Group_Overlay.pm:165
-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:80
-msgid "AdminOwnPersonalGroups"
-msgstr "管ç†ä»£ç†äººç¾¤ç»„"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "AdminQueue"
-msgstr "管ç†è¡¨å•"
-
-#: lib/RT/System.pm:81
-msgid "AdminUsers"
-msgstr "管ç†ä½¿ç”¨è€…"
-
-#: NOT FOUND IN SOURCE
-msgid "Administrative"
-msgstr "行政类"
-
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
-msgid "Administrative Cc"
-msgstr "管ç†å‘˜å‰¯æœ¬"
-
-#: NOT FOUND IN SOURCE
-msgid "Admins"
-msgstr "主管"
-
-#: html/Ticket/Elements/Tabs:216
-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
-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:363
-msgid "All Approvals Passed"
-msgstr "完æˆå…¨éƒ¨ç­¾æ ¸"
-
-#: NOT FOUND IN SOURCE
-msgid "All Condition"
-msgstr "所有æ¡ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "All Custom Fields"
-msgstr "所有自订字段"
-
-#: html/Admin/Queues/index.html:75
-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 "ç¦åˆ©è¡¥åŠ©ç”³è¯·"
-
-#: NOT FOUND IN SOURCE
-msgid "Always sends a message to the requestors independent of message sender"
-msgstr "无论寄件æ¥æºä¸ºä½•ï¼Œä¸€å¾‹å¯„信给申请人"
-
-#: NOT FOUND IN SOURCE
-msgid "Amount"
-msgstr "æ•°é¢"
-
-#: html/Search/Elements/EditQuery:56
-msgid "And/Or"
-msgstr "AND/OR"
-
-#: NOT FOUND IN SOURCE
-msgid "Any Condition"
-msgstr "ä»»æ„æ¡ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Applies To"
-msgstr "套用于"
-
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
-msgid "Applies to"
-msgstr "套用于"
-
-#: html/Search/Edit.html:64
-msgid "Apply"
-msgstr "套用"
-
-#: NOT FOUND IN SOURCE
-msgid "Apply Template"
-msgstr "引用模æ¿"
-
-#: html/Search/Edit.html:64
-msgid "Apply your changes"
-msgstr "套用更动"
-
-#: html/Elements/Tabs:77
-msgid "Approval"
-msgstr "签核"
-
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
-#. ($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
-#. ($ticket->Id)
-msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr "ç­¾æ ¸å• #%1:系统错误,记录失败"
-
-#: html/Approvals/index.html:73
-#. ($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:351
-msgid "Approval Passed"
-msgstr "完æˆæŸé¡¹ç­¾æ ¸"
-
-#: etc/initialdata:374
-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 "签核æµç¨‹"
-
-#: html/Approvals/Elements/Approve:69
-msgid "Approve"
-msgstr "核准"
-
-#: NOT FOUND IN SOURCE
-msgid "Approver"
-msgstr "签核人"
-
-#: NOT FOUND IN SOURCE
-msgid "Approver Setting"
-msgstr "执行签核人设定"
-
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "签核备注:%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Apr"
-msgstr "四月"
-
-#: lib/RT/Date.pm:444
-msgid "Apr."
-msgstr "04"
-
-#: NOT FOUND IN SOURCE
-msgid "April"
-msgstr "四月"
-
-#: NOT FOUND IN SOURCE
-msgid "Are you sure to delete checked items?"
-msgstr "您确定è¦åˆ é™¤ï¼Ÿ"
-
-#: html/Search/Elements/DisplayOptions:81
-msgid "Asc"
-msgstr "递增"
-
-#: html/Elements/SelectSortOrder:56
-msgid "Ascending"
-msgstr "递增"
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "Assign and remove custom fields"
-msgstr "指派åŠç§»é™¤è‡ªè®¢å­—段"
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "AssignCustomFields"
-msgstr "指派自订字段"
-
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
-msgid "Attach"
-msgstr "附件"
-
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
-msgid "Attach file"
-msgstr "附加档案"
-
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
-msgid "Attached file"
-msgstr "现有附件"
-
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
-#. ($Attachment)
-msgid "Attachment '%1' could not be loaded"
-msgstr "无法加载附件 '%1'"
-
-#: lib/RT/Transaction_Overlay.pm:489
-msgid "Attachment created"
-msgstr "附件新增完毕"
-
-#: lib/RT/Tickets_Overlay.pm:1945
-msgid "Attachment filename"
-msgstr "附件档å"
-
-#: html/Ticket/Elements/ShowAttachments:47
-msgid "Attachments"
-msgstr "附件"
-
-#: lib/RT/Attributes_Overlay.pm:171
-msgid "Attribute Deleted"
-msgstr "已删除该属性"
-
-#: NOT FOUND IN SOURCE
-msgid "Attributes"
-msgstr "属性"
-
-#: NOT FOUND IN SOURCE
-msgid "Aug"
-msgstr "八月"
-
-#: lib/RT/Date.pm:448
-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:221
-msgid "Autoreply"
-msgstr "自动回å¤"
-
-#: etc/initialdata:72
-msgid "Autoreply To Requestors"
-msgstr "自动对申请人回å¤"
-
-#: NOT FOUND IN SOURCE
-msgid "AutoreplyToRequestors"
-msgstr "自动对申请人回å¤"
-
-#: html/Widgets/SelectionBox:185
-msgid "Available"
-msgstr "å¯ç”¨"
-
-#: NOT FOUND IN SOURCE
-msgid "Available Columns"
-msgstr "å¯ç”¨çš„字段:"
-
-#: NOT FOUND IN SOURCE
-msgid "Available Rights:"
-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 çš„æ•°æ®é”™è¯¯"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad transaction number for attachment. %1 should be %2\\n"
-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
-msgid "Basics"
-msgstr "基本信æ¯"
-
-#: NOT FOUND IN SOURCE
-msgid "Batch Approval"
-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
-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 "开始签核"
-
-#: NOT FOUND IN SOURCE
-msgid "Begin From "
-msgstr "起始日"
-
-#: html/Elements/Logo:47
-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:217
-msgid "Blank"
-msgstr "空白模æ¿"
-
-#: html/Search/Elements/EditFormat:84
-msgid "Bold"
-msgstr "粗体"
-
-#: NOT FOUND IN SOURCE
-msgid "Bookmarkable URL for this search"
-msgstr "将查询结果转为å¯æ”¾å…¥ä¹¦ç­¾çš„网å€"
-
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
-msgstr "å¯æ”¾å…¥ä¹¦ç­¾çš„网å€"
-
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
-msgid "Brief headers"
-msgstr "精简标头档"
-
-#: html/Ticket/Elements/Tabs:227
-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 "事业部:"
-
-#: lib/RT/User_Overlay.pm:1853
-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:379
-msgid "Can't add a custom field value without a name"
-msgstr "ä¸èƒ½æ–°å¢žæ²¡æœ‰å称的自订字段值"
-
-#: html/Admin/CustomFields/Objects.html:86
-#. ($Class)
-msgid "Can't find a collection class for '%1'"
-msgstr "找ä¸åˆ°â€˜%1’的集åˆç±»åˆ«"
-
-#: html/Search/Build.html:286
-msgid "Can't find a saved search to work with"
-msgstr "找ä¸åˆ°é¢„存查询"
-
-#: lib/RT/Link_Overlay.pm:159
-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
-#. (loc($self->{SearchType}))
-msgid "Can't save %1"
-msgstr "无法储存 %1"
-
-#: html/Search/Build.html:290
-msgid "Can't save this search"
-msgstr "无法储存此项查询"
-
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
-msgid "Can't specifiy both base and target"
-msgstr "ä¸èƒ½åŒæ—¶æŒ‡å®šèµ·å§‹ç”³è¯·å•ä¸Žç›®çš„申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Cancel"
-msgstr "å–消"
-
-#: html/autohandler:204
-#. ($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 "分类管ç†"
-
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
-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
-msgid "Cc"
-msgstr "副本"
-
-#: NOT FOUND IN SOURCE
-msgid "Cc Type"
-msgstr "副本类别"
-
-#: NOT FOUND IN SOURCE
-msgid "Chairperson's Office"
-msgstr "董事长室"
-
-#: NOT FOUND IN SOURCE
-msgid "Change Ticket"
-msgstr "修改申请å•"
-
-#: html/SelfService/Prefs.html:52
-msgid "Change password"
-msgstr "更改å£ä»¤"
-
-#: NOT FOUND IN SOURCE
-msgid "ChangeOwnerUI"
-msgstr "å¯å¦é€‰æ‹©è¡¨å•æ‰¿åŠžäºº"
-
-#: html/Elements/Submit:78
-msgid "Check All"
-msgstr "全部选å–"
-
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
-msgid "Check box to delete"
-msgstr "选择欲删除的项目"
-
-#: html/Admin/Elements/SelectRights:55
-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
-msgid "Children"
-msgstr "å­ç”³è¯·å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Chinese Name"
-msgstr "中文姓å"
-
-#: NOT FOUND IN SOURCE
-msgid "Chinese/English"
-msgstr "中英文"
-
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
-msgstr "选择日期"
-
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
-msgid "City"
-msgstr "所在城市"
-
-#: NOT FOUND IN SOURCE
-msgid "ClassicUI"
-msgstr "传统接å£"
-
-#: html/Elements/Submit:80
-msgid "Clear All"
-msgstr "全部清除"
-
-#: html/Helpers/CalPopup.html:51
-msgid "Close window"
-msgstr "关闭窗å£"
-
-#: html/Ticket/Elements/ShowDates:68
-msgid "Closed"
-msgstr "已解决"
-
-#: NOT FOUND IN SOURCE
-msgid "Closed Tickets"
-msgstr "已解决的申请å•"
-
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
-msgid "Closed tickets"
-msgstr "已解决的申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Code"
-msgstr "执行程åºç "
-
-#: lib/RT/CustomField_Overlay.pm:89
-msgid "Combobox: Select or enter multiple values"
-msgstr "下拉文字框:选择或键入多é‡é¡¹ç›®"
-
-#: lib/RT/CustomField_Overlay.pm:90
-msgid "Combobox: Select or enter one value"
-msgstr "下拉文字框:选择或键入å•ä¸€é¡¹ç›®"
-
-#: lib/RT/CustomField_Overlay.pm:91
-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
-msgid "Comment"
-msgstr "评论"
-
-#: html/Admin/Queues/Modify.html:79
-msgid "Comment Address"
-msgstr "评论电å­é‚®ä»¶åœ°å€"
-
-#: NOT FOUND IN SOURCE
-msgid "Comment not recorded"
-msgstr "评论未被纪录"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "Comment on tickets"
-msgstr "对申请å•æ出评论"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "CommentOnTicket"
-msgstr "评论申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Comments"
-msgstr "评论"
-
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
-msgid "Comments (Not sent to requestors)"
-msgstr "评论(ä¸é€ç»™ç”³è¯·äºº)"
-
-#: html/Search/Bulk.html:128
-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
-msgid "Comments about this user"
-msgstr "使用者æè¿°"
-
-#: lib/RT/Transaction_Overlay.pm:634
-msgid "Comments added"
-msgstr "新增评论完毕"
-
-#: NOT FOUND IN SOURCE
-msgid "Commit"
-msgstr "确认"
-
-#: lib/RT/Action/Generic.pm:175
-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 "设定查询æ¡ä»¶"
-
-#: html/Admin/Elements/EditScrip:59
-msgid "Condition"
-msgstr "æ¡ä»¶"
-
-#: lib/RT/Scrip_Overlay.pm:184
-msgid "Condition is mandatory argument"
-msgstr "æ¡ä»¶æ˜¯å¿…填字段"
-
-#: bin/rt-crontool:151
-msgid "Condition matches..."
-msgstr "符åˆæ¡ä»¶..."
-
-#: lib/RT/Scrip_Overlay.pm:188
-msgid "Condition not found"
-msgstr "未找到符åˆçš„现况"
-
-#: html/Elements/Tabs:84
-msgid "Configuration"
-msgstr "设定"
-
-#: html/SelfService/Prefs.html:54
-msgid "Confirm"
-msgstr "确认å£ä»¤"
-
-#: NOT FOUND IN SOURCE
-msgid "Confirm Password"
-msgstr "å£ä»¤ç¡®è®¤"
-
-#: NOT FOUND IN SOURCE
-msgid "Confirm Submit"
-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'"
-
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
-msgid "Content"
-msgstr "内容"
-
-#: html/Elements/SelectAttachmentField:49
-msgid "Content-Type"
-msgstr "内容类型"
-
-#: NOT FOUND IN SOURCE
-msgid "Coould not create group"
-msgstr "无法新增群组"
-
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
-msgstr "å¤åˆ¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Copy Field From:"
-msgstr "欲å¤åˆ¶å­—段:"
-
-#: etc/initialdata:286
-msgid "Correspondence"
-msgstr "回å¤"
-
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "申请å•å›žå¤åœ°å€"
-
-#: lib/RT/Transaction_Overlay.pm:630
-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 "
-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 "ä¸èƒ½æ›´æ”¹æ‰¿åŠžäººã€‚"
-
-#: html/Admin/CustomFields/Modify.html:161
-#. ($msg)
-msgid "Could not create CustomField"
-msgstr "无法新增自订字段"
-
-#: html/Admin/Elements/EditCustomField:113
-#. ($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 "无法建立通知模æ¿"
-
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
-msgid "Could not create group"
-msgstr "无法新增群组"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not create item"
-msgstr "无法新增项目"
-
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
-#. ($msg)
-msgid "Could not create template: %1"
-msgstr "无法新增模æ¿ï¼š%1"
-
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
-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 "无法新增使用者"
-
-#: 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:741 lib/RT/Ticket_Overlay.pm:1423
-msgid "Could not find or create that user"
-msgstr "找ä¸åˆ°æˆ–无法新增该å使用者"
-
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
-msgid "Could not find that principal"
-msgstr "找ä¸åˆ°è¯¥å•ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not find user %1."
-msgstr "找ä¸åˆ°ä½¿ç”¨è€… %1。"
-
-#: html/Admin/CustomFields/Objects.html:69
-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
-msgid "Could not load group"
-msgstr "无法加载群组"
-
-#: lib/RT/SavedSearch.pm:119
-#. ($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
-#. ($args{'Type'})
-msgid "Could not make that principal a %1 for this queue"
-msgstr "无法将该å•ä½è®¾ä¸ºæ­¤è¡¨å•çš„ %1。"
-
-#: lib/RT/Ticket_Overlay.pm:1444
-#. ($self->loc($args{'Type'}))
-msgid "Could not make that principal a %1 for this ticket"
-msgstr "无法将该å•ä½è®¾ä¸ºæ­¤ç”³è¯·å•çš„ %1。"
-
-#: lib/RT/Queue_Overlay.pm:860
-#. ($args{'Type'})
-msgid "Could not remove that principal as a %1 for this queue"
-msgstr "无法将å•ä½ %1 从表å•ç§»é™¤ã€‚"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not remove that principal as a %1 for this ticket"
-msgstr "无法将å•ä½ %1 从申请å•ç§»é™¤ã€‚"
-
-#: lib/RT/User_Overlay.pm:191
-msgid "Could not set user info"
-msgstr "无法设定使用者信æ¯"
-
-#: lib/RT/Transaction_Overlay.pm:159
-msgid "Couldn't add attachment"
-msgstr "无法新增附件"
-
-#: lib/RT/Group_Overlay.pm:1003
-msgid "Couldn't add member to group"
-msgstr "无法新增æˆå‘˜è‡³ç¾¤ç»„"
-
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
-#. ($Msg)
-msgid "Couldn't create a transaction: %1"
-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:953
-msgid "Couldn't find row"
-msgstr "找ä¸åˆ°æ­¤åˆ—æ•°æ®"
-
-#: lib/RT/Group_Overlay.pm:977
-msgid "Couldn't find that principal"
-msgstr "找ä¸åˆ°è¯¥å•ä½"
-
-#: lib/RT/CustomField_Overlay.pm:409
-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
-#. ($self->Id)
-msgid "Couldn't load %1 from the users database.\\n"
-msgstr "无法从使用者数æ®åº“加载 %1。\\n"
-
-#: html/Admin/CustomFields/UserRights.html:149
-#. ($id)
-msgid "Couldn't load Class %1"
-msgstr "无法加载类别 %1"
-
-#: html/Admin/CustomFields/GroupRights.html:107
-#. ($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:2016
-#. ($self->Id)
-msgid "Couldn't load copy of ticket #%1."
-msgstr "æ— æ³•åŠ è½½ç”³è¯·å• %1 çš„å¤æœ¬ã€‚"
-
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
-#. ($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
-msgid "Couldn't load link"
-msgstr "无法加载链接。"
-
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
-#. ($id)
-msgid "Couldn't load object %1"
-msgstr "无法加载对象 %1"
-
-#: html/Admin/Queues/People.html:142
-#. ($id)
-msgid "Couldn't load queue"
-msgstr "无法加载表å•"
-
-#: html/Admin/Queues/GroupRights.html:122 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 "无法加载手续"
-
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
-#. ($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)"
-
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
-#. ($id)
-msgid "Couldn't load ticket '%1'"
-msgstr "æ— æ³•åŠ è½½ç”³è¯·å• '%1'"
-
-#: lib/RT/Ticket_Overlay.pm:2643
-#. ($args{'URI'})
-msgid "Couldn't resolve '%1' into a URI."
-msgstr "无法将‘%1’解读为网å€"
-
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
-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
-msgid "Create"
-msgstr "新增"
-
-#: NOT FOUND IN SOURCE
-msgid "Create Subgroup:"
-msgstr "新增å­ç¾¤ç»„:"
-
-#: etc/initialdata:135
-msgid "Create Tickets"
-msgstr "新增申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Create User:"
-msgstr "新增æˆå‘˜ï¼š"
-
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
-msgid "Create a CustomField"
-msgstr "新增自订字段"
-
-#: html/Admin/Queues/CustomField.html:69
-#. ($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 "新增自订字段"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new global Scrip"
-msgstr "新增全域手续"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new global scrip"
-msgstr "新增全域手续"
-
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
-msgid "Create a new group"
-msgstr "新增群组"
-
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
-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 "新增模æ¿"
-
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
-msgid "Create a new ticket"
-msgstr "新增申请å•"
-
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
-msgid "Create a new user"
-msgstr "新增使用者"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new workflow"
-msgstr "新增æµç¨‹"
-
-#: html/Admin/Queues/Modify.html:125
-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
-#. ($QueueObj->Name)
-msgid "Create a scrip for queue %1"
-msgstr "为 %1 表å•æ–°å¢žæ‰‹ç»­"
-
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
-msgid "Create a template"
-msgstr "新增模æ¿"
-
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
-msgid "Create a ticket"
-msgstr "æ出申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a workflow"
-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:137
-msgid "Create new tickets based on this scrip's template"
-msgstr "ä¾æ®æ­¤é¡¹æ‰‹ç»­å†…的模版,新增申请å•"
-
-#: html/SelfService/Create.html:105
-msgid "Create ticket"
-msgstr "新增申请å•"
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "Create tickets in this queue"
-msgstr "在此表å•ä¸­æ–°å¢žç”³è¯·å•"
-
-#: lib/RT/CustomField_Overlay.pm:106
-msgid "Create, delete and modify custom fields"
-msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è‡ªè®¢å­—段"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "Create, delete and modify queues"
-msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è¡¨å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Create, delete and modify the members of any user's personal groups"
-msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä»»ä½•ä½¿ç”¨è€…的代ç†äººç¾¤ç»„"
-
-#: lib/RT/System.pm:80
-msgid "Create, delete and modify the members of personal groups"
-msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä»£ç†äººç¾¤ç»„"
-
-#: lib/RT/System.pm:81
-msgid "Create, delete and modify users"
-msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä½¿ç”¨è€…"
-
-#: lib/RT/System.pm:87
-msgid "CreateSavedSearch"
-msgstr "新增预存查询"
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "CreateTicket"
-msgstr "新增申请å•"
-
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
-msgid "Created"
-msgstr "新增日"
-
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
-#. ($CustomFieldObj->Name())
-msgid "Created CustomField %1"
-msgstr "自订字段 %1 新增æˆåŠŸ"
-
-#: html/Tools/Reports/Elements/Tabs:63
-msgid "Created in a date range"
-msgstr "在指定日期内建立"
-
-#: NOT FOUND IN SOURCE
-msgid "Created template %1"
-msgstr "æ¨¡æ¿ %1 新增æˆåŠŸ"
-
-#: html/Tools/Reports/CreatedByDates.html:52
-msgid "Created tickets in period, grouped by status"
-msgstr "在指定日期内建立的申请å•ï¼Œä¾çŠ¶æ€åˆ†ç»„"
-
-#: NOT FOUND IN SOURCE
-msgid "Created workflow %1"
-msgstr "æµç¨‹ %1 新增æˆåŠŸ"
-
-#: html/Search/Elements/PickBasics:102
-msgid "Creator"
-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 "现有群组列表:"
-
-#: html/Elements/EditLinks:49
-msgid "Current Links"
-msgstr "现有关系"
-
-#: NOT FOUND IN SOURCE
-msgid "Current Rights:"
-msgstr "现有æƒé™ï¼š"
-
-#: html/Admin/Elements/EditScrips:51
-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 "现有视察员"
-
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
-msgid "Current members"
-msgstr "现有æˆå‘˜"
-
-#: html/Admin/Elements/SelectRights:51
-msgid "Current rights"
-msgstr "现有æƒé™"
-
-#: html/Search/Elements/EditQuery:47
-msgid "Current search"
-msgstr "现有查询æ¡ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Current search criteria"
-msgstr "现有查询æ¡ä»¶"
-
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
-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
-msgid "Custom Fields"
-msgstr "自订字段"
-
-#: html/Admin/CustomFields/index.html:60
-#. ($lookup)
-msgid "Custom Fields for %1"
-msgstr "%1 的自订字段"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom Fields which apply to all queues"
-msgstr "适用于所有表å•çš„自订字段"
-
-#: html/Admin/Elements/EditScrip:107
-msgid "Custom action cleanup code"
-msgstr "动作åŽæ‰§è¡Œç¨‹åº"
-
-#: html/Admin/Elements/EditScrip:103
-msgid "Custom action preparation code"
-msgstr "动作å‰æ‰§è¡Œç¨‹åº"
-
-#: html/Admin/Elements/EditScrip:99
-msgid "Custom condition"
-msgstr "自订æ¡ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field %1 %2 %3"
-msgstr "自订字段 %1 %2 %3"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field %1 does not apply to this object"
-msgstr "自订字段 %1 ä¸é€‚用于此对象"
-
-#: lib/RT/Tickets_Overlay.pm:2424
-#. ($CF->Name)
-msgid "Custom field %1 has a value."
-msgstr "自订字段 %1 已有值"
-
-#: lib/RT/Tickets_Overlay.pm:2420
-#. ($CF->Name)
-msgid "Custom field %1 has no value."
-msgstr "自订字段 %1 没有值"
-
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
-#. ($args{'Field'})
-msgid "Custom field %1 not found"
-msgstr "找ä¸åˆ°è‡ªè®¢å­—段 %1"
-
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
-#. ($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
-#. ($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:419
-msgid "Custom field value could not be deleted"
-msgstr "无法删除自订字段值"
-
-#: lib/RT/CustomField_Overlay.pm:1169
-msgid "Custom field value could not be found"
-msgstr "找ä¸åˆ°è‡ªè®¢å­—段值"
-
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
-msgid "Custom field value deleted"
-msgstr "自订字段值删除æˆåŠŸ"
-
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
-msgid "CustomField"
-msgstr "自订字段"
-
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
-msgid "Customize"
-msgstr "自订"
-
-#: NOT FOUND IN SOURCE
-msgid "Data error"
-msgstr "æ•°æ®é”™è¯¯"
-
-#: NOT FOUND IN SOURCE
-msgid "DatabaseBindRemote"
-msgstr "容许外部è”机"
-
-#: NOT FOUND IN SOURCE
-msgid "DatabaseName"
-msgstr "MySQLæ•°æ®åº“"
-
-#: NOT FOUND IN SOURCE
-msgid "Date of Departure"
-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
-msgid "Dates"
-msgstr "日期"
-
-#: NOT FOUND IN SOURCE
-msgid "Dec"
-msgstr "å二月"
-
-#: lib/RT/Date.pm:452
-msgid "Dec."
-msgstr "12"
-
-#: NOT FOUND IN SOURCE
-msgid "December"
-msgstr "å二月"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Approval"
-msgstr "预设签核"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Autoresponse Template"
-msgstr "预设自动å“应模æ¿"
-
-#: etc/initialdata:222
-msgid "Default Autoresponse template"
-msgstr "预设自动å“应模æ¿"
-
-#: html/Tools/Offline.html:61
-msgid "Default Queue"
-msgstr "预设表å•"
-
-#: html/Tools/Offline.html:70
-msgid "Default Requestor"
-msgstr "预设申请人"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Value"
-msgstr "预设值"
-
-#: etc/initialdata:296
-msgid "Default admin comment template"
-msgstr "预设管ç†å‘˜è¯„论模æ¿"
-
-#: etc/initialdata:275
-msgid "Default admin correspondence template"
-msgstr "预设管ç†å‘˜å›žå¤æ¨¡æ¿"
-
-#: etc/initialdata:287
-msgid "Default correspondence template"
-msgstr "预设回å¤æ¨¡æ¿"
-
-#: etc/initialdata:253
-msgid "Default transaction template"
-msgstr "预设更动模æ¿"
-
-#: NOT FOUND IN SOURCE
-msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "预设:%1/%2 已自 %3 改为 %4"
-
-#: NOT FOUND IN SOURCE
-msgid "DefaultApproval"
-msgstr "预设签核"
-
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
-msgid "Delegate rights"
-msgstr "代ç†äººæƒé™"
-
-#: lib/RT/System.pm:84
-msgid "Delegate specific rights which have been granted to you."
-msgstr "将拥有的æƒé™å§”托他人代ç†"
-
-#: lib/RT/System.pm:84
-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 "代ç†çŠ¶æ€"
-
-#: html/User/Elements/Tabs:59
-msgid "Delegation"
-msgstr "代ç†äººæƒé™"
-
-#: NOT FOUND IN SOURCE
-msgid "Delegation Groups"
-msgstr "代ç†äººç¾¤ç»„"
-
-#: NOT FOUND IN SOURCE
-msgid "Delegation Rights"
-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
-msgid "Delete"
-msgstr "删除"
-
-#: html/Admin/Elements/EditTemplates:79
-msgid "Delete Template"
-msgstr "删除模æ¿"
-
-#: lib/RT/SavedSearch.pm:220
-#. ($msg)
-msgid "Delete failed: %1"
-msgstr "删除失败:%1"
-
-#: html/Admin/Elements/EditScrips:74
-msgid "Delete selected scrips"
-msgstr "删除指定的手续"
-
-#: lib/RT/Queue_Overlay.pm:114
-msgid "Delete tickets"
-msgstr "删除申请å•"
-
-#: html/Search/Bulk.html:159
-msgid "Delete values"
-msgstr "删除值"
-
-#: lib/RT/Queue_Overlay.pm:114
-msgid "DeleteTicket"
-msgstr "删除申请å•"
-
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
-msgstr "已删除的æœå¯»"
-
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object could break referential integrity"
-msgstr "删除此对象å¯èƒ½ç ´åå‚考完整性"
-
-#: lib/RT/Queue_Overlay.pm:394
-msgid "Deleting this object would break referential integrity"
-msgstr "删除此对象å¯èƒ½ç ´åå‚考完整性"
-
-#: lib/RT/User_Overlay.pm:512
-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
-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 "差旅截止日"
-
-#: 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
-msgid "Depended on by"
-msgstr "å¯æŽ¥ç»­å¤„ç†çš„申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Dependencies: \\n"
-msgstr "附属性:\\n"
-
-#: lib/RT/Transaction_Overlay.pm:718
-#. ($value)
-msgid "Dependency by %1 added"
-msgstr "已加入å¯æŽ¥ç»­å¤„ç†çš„ç”³è¯·å• %1"
-
-#: lib/RT/Transaction_Overlay.pm:758
-#. ($value)
-msgid "Dependency by %1 deleted"
-msgstr "已移除å¯æŽ¥ç»­å¤„ç†çš„ç”³è¯·å• %1"
-
-#: lib/RT/Transaction_Overlay.pm:715
-#. ($value)
-msgid "Dependency on %1 added"
-msgstr "已加入需先处ç†çš„ç”³è¯·å• %1"
-
-#: lib/RT/Transaction_Overlay.pm:755
-#. ($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
-msgid "Depends on"
-msgstr "需先处ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "DependsOn"
-msgstr "需先处ç†"
-
-#: html/Search/Elements/DisplayOptions:86
-msgid "Desc"
-msgstr "递å‡"
-
-#: html/Elements/SelectSortOrder:56
-msgid "Descending"
-msgstr "递å‡"
-
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
-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
-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 "直接"
-
-#: NOT FOUND IN SOURCE
-msgid "Disability"
-msgstr "残障身分"
-
-#: NOT FOUND IN SOURCE
-msgid "Disability Type"
-msgstr "残障类别"
-
-#: NOT FOUND IN SOURCE
-msgid "Disabled"
-msgstr "åœç”¨"
-
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
-msgid "Display"
-msgstr "显示内容"
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "Display Access Control List"
-msgstr "显示æƒé™æŽ§åˆ¶æ¸…å•"
-
-#: html/Search/Elements/DisplayOptions:46
-msgid "Display Columns"
-msgstr "显示字段"
-
-#: lib/RT/Queue_Overlay.pm:99
-msgid "Display Scrip templates for this queue"
-msgstr "显示此表å•çš„模æ¿"
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "Display Scrips for this queue"
-msgstr "显示此表å•çš„手续"
-
-#: html/Ticket/Elements/ShowHistory:59
-msgid "Display mode"
-msgstr "显示模å¼"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "Display saved searches for this group"
-msgstr "显示此群组的预存查询"
-
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "显示第%1å·ç”³è¯·å•"
-
-#: html/Elements/Footer:61
-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:75
-msgid "Do anything and everything"
-msgstr "å…许一切æ“作"
-
-#: html/Elements/Refresh:51
-msgid "Don't refresh this page."
-msgstr "ä¸æ›´æ–°æ­¤é¡µé¢ã€‚"
-
-#: NOT FOUND IN SOURCE
-msgid "Don't show search results"
-msgstr "ä¸æ˜¾ç¤ºæŸ¥è¯¢ç»“æžœ"
-
-#: NOT FOUND IN SOURCE
-msgid "Done"
-msgstr "完æˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "Down"
-msgstr "下一页"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "Download"
-msgstr "下载"
-
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
-msgid "Download as a tab-delimited file"
-msgstr "下载以 Tab 分隔的档案"
-
-#: NOT FOUND IN SOURCE
-msgid "Dr."
-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
-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'"
-
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "æ— æ³•åŠ è½½ç”³è¯·å• '%1':%2.\\n"
-
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
-msgid "Edit"
-msgstr "编辑"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Conditions"
-msgstr "编辑å‰ç½®æ¡ä»¶"
-
-#: html/Search/Bulk.html:149
-msgid "Edit Custom Fields"
-msgstr "编辑自订字段"
-
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
-#. ($Object->Name)
-msgid "Edit Custom Fields for %1"
-msgstr "编辑 %1 的自订字段"
-
-#: html/Admin/Global/CustomFields/Groups.html:54
-msgid "Edit Custom Fields for all groups"
-msgstr "编辑适用于所有群组的自订字段"
-
-#: html/Admin/Global/CustomFields/Users.html:54
-msgid "Edit Custom Fields for all users"
-msgstr "编辑适用于所有使用者的自订字段"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Custom Fields for queue %1"
-msgstr "ç¼–è¾‘è¡¨å• %1 的自订字段"
-
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
-msgid "Edit Custom Fields for tickets in all queues"
-msgstr "编辑适用于所有表å•å†…申请å•çš„自订字段"
-
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
-msgid "Edit Links"
-msgstr "编辑申请å•å…³ç³»"
-
-#: html/Search/Edit.html:68
-msgid "Edit Query"
-msgstr "编辑查询"
-
-#: html/Ticket/Elements/Tabs:214
-msgid "Edit Search"
-msgstr "编辑查询"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Subgroups"
-msgstr "新增/维护å­ç¾¤ç»„"
-
-#: html/Admin/Queues/Templates.html:63
-#. ($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:167
-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
-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:167
-msgid "EditSavedSearches"
-msgstr "编辑预存查询"
-
-#: html/Admin/Queues/Modify.html:140
-#. ($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
-#. ($CustomFieldObj->Name())
-msgid "Editing CustomField %1"
-msgstr "编辑自订字段 %1"
-
-#: html/Admin/Groups/Members.html:53
-#. ($Group->Name)
-msgid "Editing membership for group %1"
-msgstr "编辑群组 %1 çš„æˆå‘˜ä¿¡æ¯"
-
-#: html/User/Groups/Members.html:150
-#. ($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 "最高学历"
-
-#: NOT FOUND IN SOURCE
-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
-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
-msgid "Email"
-msgstr "电å­é‚®ä»¶ä¿¡ç®±"
-
-#: NOT FOUND IN SOURCE
-msgid "Email Address"
-msgstr "电å­é‚®ä»¶ä¿¡ç®±"
-
-#: lib/RT/User_Overlay.pm:235
-msgid "Email address in use"
-msgstr "此电å­é‚®ä»¶ä¿¡ç®±å·²è¢«ä½¿ç”¨"
-
-#: NOT FOUND IN SOURCE
-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 "代ç†æ¿€æ´»"
-
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
-msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "å¯ç”¨(å–消勾选将åœç”¨æ­¤è‡ªè®¢å­—段)"
-
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
-msgid "Enabled (Unchecking this box disables this group)"
-msgstr "å¯ç”¨(å–消勾选将åœç”¨æ­¤ç¾¤ç»„)"
-
-#: html/Admin/Queues/Modify.html:105
-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 "激活日期:"
-
-#: html/Admin/Queues/index.html:78
-msgid "Enabled Queues"
-msgstr "å·²å¯ç”¨çš„表å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Enabled Status"
-msgstr "å¯ç”¨çŠ¶æ€"
-
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
-#. (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"
-
-#: NOT FOUND IN SOURCE
-msgid "End of Trial"
-msgstr "试用期满日"
-
-#: NOT FOUND IN SOURCE
-msgid "English Name"
-msgstr "英文姓å"
-
-#: lib/RT/CustomField_Overlay.pm:64
-msgid "Enter multiple values"
-msgstr "键入多é‡é¡¹ç›®"
-
-#: html/Elements/EditLinks:126
-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:65
-msgid "Enter one value"
-msgstr "键入å•ä¸€é¡¹ç›®"
-
-#: html/Elements/EditLinks:123
-msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
-msgstr "键入欲将表å•è¿žç»“至的对象或 URI。项目之间请以空白隔开。"
-
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
-msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr "键入申请å•å¯é“¾æŽ¥åˆ°çš„申请å•ç¼–å·æˆ–网å€ã€‚项目之间请以空白隔开。"
-
-#: lib/RT/CustomField_Overlay.pm:66
-msgid "Enter up to %1 values"
-msgstr "键入最多 %1 个项目"
-
-#: 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 "时间填表"
-
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
-msgid "Error"
-msgstr "错误"
-
-#: NOT FOUND IN SOURCE
-msgid "Error adding watcher"
-msgstr "新增视察员失败"
-
-#: lib/RT/Queue_Overlay.pm:672
-msgid "Error in parameters to Queue->AddWatcher"
-msgstr "表å•->新增视察员的å‚数有误"
-
-#: lib/RT/Queue_Overlay.pm:833
-msgid "Error in parameters to Queue->DeleteWatcher"
-msgstr "表å•->删除视察员的å‚数有误"
-
-#: lib/RT/Ticket_Overlay.pm:1372
-msgid "Error in parameters to Ticket->AddWatcher"
-msgstr "申请å•->新增视察员的å‚数有误"
-
-#: lib/RT/Ticket_Overlay.pm:1538
-msgid "Error in parameters to Ticket->DeleteWatcher"
-msgstr "申请å•->删除视察员的å‚数有误"
-
-#: bin/rt-crontool:285
-msgid "Escalate tickets"
-msgstr "调整申请å•ä¼˜å…ˆç­‰çº§"
-
-#: NOT FOUND IN SOURCE
-msgid "Estimate"
-msgstr "预计"
-
-#: html/Ticket/Elements/ShowBasics:57
-msgid "Estimated"
-msgstr "预计"
-
-#: etc/initialdata:20
-msgid "Everyone"
-msgstr "所有人"
-
-#: bin/rt-crontool:271
-msgid "Example:"
-msgstr "范例:"
-
-#: NOT FOUND IN SOURCE
-msgid "Existing user renamed from %1 to %2"
-msgstr "现有使用者 %1 已改å为 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Export"
-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 "外部接å£ç½‘å€"
-
-#: html/Admin/Users/Modify.html:99
-msgid "Extra info"
-msgstr "备注"
-
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
-msgstr "查询属性建立失败"
-
-#: lib/RT/User_Overlay.pm:376
-msgid "Failed to find 'Privileged' users pseudogroup."
-msgstr "找ä¸åˆ°â€˜å†…部æˆå‘˜â€™è™šæ‹Ÿç¾¤ç»„的使用者。"
-
-#: lib/RT/User_Overlay.pm:383
-msgid "Failed to find 'Unprivileged' users pseudogroup"
-msgstr "找ä¸åˆ°â€˜éžå†…部æˆå‘˜â€™è™šæ‹Ÿç¾¤ç»„的使用者。"
-
-#: bin/rt-crontool:206
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr "æ— æ³•åŠ è½½æ¨¡å— %1。(%2)"
-
-#: lib/RT/SavedSearch.pm:152
-#. ($privacy)
-msgid "Failed to load object for %1"
-msgstr "无法为 %1 加载对象。"
-
-#: NOT FOUND IN SOURCE
-msgid "Feb"
-msgstr "二月"
-
-#: lib/RT/Date.pm:442
-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 "字段类别"
-
-#: html/Elements/SelectAttachmentField:50
-msgid "Filename"
-msgstr "æ¡£å"
-
-#: lib/RT/CustomField_Overlay.pm:69
-msgid "Fill in multiple text areas"
-msgstr "填入多个文字框"
-
-#: lib/RT/CustomField_Overlay.pm:74
-msgid "Fill in multiple wikitext areas"
-msgstr "填入多个 Wiki 文字框"
-
-#: lib/RT/CustomField_Overlay.pm:70
-msgid "Fill in one text area"
-msgstr "填入一个文字框"
-
-#: lib/RT/CustomField_Overlay.pm:75
-msgid "Fill in one wikitext area"
-msgstr "填入一个 Wiki 文字框"
-
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
-msgid "Fill in this field with a URL."
-msgstr "填入一个网å€"
-
-#: lib/RT/CustomField_Overlay.pm:71
-msgid "Fill in up to %1 text areas"
-msgstr "填入最多 %1 个文字框"
-
-#: lib/RT/CustomField_Overlay.pm:76
-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 "最终"
-
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
-msgid "Final Priority"
-msgstr "最终顺ä½"
-
-#: lib/RT/Ticket_Overlay.pm:1164
-msgid "FinalPriority"
-msgstr "最终顺ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Financial Department:"
-msgstr "财务部:"
-
-#: NOT FOUND IN SOURCE
-msgid "Find group whose"
-msgstr "寻找群组的"
-
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
-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
-msgid "Find people whose"
-msgstr "寻找人员的"
-
-#: NOT FOUND IN SOURCE
-msgid "Find queues whose"
-msgstr "寻找表å•çš„"
-
-#: html/Search/Results.html:147
-msgid "Find tickets"
-msgstr "寻找申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Finish Approval"
-msgstr "签核完毕"
-
-#: 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 "固定ç­"
-
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
-msgid "Foo Bar Baz"
-msgstr "甲 乙 丙"
-
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
-msgid "Foo!"
-msgstr "甲ï¼"
-
-#: html/Search/Bulk.html:83
-msgid "Force change"
-msgstr "强制更æ¢"
-
-#: NOT FOUND IN SOURCE
-msgid "Form Processing"
-msgstr "电å­è¡¨å•ä½œä¸šåŒº"
-
-#: html/Search/Elements/EditFormat:52
-msgid "Format"
-msgstr "æ ¼å¼"
-
-#: html/Search/Results.html:145
-#. ($ticketcount)
-msgid "Found %quant(%1,ticket)"
-msgstr "找到 %1 张申请å•"
-
-#: lib/RT/Record.pm:956
-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 "时间输入"
-
-#: NOT FOUND IN SOURCE
-msgid "Fri"
-msgstr "星期五"
-
-#: lib/RT/Date.pm:421
-msgid "Fri."
-msgstr "星期五"
-
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
-msgid "Full headers"
-msgstr "完整标头档"
-
-#: NOT FOUND IN SOURCE
-msgid "Gecos"
-msgstr "登入å¸å·"
-
-#: NOT FOUND IN SOURCE
-msgid "Gender"
-msgstr "性别"
-
-#: html/Tools/Offline.html:85
-msgid "Get template from file"
-msgstr "å–出档案里的模æ¿"
-
-#: NOT FOUND IN SOURCE
-msgid "Getting the current user from a pgp sig\\n"
-msgstr "å–å¾—ç›®å‰ä½¿ç”¨è€…çš„ pgp 签章\\n"
-
-#: lib/RT/Transaction_Overlay.pm:684
-#. ($New->Name)
-msgid "Given to %1"
-msgstr "交予 %1"
-
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
-msgid "Global"
-msgstr "全域设定"
-
-#: NOT FOUND IN SOURCE
-msgid "Global Approval"
-msgstr "全域签核"
-
-#: html/Admin/Elements/EditCustomFields:55
-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 "全域设定"
-
-#: html/Admin/Global/CustomFields/index.html:59
-msgid "Global custom field configuration"
-msgstr "全域自订字段设定"
-
-#: html/Admin/Global/MyRT.html:48
-#. ($pane)
-msgid "Global portlet %1 saved."
-msgstr "æˆåŠŸå‚¨å­˜å…¨åŸŸå…¥å£ç»„件 %1。"
-
-#: html/Admin/Elements/SelectTemplate:59
-#. (loc($Template->Name))
-msgid "Global template: %1"
-msgstr "全域模æ¿ï¼š%1"
-
-#: NOT FOUND IN SOURCE
-msgid "GlobalApproval"
-msgstr "全域签核"
-
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
-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
-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 "到页é¢"
-
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
-msgid "Goto ticket"
-msgstr "跳到申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Grand"
-msgstr "上"
-
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
-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 "群组å称:"
-
-#: 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
-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:983
-msgid "Group already has member"
-msgstr "群组内已有此æˆå‘˜"
-
-#: NOT FOUND IN SOURCE
-msgid "Group could not be created."
-msgstr "无法新增群组"
-
-#: html/Admin/Groups/Modify.html:109
-#. ($create_msg)
-msgid "Group could not be created: %1"
-msgstr "无法新增群组:%1"
-
-#: lib/RT/Group_Overlay.pm:521
-msgid "Group created"
-msgstr "群组新增完毕"
-
-#: NOT FOUND IN SOURCE
-msgid "Group created: %1"
-msgstr "群组 %1 新增完毕"
-
-#: lib/RT/Group_Overlay.pm:1155
-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
-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"
-
-#: 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 "群组:"
-
-#: 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
-msgid "Groups"
-msgstr "群组"
-
-#: lib/RT/Group_Overlay.pm:989
-msgid "Groups can't be members of their members"
-msgstr "ä¸èƒ½å°†ç¾¤ç»„设为群组内æˆå‘˜"
-
-#: html/Admin/Groups/index.html:86
-msgid "Groups matching search criteria"
-msgstr "符åˆæŸ¥è¯¢æ¡ä»¶çš„群组"
-
-#: html/Ticket/Elements/ShowRequestor:77
-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 属性"
-
-#: NOT FOUND IN SOURCE
-msgid "Health Insurance"
-msgstr "å¥ä¿è¡¥åŠ©èº«ä»½"
-
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
-msgid "Hello!"
-msgstr "å—¨ï¼"
-
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
-#. ($name)
-msgid "Hello, %1"
-msgstr "嗨,%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Help"
-msgstr "说明"
-
-#: NOT FOUND IN SOURCE
-msgid "Help Desks"
-msgstr "å„项业务窗å£"
-
-#: NOT FOUND IN SOURCE
-msgid "Hidden"
-msgstr "éšè—"
-
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
-msgid "History"
-msgstr "纪录"
-
-#: html/Admin/Groups/History.html:62
-#. ($GroupObj->Name)
-msgid "History of the group %1"
-msgstr "群组 %1 的纪录"
-
-#: html/Admin/Users/History.html:62
-#. ($UserObj->Name)
-msgid "History of the user %1"
-msgstr "使用者 %1 的纪录"
-
-#: NOT FOUND IN SOURCE
-msgid "HomePhone"
-msgstr "ä½å¤„电è¯"
-
-#: html/Elements/Tabs:65
-msgid "Homepage"
-msgstr "主页"
-
-#: NOT FOUND IN SOURCE
-msgid "Hotel Expense"
-msgstr "ä½å®¿è´¹"
-
-#: html/Elements/SelectTimeUnits:48
-msgid "Hours"
-msgstr "å°æ—¶"
-
-#: lib/RT/Base.pm:119
-#. (6)
-msgid "I have %quant(%1,concrete mixer)."
-msgstr "我有 %quant(%1,份固体æ…拌器)。"
-
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
-msgstr "我æ˜äº†"
-
-#: NOT FOUND IN SOURCE
-msgid "ID Number"
-msgstr "身分è¯å·"
-
-#: NOT FOUND IN SOURCE
-msgid "ID Type"
-msgstr "身分类别"
-
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
-msgid "Id"
-msgstr "ç¼–å·"
-
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
-msgid "Identity"
-msgstr "身份"
-
-#: etc/initialdata:429
-msgid "If an approval is rejected, reject the original and delete pending approvals"
-msgstr "若签核å•é­åˆ°é©³å›žï¼Œåˆ™è¿žå¸¦é©³å›žåŽŸç”³è¯·å•ï¼Œå¹¶åˆ é™¤å…¶å®ƒç›¸å…³çš„待签核事项"
-
-#: html/Tools/Offline.html:74
-msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr "若没有指定申请者,则以此使用者作为申请者"
-
-#: html/Tools/Offline.html:65
-msgid "If no queue is specified, create tickets in this queue."
-msgstr "申请å•è‹¥æ²¡æœ‰æŒ‡å®šè¡¨å•ï¼Œåˆ™å°†å®ƒæ–°å¢žåœ¨æ­¤è¡¨å•å†…"
-
-#: bin/rt-crontool:267
-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
-msgid "If you've updated anything above, be sure to"
-msgstr "若您已更新以上数æ®ï¼Œè¯·è®°å¾—按一下"
-
-#: lib/RT/Record.pm:947
-msgid "Illegal value for %1"
-msgstr "%1 的值错误"
-
-#: NOT FOUND IN SOURCE
-msgid "Image"
-msgstr "图片"
-
-#: lib/RT/Record.pm:950
-msgid "Immutable field"
-msgstr "此字段值ä¸å¯æ›´åŠ¨"
-
-#: NOT FOUND IN SOURCE
-msgid "Import"
-msgstr "汇入"
-
-#: NOT FOUND IN SOURCE
-msgid "Include disabled custom fields in listing."
-msgstr "列出åœç”¨çš„自订字段"
-
-#: html/Admin/Groups/index.html:65
-msgid "Include disabled groups in listing."
-msgstr "列出åœç”¨çš„群组"
-
-#: html/Admin/Queues/index.html:65
-msgid "Include disabled queues in listing."
-msgstr "列出åœç”¨çš„表å•"
-
-#: html/Admin/Users/index.html:71
-msgid "Include disabled users in search."
-msgstr "列出åœç”¨çš„使用者"
-
-#: html/Admin/CustomFields/Modify.html:113
-msgid "Include page"
-msgstr "引入页é¢"
-
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
-msgstr "ä¸å®Œæ•´çš„查询"
-
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
-msgstr "ä¸å®Œæ•´çš„查询"
-
-#: NOT FOUND IN SOURCE
-msgid "Indirect Employee"
-msgstr "直接/间接员工"
-
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
-msgid "Initial Priority"
-msgstr "åˆå§‹ä¼˜å…ˆé¡ºä½"
-
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
-msgid "InitialPriority"
-msgstr "åˆå§‹ä¼˜å…ˆé¡ºä½"
-
-#: lib/RT/ScripAction_Overlay.pm:133
-msgid "Input error"
-msgstr "输入错误"
-
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
-#. ($self->FriendlyPattern)
-#. ($CF->FriendlyPattern)
-msgid "Input must match %1"
-msgstr "è¾“å…¥å¿…é¡»ç¬¦åˆ %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Interest noted"
-msgstr "登记æˆåŠŸ"
-
-#: lib/RT/Ticket_Overlay.pm:3503
-msgid "Internal Error"
-msgstr "内部错误"
-
-#: lib/RT/Record.pm:308
-#. ($id->{error_message})
-msgid "Internal Error: %1"
-msgstr "内部错误:%1"
-
-#: lib/RT/Group_Overlay.pm:668
-msgid "Invalid Group Type"
-msgstr "错误的群组类别"
-
-#: lib/RT/Principal_Overlay.pm:161
-msgid "Invalid Right"
-msgstr "错误的æƒé™"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid Type"
-msgstr "错误的类型"
-
-#: lib/RT/Record.pm:952
-msgid "Invalid data"
-msgstr "错误的数æ®"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "错误的承办人。改为预设承办人‘nobody’。"
-
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
-#. ($msg)
-msgid "Invalid pattern: %1"
-msgstr "ä¸åˆç†çš„æ ·å¼ï¼š%1"
-
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
-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
-msgid "Invalid right"
-msgstr "错误的æƒé™"
-
-#: lib/RT/Record.pm:283
-#. ($key)
-msgid "Invalid value for %1"
-msgstr "%1 的值错误"
-
-#: lib/RT/Record.pm:1610
-msgid "Invalid value for custom field"
-msgstr "错误的自订字段值"
-
-#: lib/RT/Ticket_Overlay.pm:424
-msgid "Invalid value for status"
-msgstr "错误的状æ€å€¼"
-
-#: NOT FOUND IN SOURCE
-msgid "IssueStatement"
-msgstr "é€å‡ºé™ˆè¿°"
-
-#: bin/rt-crontool:268
-msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
-msgstr "请ç»å¯¹ä¸è¦è®©æœªå…·æƒé™çš„使用者执行此工具程åºã€‚"
-
-#: bin/rt-crontool:269
-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
-msgid "It takes several arguments:"
-msgstr "它接å—下列å‚数:"
-
-#: html/Search/Elements/EditFormat:85
-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 "待签核项目"
-
-#: NOT FOUND IN SOURCE
-msgid "Jan"
-msgstr "一月"
-
-#: lib/RT/Date.pm:441
-msgid "Jan."
-msgstr "01"
-
-#: NOT FOUND IN SOURCE
-msgid "January"
-msgstr "一月"
-
-#: NOT FOUND IN SOURCE
-msgid "Job"
-msgstr "èŒç§°"
-
-#: lib/RT/Group_Overlay.pm:166
-msgid "Join or leave this group"
-msgstr "加入或离开此群组"
-
-#: NOT FOUND IN SOURCE
-msgid "Jul"
-msgstr "七月"
-
-#: lib/RT/Date.pm:447
-msgid "Jul."
-msgstr "07"
-
-#: NOT FOUND IN SOURCE
-msgid "July"
-msgstr "七月"
-
-#: html/Ticket/Elements/Tabs:125
-msgid "Jumbo"
-msgstr "全部信æ¯"
-
-#: NOT FOUND IN SOURCE
-msgid "Jun"
-msgstr "六月"
-
-#: lib/RT/Date.pm:446
-msgid "Jun."
-msgstr "06"
-
-#: NOT FOUND IN SOURCE
-msgid "June"
-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 "使用语言"
-
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
-msgid "Language"
-msgstr "语言"
-
-#: html/Search/Elements/EditFormat:79
-msgid "Large"
-msgstr "大"
-
-#: html/Ticket/Elements/Tabs:96
-msgid "Last"
-msgstr "上次更新"
-
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
-msgid "Last Contact"
-msgstr "上次è”络"
-
-#: html/Elements/SelectDateType:50
-msgid "Last Contacted"
-msgstr "上次è”络日期"
-
-#: NOT FOUND IN SOURCE
-msgid "Last Notified"
-msgstr "上次通知"
-
-#: html/Elements/SelectDateType:51
-msgid "Last Updated"
-msgstr "上次更新"
-
-#: NOT FOUND IN SOURCE
-msgid "LastUpdated"
-msgstr "上次更新"
-
-#: html/Search/Elements/PickBasics:103
-msgid "LastUpdatedBy"
-msgstr "上次更新者"
-
-#: html/Ticket/Elements/ShowBasics:68
-msgid "Left"
-msgstr "剩馀时间"
-
-#: html/Admin/Users/Modify.html:109
-msgid "Let this user access RT"
-msgstr "å…许这å使用者登入"
-
-#: html/Admin/Users/Modify.html:113
-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"
-
-#: html/Search/Elements/EditFormat:68
-msgid "Link"
-msgstr "链接"
-
-#: NOT FOUND IN SOURCE
-msgid "Link a Queue"
-msgstr "申请表å•è¿žç»“"
-
-#: lib/RT/Record.pm:1306
-msgid "Link already exists"
-msgstr "此链接已存在"
-
-#: lib/RT/Record.pm:1320
-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
-msgid "Link not found"
-msgstr "找ä¸åˆ°é“¾æŽ¥"
-
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
-#. ($Ticket->Id)
-msgid "Link ticket #%1"
-msgstr "é“¾æŽ¥ç”³è¯·å• #%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Link ticket %1"
-msgstr "é“¾æŽ¥ç”³è¯·å• %1"
-
-#: html/Admin/CustomFields/Modify.html:102
-msgid "Link values to"
-msgstr "将值连结至"
-
-#: lib/RT/Ticket_Overlay.pm:700
-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
-msgid "Links"
-msgstr "链接"
-
-#: NOT FOUND IN SOURCE
-msgid "List All Users"
-msgstr "列出所有用户数æ®"
-
-#: html/Search/Elements/EditSearches:75
-msgid "Load"
-msgstr "加载"
-
-#: html/Search/Elements/EditSearches:73
-msgid "Load saved search:"
-msgstr "加载预存查询:"
-
-#: lib/RT/System.pm:86
-msgid "LoadSavedSearch"
-msgstr "加载预存查询"
-
-#: html/Admin/Tools/Configuration.html:64
-msgid "Loaded perl modules"
-msgstr "已加载的 Perl 模å—"
-
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr "已加载查询 %1"
-
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
-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 "纪录档å"
-
-#: html/Elements/Header:91
-#. ("<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
-msgid "Login"
-msgstr "登入"
-
-#: html/Elements/Header:101
-msgid "Logout"
-msgstr "注销"
-
-#: NOT FOUND IN SOURCE
-msgid "Long-term contractor"
-msgstr "长期契约员工"
-
-#: lib/RT/CustomField_Overlay.pm:932
-msgid "Lookup type mismatch"
-msgstr "对应的类别ä¸ç¬¦"
-
-#: html/Search/Bulk.html:82
-msgid "Make Owner"
-msgstr "新增承办人"
-
-#: html/Search/Bulk.html:106
-msgid "Make Status"
-msgstr "新增现况"
-
-#: html/Search/Bulk.html:114
-msgid "Make date Due"
-msgstr "新增到期日"
-
-#: html/Search/Bulk.html:116
-msgid "Make date Resolved"
-msgstr "新增解决日期"
-
-#: html/Search/Bulk.html:110
-msgid "Make date Started"
-msgstr "新增实际起始日期"
-
-#: html/Search/Bulk.html:108
-msgid "Make date Starts"
-msgstr "新增应起始日期"
-
-#: html/Search/Bulk.html:112
-msgid "Make date Told"
-msgstr "新增报告日期"
-
-#: html/Search/Bulk.html:102
-msgid "Make priority"
-msgstr "新增优先顺ä½"
-
-#: html/Search/Bulk.html:104
-msgid "Make queue"
-msgstr "新增表å•"
-
-#: html/Search/Bulk.html:100
-msgid "Make subject"
-msgstr "新增主题"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "Make this group visible to user"
-msgstr "让此群组能被使用者看è§"
-
-#: NOT FOUND IN SOURCE
-msgid "Male"
-msgstr "ç”·"
-
-#: html/Admin/index.html:78
-msgid "Manage custom fields and custom field values"
-msgstr "管ç†è‡ªè®¢å­—段åŠå­—段值"
-
-#: html/Admin/index.html:69
-msgid "Manage groups and group membership"
-msgstr "管ç†ç¾¤ç»„åŠæ‰€å±žæˆå‘˜"
-
-#: html/Admin/index.html:85
-msgid "Manage properties and configuration which apply to all queues"
-msgstr "管ç†é€‚用于所有表å•çš„属性与设定"
-
-#: html/Admin/index.html:74
-msgid "Manage queues and queue-specific properties"
-msgstr "管ç†å„表å•åŠç›¸å…³å±žæ€§"
-
-#: html/Admin/index.html:64
-msgid "Manage users and passwords"
-msgstr "管ç†ä½¿ç”¨è€…与å£ä»¤"
-
-#: NOT FOUND IN SOURCE
-msgid "Manager"
-msgstr "ç»ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Mar"
-msgstr "三月"
-
-#: lib/RT/Date.pm:443
-msgid "Mar."
-msgstr "03"
-
-#: NOT FOUND IN SOURCE
-msgid "March"
-msgstr "三月"
-
-#: NOT FOUND IN SOURCE
-msgid "Marketing Department"
-msgstr "行销部"
-
-#: NOT FOUND IN SOURCE
-msgid "Match Pattern"
-msgstr "符åˆæ ·å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "May"
-msgstr "五月"
-
-#: lib/RT/Date.pm:445
-msgid "May."
-msgstr "05"
-
-#: lib/RT/Transaction_Overlay.pm:731
-#. ($value)
-msgid "Member %1 added"
-msgstr "æˆå‘˜ %1 新增完毕"
-
-#: lib/RT/Transaction_Overlay.pm:771
-#. ($value)
-msgid "Member %1 deleted"
-msgstr "æˆå‘˜ %1 删除完毕"
-
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "新增æˆå‘˜å®Œæ¯•"
-
-#: lib/RT/Group_Overlay.pm:1162
-msgid "Member deleted"
-msgstr "æˆå‘˜å·²åˆ é™¤"
-
-#: lib/RT/Group_Overlay.pm:1166
-msgid "Member not deleted"
-msgstr "æˆå‘˜æœªåˆ é™¤"
-
-#: html/Elements/SelectLinkType:47
-msgid "Member of"
-msgstr "隶属于"
-
-#: NOT FOUND IN SOURCE
-msgid "Member since"
-msgstr "注册日期"
-
-#: NOT FOUND IN SOURCE
-msgid "MemberOf"
-msgstr "隶属于"
-
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
-msgid "Members"
-msgstr "æˆå‘˜"
-
-#: lib/RT/Transaction_Overlay.pm:728
-#. ($value)
-msgid "Membership in %1 added"
-msgstr "所属群组 %1 加入完毕"
-
-#: lib/RT/Transaction_Overlay.pm:768
-#. ($value)
-msgid "Membership in %1 deleted"
-msgstr "所属群组 %1 移除完毕"
-
-#: html/Admin/Elements/UserTabs:61
-msgid "Memberships"
-msgstr "所属群组"
-
-#: html/Admin/Users/Memberships.html:60
-#. ($UserObj->Name)
-msgid "Memberships of the user %1"
-msgstr "使用者 %1 的所属群组"
-
-#: lib/RT/Ticket_Overlay.pm:2893
-msgid "Merge Successful"
-msgstr "æ•´åˆå®Œæ¯•"
-
-#: lib/RT/Ticket_Overlay.pm:2780
-msgid "Merge failed. Couldn't set EffectiveId"
-msgstr "æ•´åˆå¤±è´¥ã€‚无法设定 EffectiveId"
-
-#: lib/RT/Ticket_Overlay.pm:2788
-msgid "Merge failed. Couldn't set Status"
-msgstr "æ•´åˆå¤±è´¥ã€‚无法设定 Status"
-
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
-msgid "Merge into"
-msgstr "æ•´åˆè¿›"
-
-#: lib/RT/Transaction_Overlay.pm:734
-#. ($value)
-msgid "Merged into %1"
-msgstr "已整åˆè¿› %1"
-
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
-msgid "Message"
-msgstr "讯æ¯"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
-msgstr "信件内文ä¸æ˜¯çº¯æ–‡å­—,因此无法显示。"
-
-#: lib/RT/Ticket_Overlay.pm:2451
-msgid "Message could not be recorded"
-msgstr "无法纪录讯æ¯"
-
-#: lib/RT/Ticket_Overlay.pm:2454
-msgid "Message recorded"
-msgstr "讯æ¯çºªå½•æˆåŠŸ"
-
-#: html/Ticket/Elements/PreviewScrips:122
-msgid "Messages about this ticket will not be sent to..."
-msgstr "此申请å•çš„相关讯æ¯ä¸ä¼šå¯„é€ç»™..."
-
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
-msgstr "分钟"
-
-#: NOT FOUND IN SOURCE
-msgid "Misc. Expense"
-msgstr "æ‚è´¹"
-
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr "未对é½çš„括å·"
-
-#: lib/RT/Record.pm:954
-msgid "Missing a primary key?: %1"
-msgstr "缺少主键值?(%1)"
-
-#: NOT FOUND IN SOURCE
-msgid "Missing mandatory fields"
-msgstr "缺少必填字段"
-
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
-msgid "Mobile"
-msgstr "行动电è¯"
-
-#: NOT FOUND IN SOURCE
-msgid "MobilePhone"
-msgstr "行动电è¯"
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "Modify Access Control List"
-msgstr "更改æƒé™æŽ§åˆ¶æ¸…å•"
-
-#: html/Admin/Elements/ObjectCustomFields:96
-#. (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
-#. (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
-msgid "Modify Group Rights"
-msgstr "更改群组æƒé™"
-
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
-msgid "Modify Members"
-msgstr "更改æˆå‘˜"
-
-#: html/User/Delegation.html:58
-msgid "Modify Rights"
-msgstr "更改æƒé™"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "Modify Scrip templates for this queue"
-msgstr "更改此表å•çš„模æ¿"
-
-#: lib/RT/Queue_Overlay.pm:100
-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
-msgid "Modify User Rights"
-msgstr "更改使用者æƒé™"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify Workflow"
-msgstr "更改æµç¨‹"
-
-#: html/Admin/Queues/CustomField.html:66
-#. ($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
-#. ($QueueObj->Name)
-msgid "Modify a scrip for queue %1"
-msgstr "更改 %1 表å•å†…的手续"
-
-#: html/Admin/Global/Scrip.html:75
-msgid "Modify a scrip that applies to all queues"
-msgstr "更改适用于所有表å•çš„手续"
-
-#: html/Admin/CustomFields/Objects.html:90
-#. ($CF->Name)
-msgid "Modify associated objects for %1"
-msgstr "更改适用 %1 的对象"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify dates for # %1"
-msgstr "更改 # %1 的日期"
-
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
-#. ($TicketObj->Id)
-msgid "Modify dates for #%1"
-msgstr "更改 #%1 的日期"
-
-#: html/Ticket/ModifyDates.html:57
-#. ($TicketObj->Id)
-msgid "Modify dates for ticket # %1"
-msgstr "æ›´æ”¹ç”³è¯·å• # %1 的日期"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
-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
-msgid "Modify global group rights"
-msgstr "更改全域设定的群组æƒé™"
-
-#: html/Admin/Global/GroupRights.html:54
-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
-msgid "Modify global user rights"
-msgstr "更改全域设定的使用者æƒé™"
-
-#: html/Admin/Global/UserRights.html:54
-msgid "Modify global user rights."
-msgstr "更改全域设定的使用者æƒé™ã€‚"
-
-#: lib/RT/Group_Overlay.pm:163
-msgid "Modify group metadata or delete group"
-msgstr "更改群组数æ®åŠåˆ é™¤ç¾¤ç»„"
-
-#: html/Admin/CustomFields/GroupRights.html:164
-#. ($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
-#. ($GroupObj->Name)
-msgid "Modify group rights for group %1"
-msgstr "更改群组 %1 的群组æƒé™"
-
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
-#. ($QueueObj->Name)
-msgid "Modify group rights for queue %1"
-msgstr "æ›´æ”¹è¡¨å• %1 的群组æƒé™"
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "Modify membership roster for this group"
-msgstr "更改此群组的æˆå‘˜åå•"
-
-#: lib/RT/System.pm:82
-msgid "Modify one's own RT account"
-msgstr "更改个人的å¸å·ä¿¡æ¯"
-
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
-#. ($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
-#. ($Ticket->id)
-#. ($Ticket->Id)
-msgid "Modify people related to ticket #%1"
-msgstr "æ›´æ”¹ç”³è¯·å• #%1 链接到的人员"
-
-#: html/Admin/Queues/Scrips.html:67
-#. ($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
-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
-#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-msgid "Modify template %1"
-msgstr "æ›´æ”¹æ¨¡æ¿ %1"
-
-#: html/Admin/Global/Templates.html:65
-msgid "Modify templates which apply to all queues"
-msgstr "更改适用于所有表å•çš„模æ¿"
-
-#: html/Admin/Global/index.html:85
-msgid "Modify the default \"RT at a glance\" view"
-msgstr "更改预设的‘RT 一览’检视"
-
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
-#. ($Group->Name)
-msgid "Modify the group %1"
-msgstr "更改群组 %1"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "Modify the queue watchers"
-msgstr "更改表å•è§†å¯Ÿå‘˜"
-
-#: html/Admin/Users/Modify.html:309
-#. ($UserObj->Name)
-msgid "Modify the user %1"
-msgstr "更改使用者 %1"
-
-#: html/Ticket/ModifyAll.html:58
-#. ($Ticket->Id)
-msgid "Modify ticket # %1"
-msgstr "æ›´æ”¹ç”³è¯·å• # %1"
-
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
-#. ($TicketObj->Id)
-msgid "Modify ticket #%1"
-msgstr "æ›´æ”¹ç”³è¯·å• # %1"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "Modify tickets"
-msgstr "更改申请å•"
-
-#: html/Admin/CustomFields/UserRights.html:157
-#. ($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
-#. ($GroupObj->Name)
-msgid "Modify user rights for group %1"
-msgstr "更改群组 %1 的使用者æƒé™"
-
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
-#. ($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:108
-msgid "ModifyCustomField"
-msgstr "更改自订字段"
-
-#: lib/RT/Group_Overlay.pm:166
-msgid "ModifyOwnMembership"
-msgstr "更改自己是å¦å±žäºŽæŸç¾¤ç»„"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "ModifyQueueWatchers"
-msgstr "更改表å•è§†å¯Ÿå‘˜"
-
-#: lib/RT/Queue_Overlay.pm:100
-msgid "ModifyScrips"
-msgstr "更改手续"
-
-#: lib/RT/System.pm:82
-msgid "ModifySelf"
-msgstr "更改个人å¸å·"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "ModifyTemplate"
-msgstr "更改模æ¿"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "ModifyTicket"
-msgstr "更改申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Mon"
-msgstr "星期一"
-
-#: lib/RT/Date.pm:417
-msgid "Mon."
-msgstr "星期一"
-
-#: NOT FOUND IN SOURCE
-msgid "More"
-msgstr "更多"
-
-#: html/Ticket/Elements/ShowRequestor:61
-#. ($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 "全移"
-
-#: html/Admin/Elements/PickCustomFields:83
-msgid "Move down"
-msgstr "下移"
-
-#: html/Admin/Elements/PickCustomFields:75
-msgid "Move up"
-msgstr "上移"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:48
-msgid "Multiple"
-msgstr "多é‡"
-
-#: lib/RT/User_Overlay.pm:226
-msgid "Must specify 'Name' attribute"
-msgstr "必须指定 'Name' 的属性"
-
-#: html/SelfService/Elements/MyRequests:57
-#. ($friendly_status)
-msgid "My %1 tickets"
-msgstr "我的 %1 申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "My Approvals"
-msgstr "表å•ç­¾æ ¸"
-
-#: html/Tools/Elements/Tabs:63
-msgid "My Day"
-msgstr "今日事"
-
-#: NOT FOUND IN SOURCE
-msgid "My Requests"
-msgstr "表å•ç”³è¯·è¿½è¸ª"
-
-#: NOT FOUND IN SOURCE
-msgid "My Tickets"
-msgstr "表å•å¤„ç†"
-
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
-msgid "My approvals"
-msgstr "表å•ç­¾æ ¸"
-
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
-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
-msgid "Name"
-msgstr "å称"
-
-#: lib/RT/User_Overlay.pm:233
-msgid "Name in use"
-msgstr "å¸å·å·²æœ‰äººä½¿ç”¨"
-
-#: NOT FOUND IN SOURCE
-msgid "Nationality"
-msgstr "国ç±"
-
-#: NOT FOUND IN SOURCE
-msgid "Need approval from system administrator"
-msgstr "需先由系统管ç†å‘˜è¿›è¡Œæ‰¹å‡†"
-
-#: html/Ticket/Elements/ShowDates:73
-msgid "Never"
-msgstr "从未更动"
-
-#: NOT FOUND IN SOURCE
-msgid "New"
-msgstr "新建立"
-
-#: html/Elements/EditLinks:117
-msgid "New Links"
-msgstr "新增关系"
-
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
-msgid "New Password"
-msgstr "æ–°çš„å£ä»¤"
-
-#: etc/initialdata:332
-msgid "New Pending Approval"
-msgstr "新的待签核事项"
-
-#: NOT FOUND IN SOURCE
-msgid "New Query"
-msgstr "新增查询"
-
-#: NOT FOUND IN SOURCE
-msgid "New Request"
-msgstr "表å•ç”³è¯·"
-
-#: html/Ticket/Elements/Tabs:212
-msgid "New Search"
-msgstr "新增查询"
-
-#: NOT FOUND IN SOURCE
-msgid "New Watchers"
-msgstr "新增视察员"
-
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
-msgid "New custom field"
-msgstr "新增自订字段"
-
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
-msgid "New group"
-msgstr "新增群组"
-
-#: html/SelfService/Prefs.html:53
-msgid "New password"
-msgstr "æ–°çš„å£ä»¤"
-
-#: lib/RT/User_Overlay.pm:816
-msgid "New password notification sent"
-msgstr "é€å‡ºæ–°å£ä»¤é€šçŸ¥"
-
-#: html/Admin/Elements/QueueTabs:95
-msgid "New queue"
-msgstr "新增表å•"
-
-#: html/Ticket/Elements/Reminders:118
-msgid "New reminder:"
-msgstr "新增æ醒项目:"
-
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "æ出申请å•"
-
-#: html/Admin/Elements/SelectRights:65
-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
-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
-msgid "New template"
-msgstr "新增模æ¿"
-
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
-msgid "New ticket"
-msgstr "æ出申请å•"
-
-#: lib/RT/Ticket_Overlay.pm:2757
-msgid "New ticket doesn't exist"
-msgstr "没有新申请å•"
-
-#: html/Admin/Elements/UserTabs:81
-msgid "New user"
-msgstr "新增使用者"
-
-#: html/Admin/Elements/CreateUserCalled:47
-msgid "New user called"
-msgstr "新使用者åå­—"
-
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
-msgid "New watchers"
-msgstr "新视察员"
-
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "更新窗å£è®¾å®š"
-
-#: NOT FOUND IN SOURCE
-msgid "New workflow"
-msgstr "新增æµç¨‹"
-
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
-msgid "Next"
-msgstr "下一项"
-
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr "下一页"
-
-#: NOT FOUND IN SOURCE
-msgid "Next page"
-msgstr "下一页"
-
-#: NOT FOUND IN SOURCE
-msgid "NickName"
-msgstr "昵称"
-
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
-msgid "Nickname"
-msgstr "昵称"
-
-#: NOT FOUND IN SOURCE
-msgid "Night Shift"
-msgstr "å°å¤œç­"
-
-#: NOT FOUND IN SOURCE
-msgid "No"
-msgstr "å¦"
-
-#: html/Admin/CustomFields/UserRights.html:145
-msgid "No Class defined"
-msgstr "尚未定义类别"
-
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
-msgid "No CustomField"
-msgstr "无自订字段"
-
-#: html/Admin/CustomFields/GroupRights.html:103
-msgid "No CustomField defined"
-msgstr "尚未定义自订字段"
-
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
-msgid "No Group defined"
-msgstr "尚未定义群组"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:482
-msgid "No Query"
-msgstr "没有查询"
-
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
-msgid "No Queue defined"
-msgstr "尚未定义表å•"
-
-#: bin/rt-crontool:73
-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
-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 "没有æµç¨‹"
-
-#: html/Approvals/Elements/Approve:77
-msgid "No action"
-msgstr "æš‚ä¸å¤„ç†"
-
-#: lib/RT/Record.pm:949
-msgid "No column specified"
-msgstr "未指定字段"
-
-#: NOT FOUND IN SOURCE
-msgid "No command found\\n"
-msgstr "找ä¸åˆ°å‘½ä»¤"
-
-#: html/Ticket/Elements/ShowRequestor:68
-msgid "No comment entered about this user"
-msgstr "没有对这å使用者的评论"
-
-#: NOT FOUND IN SOURCE
-msgid "No correspondence attached"
-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
-#. (ref $self)
-msgid "No description for %1"
-msgstr "没有对 %1 çš„æè¿°"
-
-#: lib/RT/Users_Overlay.pm:190
-msgid "No group specified"
-msgstr "未指定群组"
-
-#: html/Admin/Groups/index.html:52
-msgid "No groups matching search criteria found."
-msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„群组。"
-
-#: lib/RT/Ticket_Overlay.pm:2393
-msgid "No message attached"
-msgstr "没有附上讯æ¯"
-
-#: lib/RT/User_Overlay.pm:1034
-msgid "No password set"
-msgstr "没有设定å£ä»¤"
-
-#: lib/RT/Queue_Overlay.pm:361
-msgid "No permission to create queues"
-msgstr "没有新增表å•çš„æƒé™"
-
-#: lib/RT/Ticket_Overlay.pm:420
-#. ($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
-msgid "No permission to display that ticket"
-msgstr "没有显示该申请å•çš„æƒé™"
-
-#: lib/RT/SavedSearch.pm:156
-msgid "No permission to save system-wide searches"
-msgstr "没有储存全域预存查询的æƒé™"
-
-#: html/SelfService/Update.html:117
-msgid "No permission to view update ticket"
-msgstr "没有检视申请å•æ›´æ–°çš„æƒé™"
-
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
-msgid "No principal specified"
-msgstr "未指定å•ä½"
-
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
-msgid "No principals selected."
-msgstr "未指定å•ä½ã€‚"
-
-#: NOT FOUND IN SOURCE
-msgid "No protocol specified in %1"
-msgstr "%1 内未指定åè®®"
-
-#: html/Admin/Queues/index.html:57
-msgid "No queues matching search criteria found."
-msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„表å•ã€‚"
-
-#: html/Admin/Elements/SelectRights:106
-msgid "No rights found"
-msgstr "找ä¸åˆ°æƒé™"
-
-#: html/Admin/Elements/SelectRights:53
-msgid "No rights granted."
-msgstr "没有选定æƒé™"
-
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr "尚未加载查询"
-
-#: html/Search/Bulk.html:232
-msgid "No search to operate on."
-msgstr "没有è¦è¿›è¡Œçš„查询"
-
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
-msgid "No subject"
-msgstr "没有标题"
-
-#: NOT FOUND IN SOURCE
-msgid "No ticket id specified"
-msgstr "未指定申请å•ç¼–å·"
-
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
-msgid "No transaction type specified"
-msgstr "未指定更动报告类别"
-
-#: NOT FOUND IN SOURCE
-msgid "No user or email address specified"
-msgstr "未指定使用者或电å­é‚®ä»¶åœ°å€"
-
-#: html/Admin/Users/index.html:55
-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:946
-msgid "No value sent to _Set!\\n"
-msgstr "_Set 没有收到任何值!\\n"
-
-#: html/Elements/QuickCreate:59
-msgid "Nobody"
-msgstr "没有人"
-
-#: lib/RT/Record.pm:951
-msgid "Nonexistant field?"
-msgstr "字段ä¸å­˜åœ¨ï¼Ÿ"
-
-#: NOT FOUND IN SOURCE
-msgid "Normal Users"
-msgstr "一般用户群组"
-
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
-msgid "Not Set"
-msgstr "未设定"
-
-#: NOT FOUND IN SOURCE
-msgid "Not configured to fetch the content from a %1 in %2"
-msgstr "未设定æˆä»Ž %2 å†…æ’·å– %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Not logged in"
-msgstr "尚未登入"
-
-#: html/Elements/Header:96
-msgid "Not logged in."
-msgstr "尚未登入"
-
-#: lib/RT/Date.pm:397
-msgid "Not set"
-msgstr "尚未设定"
-
-#: html/NoAuth/Reminder.html:48
-msgid "Not yet implemented."
-msgstr "尚未完工。"
-
-#: NOT FOUND IN SOURCE
-msgid "Not yet implemented...."
-msgstr "尚未完工..."
-
-#: html/Approvals/Elements/Approve:81
-msgid "Notes"
-msgstr "备注"
-
-#: NOT FOUND IN SOURCE
-msgid "Notes:"
-msgstr "备注:"
-
-#: lib/RT/User_Overlay.pm:819
-msgid "Notification could not be sent"
-msgstr "无法é€å‡ºé€šçŸ¥"
-
-#: etc/initialdata:101
-msgid "Notify AdminCcs"
-msgstr "通知管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:97
-msgid "Notify AdminCcs as Comment"
-msgstr "以评论方å¼é€šçŸ¥ç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
-msgid "Notify Ccs"
-msgstr "通知副本收件人"
-
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
-msgid "Notify Ccs as Comment"
-msgstr "以评论方å¼é€šçŸ¥å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:128
-msgid "Notify Other Recipients"
-msgstr "通知其它收件人"
-
-#: etc/initialdata:124
-msgid "Notify Other Recipients as Comment"
-msgstr "以评论方å¼é€šçŸ¥å…¶å®ƒæ”¶ä»¶äºº"
-
-#: etc/initialdata:85
-msgid "Notify Owner"
-msgstr "通知承办人"
-
-#: etc/initialdata:81
-msgid "Notify Owner as Comment"
-msgstr "以评论方å¼é€šçŸ¥æ‰¿åŠžäºº"
-
-#: etc/initialdata:376
-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:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr "通知承办人申请å•å·²å®ŒæˆæŸé¡¹ç­¾æ ¸"
-
-#: etc/initialdata:334
-msgid "Notify Owners and AdminCcs of new items pending their approval"
-msgstr "æ•´ç†å¾…签核事项,通知承办人åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:77
-msgid "Notify Requestors"
-msgstr "通知申请人"
-
-#: etc/initialdata:111
-msgid "Notify Requestors and Ccs"
-msgstr "通知申请人åŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:106
-msgid "Notify Requestors and Ccs as Comment"
-msgstr "以评论方å¼é€šçŸ¥ç”³è¯·äººåŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
-msgstr "通知申请人ã€å‰¯æœ¬åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr "以评论方å¼é€šçŸ¥ç”³è¯·äººã€å‰¯æœ¬åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: NOT FOUND IN SOURCE
-msgid "Notify people:"
-msgstr "通知对象"
-
-#: NOT FOUND IN SOURCE
-msgid "Nov"
-msgstr "å一月"
-
-#: lib/RT/Date.pm:451
-msgid "Nov."
-msgstr "11"
-
-#: NOT FOUND IN SOURCE
-msgid "November"
-msgstr "å一月"
-
-#: NOT FOUND IN SOURCE
-msgid "OIN104"
-msgstr "104eHRMS 接å£"
-
-#: NOT FOUND IN SOURCE
-msgid "OK"
-msgstr "确定"
-
-#: html/Search/Elements/SelectAndOr:47
-msgid "OR"
-msgstr "OR"
-
-#: lib/RT/Record.pm:322
-msgid "Object could not be created"
-msgstr "无法新增对象"
-
-#: lib/RT/Record.pm:123
-msgid "Object could not be deleted"
-msgstr "无法删除对象"
-
-#: lib/RT/Record.pm:341
-msgid "Object created"
-msgstr "对象新增完毕"
-
-#: lib/RT/Record.pm:120
-msgid "Object deleted"
-msgstr "对象删除完毕"
-
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
-#. ($ObjectType)
-#. ($LookupType)
-msgid "Object of type %1 cannot take custom fields"
-msgstr "自订字段ä¸é€‚用于类别为 %1 的对象"
-
-#: lib/RT/CustomField_Overlay.pm:967
-msgid "Object type mismatch"
-msgstr "对象类别ä¸ç¬¦"
-
-#: NOT FOUND IN SOURCE
-msgid "Occupation Status"
-msgstr "在èŒçŠ¶æ€"
-
-#: NOT FOUND IN SOURCE
-msgid "Oct"
-msgstr "å月"
-
-#: lib/RT/Date.pm:450
-msgid "Oct."
-msgstr "10"
-
-#: NOT FOUND IN SOURCE
-msgid "October"
-msgstr "å月"
-
-#: NOT FOUND IN SOURCE
-msgid "Office Phone"
-msgstr "办公室电è¯"
-
-#: html/Tools/Elements/Tabs:55
-msgid "Offline"
-msgstr "离线"
-
-#: html/Tools/Offline.html:49
-msgid "Offline edits"
-msgstr "离线编辑"
-
-#: html/Tools/Offline.html:46
-msgid "Offline upload"
-msgstr "离线上载"
-
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "等于"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-msgid "On %1, %2 wrote:"
-msgstr "在 %1 时,%2 写到:"
-
-#: NOT FOUND IN SOURCE
-msgid "On Change"
-msgstr "更改申请å•æ—¶"
-
-#: etc/initialdata:163
-msgid "On Comment"
-msgstr "评论时"
-
-#: etc/initialdata:156
-msgid "On Correspond"
-msgstr "回å¤ç”³è¯·å•æ—¶"
-
-#: etc/initialdata:145
-msgid "On Create"
-msgstr "新增申请å•æ—¶"
-
-#: etc/initialdata:184
-msgid "On Owner Change"
-msgstr "承办人改å˜æ—¶"
-
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
-msgid "On Priority Change"
-msgstr "优先顺ä½æ”¹å˜æ—¶"
-
-#: etc/initialdata:192
-msgid "On Queue Change"
-msgstr "表å•æ”¹å˜æ—¶"
-
-#: etc/initialdata:198
-msgid "On Resolve"
-msgstr "解决申请å•æ—¶"
-
-#: etc/initialdata:169
-msgid "On Status Change"
-msgstr "现况改å˜æ—¶"
-
-#: etc/initialdata:150
-msgid "On Transaction"
-msgstr "å‘生更动时"
-
-#: html/Approvals/Elements/PendingMyApproval:70
-#. ("<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
-#. ("<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
-msgid "Only show custom fields for:"
-msgstr "仅显示适用于下列项目的自订字段:"
-
-#: NOT FOUND IN SOURCE
-msgid "Open"
-msgstr "å¼€å¯"
-
-#: html/SelfService/index.html:46
-msgid "Open Tickets"
-msgstr "å¼€å¯ç”³è¯·å•"
-
-#: html/Ticket/Elements/Tabs:160
-msgid "Open it"
-msgstr "å¼€å¯"
-
-#: html/SelfService/Elements/Tabs:75
-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
-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 "选项å称"
-
-#: html/Prefs/MyRT.html:70
-msgid "Options"
-msgstr "选项"
-
-#: html/Search/Elements/DisplayOptions:59
-msgid "Order by"
-msgstr "排åºæ–¹å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "顺åºä¸ŽæŽ’åºæ–¹å¼"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
-msgid "Organization"
-msgstr "组织å称"
-
-#: NOT FOUND IN SOURCE
-msgid "Organization:"
-msgstr "组织:"
-
-#: html/Approvals/Elements/Approve:53
-#. ($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:622
-msgid "Outgoing email about a comment recorded"
-msgstr "已纪录å‘é€çš„评论邮件"
-
-#: lib/RT/Transaction_Overlay.pm:626
-msgid "Outgoing email recorded"
-msgstr "已纪录å‘é€çš„邮件"
-
-#: html/Admin/Queues/Modify.html:90
-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:112
-msgid "Own tickets"
-msgstr "承办申请å•"
-
-#: lib/RT/Queue_Overlay.pm:112
-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
-msgid "Owner"
-msgstr "承办人"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner changed from %1 to %2"
-msgstr "承办人已从 %1 改为 %2"
-
-#: lib/RT/Ticket_Overlay.pm:505
-msgid "Owner could not be set."
-msgstr "无法设定承办人。"
-
-#: lib/RT/Transaction_Overlay.pm:672
-#. ($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 "承办人电è¯"
-
-#: NOT FOUND IN SOURCE
-msgid "Page #"
-msgstr " "
-
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-msgid "Page %1 of %2"
-msgstr "第 %1/%2 页"
-
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
-msgid "Pager"
-msgstr "呼å«å™¨"
-
-#: NOT FOUND IN SOURCE
-msgid "PagerPhone"
-msgstr "呼å«å™¨å·ç "
-
-#: NOT FOUND IN SOURCE
-msgid "Parameter"
-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
-msgid "Parents"
-msgstr "æ¯ç”³è¯·å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Park Space"
-msgstr "åœè½¦ä½ç”³è¯·"
-
-#: html/Elements/Login:95 html/User/Prefs.html:105
-msgid "Password"
-msgstr "å£ä»¤"
-
-#: html/NoAuth/Reminder.html:46
-msgid "Password Reminder"
-msgstr "å£ä»¤æ示"
-
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
-msgid "Password changed"
-msgstr "å£ä»¤æ›´æ”¹å®Œæ¯•"
-
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
-msgid "Password needs to be at least %1 characters long"
-msgstr "å£ä»¤é•¿åº¦è‡³å°‘必须为 %1 个字元"
-
-#: lib/RT/User_Overlay.pm:1044
-msgid "Password set"
-msgstr "å£ä»¤å·²è®¾å®š"
-
-#: NOT FOUND IN SOURCE
-msgid "Password too short"
-msgstr "å£ä»¤å¤ªçŸ­"
-
-#: html/User/Prefs.html:240
-#. (loc_fuzzy($msg))
-msgid "Password: %1"
-msgstr "å£ä»¤ï¼š%1"
-
-#: lib/RT/User_Overlay.pm:1030
-msgid "Password: Permission Denied"
-msgstr "å£ä»¤ï¼šæƒé™ä¸è¶³"
-
-#: html/Admin/Users/Modify.html:364
-msgid "Passwords do not match."
-msgstr "å£ä»¤ç¡®è®¤å¤±è´¥ã€‚"
-
-#: html/User/Prefs.html:242
-msgid "Passwords do not match. Your password has not been changed"
-msgstr "å£ä»¤ç¡®è®¤å¤±è´¥ã€‚您的å£ä»¤å¹¶æœªæ”¹å˜ã€‚"
-
-#: NOT FOUND IN SOURCE
-msgid "Pelase select a queue"
-msgstr "请选择表å•å称"
-
-#: NOT FOUND IN SOURCE
-msgid "Pending Approval"
-msgstr "等待签核"
-
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
-msgid "People"
-msgstr "人员"
-
-#: NOT FOUND IN SOURCE
-msgid "People with Queue Rights"
-msgstr "拥有表å•æƒé™äººå‘˜"
-
-#: etc/initialdata:133
-msgid "Perform a user-defined action"
-msgstr "执行使用者自订的动作"
-
-#: html/Admin/Tools/Configuration.html:94
-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
-msgid "Permission Denied"
-msgstr "æƒé™ä¸è¶³"
-
-#: NOT FOUND IN SOURCE
-msgid "Permission Settings"
-msgstr "æƒé™è®¾å®š"
-
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
-msgid "Permission denied"
-msgstr "æƒé™ä¸è¶³"
-
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
-msgstr "æƒé™ä¸è¶³"
-
-#: NOT FOUND IN SOURCE
-msgid "Permitted Queues:"
-msgstr "拥有æƒé™è¡¨å•åˆ—表:"
-
-#: NOT FOUND IN SOURCE
-msgid "Personal"
-msgstr "代ç†äººç¾¤ç»„"
-
-#: html/User/Elements/Tabs:56
-msgid "Personal Groups"
-msgstr "代ç†äººç¾¤ç»„"
-
-#: NOT FOUND IN SOURCE
-msgid "Personal Homepage"
-msgstr "个人首页"
-
-#: NOT FOUND IN SOURCE
-msgid "Personal Todo"
-msgstr "ç§äººå¾…办事项"
-
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
-msgid "Personal groups"
-msgstr "代ç†äººç¾¤ç»„"
-
-#: html/User/Elements/DelegateRights:58
-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 "电è¯å·ç "
-
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
-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 "请先选中è¦åˆ é™¤çš„对象"
-
-#: 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 "èŒçº§"
-
-#: 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
-msgid "Preferences"
-msgstr "å好"
-
-#: html/Admin/Users/MyRT.html:75
-#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr "使用者 %2 çš„ %1 å好。"
-
-#: html/Prefs/MyRT.html:141
-#. ($pane)
-msgid "Preferences saved for %1."
-msgstr "æˆåŠŸå‚¨å­˜ %1 çš„å好。"
-
-#: NOT FOUND IN SOURCE
-msgid "Prefs"
-msgstr "个人信æ¯"
-
-#: lib/RT/Action/Generic.pm:195
-msgid "Prepare Stubbed"
-msgstr "预备动作完毕"
-
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
-msgid "Prev"
-msgstr "上一项"
-
-#: html/Elements/TicketList:101
-msgid "Previous Page"
-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
-#. ($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
-msgid "Priority"
-msgstr "优先顺ä½"
-
-#: html/Admin/Queues/Modify.html:86
-msgid "Priority starts at"
-msgstr "优先顺ä½èµ·å§‹å€¼"
-
-#: html/Search/Elements/EditSearches:50
-msgid "Privacy:"
-msgstr "éšç§è®¾å®šï¼š"
-
-#: etc/initialdata:25
-msgid "Privileged"
-msgstr "内部æˆå‘˜"
-
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
-#. (loc_fuzzy($msg))
-msgid "Privileged status: %1"
-msgstr "内部æˆå‘˜çŠ¶æ€ï¼š%1"
-
-#: html/Admin/Users/index.html:102
-msgid "Privileged users"
-msgstr "内部æˆå‘˜"
-
-#: NOT FOUND IN SOURCE
-msgid "Process Status"
-msgstr "处ç†çŠ¶æ€"
-
-#: NOT FOUND IN SOURCE
-msgid "Project"
-msgstr "项目"
-
-#: NOT FOUND IN SOURCE
-msgid "Project Name"
-msgstr "项目å称"
-
-#: NOT FOUND IN SOURCE
-msgid "Projects"
-msgstr "项目"
-
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
-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 "公共事务区"
-
-#: NOT FOUND IN SOURCE
-msgid "Purging stale data: %1"
-msgstr "移除过期数æ®: %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Query"
-msgstr "查询"
-
-#: html/Search/Build.html:121
-msgid "Query Builder"
-msgstr "建立查询"
-
-#: html/Search/Elements/Chart:101
-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
-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
-#. ($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 "表å•å…³é”®è¯é€‰å–"
-
-#: html/Admin/Queues/Modify.html:64
-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:365
-msgid "Queue already exists"
-msgstr "表å•å·²å­˜åœ¨"
-
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
-msgid "Queue could not be created"
-msgstr "无法新增表å•"
-
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
-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
-msgid "Queue created"
-msgstr "表å•æ–°å¢žå®Œæ¯•"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue is not specified."
-msgstr "未指定表å•ã€‚"
-
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
-msgid "Queue not found"
-msgstr "找ä¸åˆ°è¡¨å•"
-
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
-msgid "Queues"
-msgstr "表å•"
-
-#: html/Elements/MyAdminQueues:46
-msgid "Queues I administer"
-msgstr "由我管ç†çš„表å•"
-
-#: html/Elements/MySupportQueues:46
-msgid "Queues I'm an AdminCc for"
-msgstr "管ç†å‘˜å‰¯æœ¬æœ‰æˆ‘的表å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Quick Search"
-msgstr "表å•çŽ°å†µ"
-
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
-msgid "Quick search"
-msgstr "表å•ä¸€è§ˆ"
-
-#: html/Elements/QuickCreate:47
-msgid "Quick ticket creation"
-msgstr "快速建立申请å•"
-
-#: html/Search/Results.html:81
-msgid "RSS"
-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)
-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"
-
-#: html/Admin/index.html:46 html/Admin/index.html:47
-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 设定错误"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Critical error. Message not recorded!"
-msgstr "RT 致命错误。讯æ¯æœªè¢«çºªå½•ã€‚"
-
-#: html/Elements/Error:63 html/SelfService/Error.html:62
-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
-msgid "RT Self Service"
-msgstr "RT 自助æœåŠ¡"
-
-#: html/Admin/Tools/Configuration.html:73
-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
-msgid "RT at a glance"
-msgstr "RT 一览"
-
-#: html/Admin/Users/MyRT.html:30
-#. ($UserObj->Name)
-msgid "RT at a glance for the user %1"
-msgstr "使用者 %1 的 RT 一览"
-
-#: html/Admin/CustomFields/Modify.html:117
-msgid "RT can include content from another web service when showing this custom field."
-msgstr "RT å¯äºŽæ˜¾ç¤ºæ­¤è‡ªè®¢å­—段时引入其它网站的内容"
-
-#: html/Admin/CustomFields/Modify.html:106
-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
-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"
-
-#: html/Elements/Logo:49 html/Elements/PageLayout:172
-#. ($RT::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> 散布。"
-
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "RT 认为这å¯èƒ½æ˜¯é€€ä¿¡"
-
-#: html/Search/Simple.html:58
-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
-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 的电å­é‚®ä»¶å‘½ä»¤æ¨¡å¼é¡»è¦ PGP 认è¯ã€‚您å¯èƒ½æ²¡æœ‰ç­¾ç« ï¼Œæˆ–是您的签章无法辨识。"
-
-#: 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 "åªè¯»"
-
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
-msgid "Real Name"
-msgstr "真实姓å"
-
-#: NOT FOUND IN SOURCE
-msgid "RealName"
-msgstr "真实姓å"
-
-#: NOT FOUND IN SOURCE
-msgid "Really reject this ticket?"
-msgstr "您确定è¦é©³å›žè¿™å¼ ç”³è¯·å•å—?"
-
-#: lib/RT/Transaction_Overlay.pm:725
-#. ($value)
-msgid "Reference by %1 added"
-msgstr "已加入 %1 为å‚考本申请å•"
-
-#: lib/RT/Transaction_Overlay.pm:765
-#. ($value)
-msgid "Reference by %1 deleted"
-msgstr "已移除 %1 为å‚考本申请å•"
-
-#: lib/RT/Transaction_Overlay.pm:722
-#. ($value)
-msgid "Reference to %1 added"
-msgstr "已加入å‚è€ƒç”³è¯·å• %1"
-
-#: lib/RT/Transaction_Overlay.pm:762
-#. ($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
-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
-msgid "Refers to"
-msgstr "å‚考"
-
-#: NOT FOUND IN SOURCE
-msgid "RefersTo"
-msgstr "å‚考"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine"
-msgstr "在结果范围内查询"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "调整查询æ¡ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Refresh"
-msgstr "æ›´æ–°"
-
-#: html/Elements/Refresh:57
-#. ($value/60)
-msgid "Refresh this page every %1 minutes."
-msgstr "æ¯ %1 分钟更新页é¢"
-
-#: lib/RT/Transaction_Overlay.pm:811
-#. ($ticket->Subject)
-msgid "Reminder '%1' added"
-msgstr "已建立æ醒项目‘%1’"
-
-#: lib/RT/Transaction_Overlay.pm:824
-#. ($ticket->Subject)
-msgid "Reminder '%1' completed"
-msgstr "已完æˆæ醒项目‘%1’"
-
-#: lib/RT/Transaction_Overlay.pm:817
-#. ($ticket->Subject)
-msgid "Reminder '%1' reopened"
-msgstr "å·²é‡æ–°å¼€å¯æ醒项目‘%1’"
-
-#: html/Ticket/Reminders.html:46
-#. ($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
-msgid "Reminders"
-msgstr "æ醒项目"
-
-#: html/Ticket/Reminders.html:50
-#. ($Ticket->Id)
-msgid "Reminders for ticket #%1"
-msgstr "ç”³è¯·å• #%1 çš„æ醒项目"
-
-#: NOT FOUND IN SOURCE
-msgid "Remove"
-msgstr "移除"
-
-#: html/Search/Bulk.html:94
-msgid "Remove AdminCc"
-msgstr "移除管ç†å‘˜å‰¯æœ¬"
-
-#: html/Search/Bulk.html:90
-msgid "Remove Cc"
-msgstr "移除副本"
-
-#: html/Search/Bulk.html:86
-msgid "Remove Requestor"
-msgstr "移除申请人"
-
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
-msgid "Reply"
-msgstr "回å¤"
-
-#: html/Admin/Queues/Modify.html:72
-msgid "Reply Address"
-msgstr "回å¤åœ°å€"
-
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
-msgid "Reply to requestors"
-msgstr "回å¤ç”³è¯·äºº"
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "Reply to tickets"
-msgstr "对申请å•è¿›è¡Œå›žå¤"
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "ReplyToTicket"
-msgstr "回å¤ç”³è¯·å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Report to Duty"
-msgstr "上下ç­åˆ·å¡"
-
-#: NOT FOUND IN SOURCE
-msgid "Reported on"
-msgstr "到èŒæ—¥æœŸ"
-
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
-msgid "Reports"
-msgstr "报表"
-
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
-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 "RequestorAddresses"
-msgstr "申请人地å€"
-
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
-msgid "Requestors"
-msgstr "申请人"
-
-#: html/Admin/Queues/Modify.html:96
-msgid "Requests should be due in"
-msgstr "申请å•å¤„ç†æœŸé™"
-
-#: lib/RT/Attribute_Overlay.pm:146
-#. ('Object')
-msgid "Required parameter '%1' not specified"
-msgstr "未指定必è¦çš„å‚数‘%1’"
-
-#: html/Elements/Submit:83
-msgid "Reset"
-msgstr "é‡è®¾"
-
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
-msgid "Reset to default"
-msgstr "é‡è®¾ä¸ºé¢„设值"
-
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
-msgid "Residence"
-msgstr "ä½å¤„"
-
-#: NOT FOUND IN SOURCE
-msgid "Resolution"
-msgstr "解决状æ€"
-
-#: html/Ticket/Elements/Tabs:156
-msgid "Resolve"
-msgstr "解决"
-
-#: html/Ticket/Update.html:156
-#. ($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
-msgid "Resolved"
-msgstr "已解决"
-
-#: html/Tools/Reports/Elements/Tabs:55
-msgid "Resolved by owner"
-msgstr "已由承办人解决"
-
-#: html/Tools/Reports/Elements/Tabs:59
-msgid "Resolved in date range"
-msgstr "已在指定日期内解决"
-
-#: html/Tools/Reports/ResolvedByDates.html:52
-msgid "Resolved tickets in period, grouped by owner"
-msgstr "已在指定日期内内解决,ä¾æ‰¿åŠžäººåˆ†ç»„"
-
-#: html/Tools/Reports/ResolvedByOwner.html:50
-msgid "Resolved tickets, grouped by owner"
-msgstr "已解决的申请å•ï¼Œä¾æ‰¿åŠžäººåˆ†ç»„"
-
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "回å¤ç”³è¯·äºº"
-
-#: NOT FOUND IN SOURCE
-msgid "Responsibility Type"
-msgstr "责任区分"
-
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
-msgid "Results"
-msgstr "结果"
-
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "æ¯é¡µåˆ—出几笔结果"
-
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
-msgid "Retype Password"
-msgstr "å†æ¬¡è¾“å…¥å£ä»¤"
-
-#: 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:630
-msgid "Right Delegated"
-msgstr "æƒé™ä»£ç†å®Œæ¯•"
-
-#: lib/RT/ACE_Overlay.pm:320
-msgid "Right Granted"
-msgstr "æƒé™è®¾å®šå®Œæ¯•"
-
-#: lib/RT/ACE_Overlay.pm:178
-msgid "Right Loaded"
-msgstr "æƒé™åŠ è½½å®Œæ¯•"
-
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
-msgid "Right could not be revoked"
-msgstr "无法撤消æƒé™"
-
-#: html/User/Delegation.html:85
-msgid "Right not found"
-msgstr "找ä¸åˆ°æƒé™"
-
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
-msgid "Right not loaded."
-msgstr "æƒé™å¹¶æœªåŠ è½½ã€‚"
-
-#: lib/RT/ACE_Overlay.pm:712
-msgid "Right revoked"
-msgstr "æƒé™æ’¤æ¶ˆå®Œæ¯•"
-
-#: html/Admin/Elements/UserTabs:70
-msgid "Rights"
-msgstr "æƒé™åŠä»£ç†äºº"
-
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
-#. ($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 çš„æƒé™"
-
-#: NOT FOUND IN SOURCE
-msgid "Role Members"
-msgstr "角色æˆå‘˜"
-
-#: NOT FOUND IN SOURCE
-msgid "Role Name"
-msgstr "角色å称"
-
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
-msgid "Roles"
-msgstr "角色"
-
-#: NOT FOUND IN SOURCE
-msgid "RootApproval"
-msgstr "交由系统管ç†å‘˜ç­¾æ ¸"
-
-#: html/Prefs/MyRT.html:72
-msgid "Rows per box"
-msgstr "æ¯æ ¼ç¬”æ•°"
-
-#: html/Search/Elements/DisplayOptions:93
-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 æœåŠ¡å™¨"
-
-#: NOT FOUND IN SOURCE
-msgid "Sat"
-msgstr "星期六"
-
-#: lib/RT/Date.pm:422
-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
-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
-msgid "Save Changes"
-msgstr "储存更改"
-
-#: html/User/Prefs.html:181
-msgid "Save Preferences"
-msgstr "储存å好"
-
-#: html/Ticket/Elements/PreviewScrips:131
-msgid "Save changes"
-msgstr "储存更改"
-
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
-msgstr "æˆåŠŸå‚¨å­˜æŸ¥è¯¢ï¼š%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Saved searches"
-msgstr "预存查询"
-
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($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:203
-msgid "Scrip Created"
-msgstr "手续新增完毕"
-
-#: html/Admin/Elements/EditScrip:52
-msgid "Scrip Fields"
-msgstr "手续字段"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrip Name"
-msgstr "讯æ¯å称"
-
-#: html/Admin/Elements/EditScrips:109
-msgid "Scrip deleted"
-msgstr "手续删除完毕"
-
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
-msgid "Scrips"
-msgstr "手续"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrips "
-msgstr "讯æ¯é€šçŸ¥"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrips for %1\\n"
-msgstr "%1 的手续\\n"
-
-#: html/Admin/Queues/Scrips.html:55
-msgid "Scrips which apply to all queues"
-msgstr "适用于所有表å•çš„手续"
-
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
-msgid "Search"
-msgstr "查询"
-
-#: NOT FOUND IN SOURCE
-msgid "Search Criteria"
-msgstr "查询æ¡ä»¶"
-
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
-msgid "Search Preferences"
-msgstr "æœå¯»å好"
-
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr "æœå¯»å±žæ€§åŠ è½½å¤±è´¥"
-
-#: html/Approvals/Elements/PendingMyApproval:59
-msgid "Search for approvals"
-msgstr "签核å•æŸ¥è¯¢"
-
-#: html/Search/Simple.html:67
-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>ç¼–å·</strong>ã€<strong>表å•å称</strong>ã€æ‰¿åŠžäººçš„<strong>使用者å称</strong>ã€æˆ–申请人的<strong>电å­é‚®ä»¶åœ°å€</strong>。以上格å¼ä¹‹å¤–的文字,则会在申请å•å†…æ–‡åŠé™„件内检索。"
-
-#: html/User/Elements/Tabs:62
-msgid "Search options"
-msgstr "æœå¯»é€‰é¡¹"
-
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
-msgid "Search results grouped by %1"
-msgstr "æœå¯»ç»“æžœï¼Œä¾ %1 分组"
-
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
-msgstr "更新查询:%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Searches can't be associated with that kind of object"
-msgstr "ä¸èƒ½å¯¹æ­¤ç±»å¯¹è±¡è¿›è¡ŒæŸ¥è¯¢"
-
-#: html/Search/Simple.html:57
-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 "二阶主管员工"
-
-#: bin/rt-crontool:265
-msgid "Security:"
-msgstr "安全性:"
-
-#: html/Elements/ShowCustomFields:98
-msgid "See also:"
-msgstr "å‚è§ï¼š"
-
-#: lib/RT/CustomField_Overlay.pm:105
-msgid "See custom fields"
-msgstr "查阅自订字段"
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "See exact outgoing email messages and their recipeients"
-msgstr "查阅é€å‡ºçš„电å­é‚®ä»¶åŠæ”¶ä»¶äºº"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "See ticket private commentary"
-msgstr "查阅申请å•å†…çš„ç§äººè¯„论"
-
-#: lib/RT/Queue_Overlay.pm:103
-msgid "See ticket summaries"
-msgstr "查阅申请å•æ€»è§ˆ"
-
-#: lib/RT/CustomField_Overlay.pm:105
-msgid "SeeCustomField"
-msgstr "查阅自订字段"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "SeeGroup"
-msgstr "查阅群组"
-
-#: lib/RT/Queue_Overlay.pm:91
-msgid "SeeQueue"
-msgstr "查阅表å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Select"
-msgstr "选择"
-
-#: NOT FOUND IN SOURCE
-msgid "Select All"
-msgstr "全选"
-
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
-msgid "Select a Custom Field"
-msgstr "选择自订字段"
-
-#: html/Admin/Groups/index.html:78
-msgid "Select a group"
-msgstr "选择群组"
-
-#: html/Admin/Queues/index.html:54
-msgid "Select a queue"
-msgstr "选择表å•"
-
-#: html/SelfService/CreateTicketInQueue.html:48
-msgid "Select a queue for your new ticket"
-msgstr "为您新的申请å•é€‰æ‹©ä¸€ä¸ªè¡¨å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Select a queue to link to"
-msgstr "请选择欲连结表å•"
-
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
-msgid "Select a user"
-msgstr "选择使用者"
-
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
-msgstr "选择自订字段"
-
-#: html/Admin/Global/CustomFields/index.html:70
-msgid "Select custom fields for all user groups"
-msgstr "选择适用于所有使用者群组的自订字段"
-
-#: html/Admin/Global/CustomFields/index.html:65
-msgid "Select custom fields for all users"
-msgstr "选择适用于所有使用者的自订字段"
-
-#: html/Admin/Global/CustomFields/index.html:76
-msgid "Select custom fields for tickets in all queues"
-msgstr "选择适用于所有表å•å†…申请å•çš„自订字段"
-
-#: html/Admin/Global/CustomFields/index.html:83
-msgid "Select custom fields for transactions on tickets in all queues"
-msgstr "选择适用于所有表å•å†…申请å•ä¹‹æ›´åŠ¨çš„自订字段"
-
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
-msgid "Select group"
-msgstr "选择群组"
-
-#: lib/RT/CustomField_Overlay.pm:59
-msgid "Select multiple values"
-msgstr "选择多é‡é¡¹ç›®"
-
-#: lib/RT/CustomField_Overlay.pm:60
-msgid "Select one value"
-msgstr "选择å•ä¸€é¡¹ç›®"
-
-#: html/Admin/Elements/QueueTabs:92
-msgid "Select queue"
-msgstr "选择表å•"
-
-#: html/Prefs/Quicksearch.html:53
-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
-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
-msgid "Select template"
-msgstr "选择模æ¿"
-
-#: lib/RT/CustomField_Overlay.pm:61
-msgid "Select up to %1 values"
-msgstr "选择最多 %1 个值"
-
-#: html/Admin/Elements/UserTabs:78
-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 "å•ä¸€é€‰é¡¹"
-
-#: html/Admin/Elements/EditCustomFields:58
-msgid "Selected Custom Fields"
-msgstr "已选å–的自订字段"
-
-#: html/Admin/CustomFields/Objects.html:59
-msgid "Selected objects"
-msgstr "已选å–的对象"
-
-#: NOT FOUND IN SOURCE
-msgid "Selected users:"
-msgstr "已选å–的使用者:"
-
-#: html/Widgets/SelectionBox:209
-msgid "Selections modified. Please save your changes"
-msgstr "选å–的项目已更改。请储存您的更动"
-
-#: NOT FOUND IN SOURCE
-msgid "Self Service"
-msgstr "自助æœåŠ¡"
-
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
-msgstr "寄信给所有视察员"
-
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
-msgstr "以评论方å¼å¯„信给所有视察员"
-
-#: etc/initialdata:112
-msgid "Send mail to requestors and Ccs"
-msgstr "寄信给申请人åŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:107
-msgid "Send mail to requestors and Ccs as a comment"
-msgstr "以评论方å¼å¯„信给申请人åŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:78
-msgid "Sends a message to the requestors"
-msgstr "寄信给申请人"
-
-#: etc/initialdata:125 etc/initialdata:129
-msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr "寄信给特定的副本åŠå¯†ä»¶å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
-msgid "Sends mail to the Ccs"
-msgstr "寄信给副本收件人"
-
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
-msgid "Sends mail to the Ccs as a comment"
-msgstr "以评论方å¼å¯„信给副本收件人"
-
-#: etc/initialdata:102
-msgid "Sends mail to the administrative Ccs"
-msgstr "寄信给管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:98
-msgid "Sends mail to the administrative Ccs as a comment"
-msgstr "以评论寄信给管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:82 etc/initialdata:86
-msgid "Sends mail to the owner"
-msgstr "寄信给申请人"
-
-#: NOT FOUND IN SOURCE
-msgid "Sep"
-msgstr "ä¹æœˆ"
-
-#: lib/RT/Date.pm:449
-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"
-
-#: NOT FOUND IN SOURCE
-msgid "Shift Type"
-msgstr "ç­åˆ«å±žæ€§"
-
-#: html/Ticket/Elements/ShowTransaction:158
-msgid "Show"
-msgstr "显示"
-
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
-msgstr "显示待签核申请å•"
-
-#: html/Search/Elements/EditFormat:56
-msgid "Show Columns"
-msgstr "显示字段"
-
-#: html/Ticket/Elements/Tabs:220
-msgid "Show Results"
-msgstr "显示结果"
-
-#: html/Approvals/Elements/PendingMyApproval:64
-msgid "Show approved requests"
-msgstr "显示已批准的签核å•"
-
-#: html/Ticket/Create.html:316
-msgid "Show basics"
-msgstr "显示基本信æ¯"
-
-#: html/Approvals/Elements/PendingMyApproval:65
-msgid "Show denied requests"
-msgstr "显示已驳回的签核å•"
-
-#: html/Ticket/Create.html:319
-msgid "Show details"
-msgstr "显示细节"
-
-#: html/Approvals/Elements/PendingMyApproval:63
-msgid "Show pending requests"
-msgstr "显示待处ç†çš„签核å•"
-
-#: html/Approvals/Elements/PendingMyApproval:66
-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
-msgid "ShowConfigTab"
-msgstr "显示设定页签"
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "ShowOutgoingEmail"
-msgstr "显示寄é€é‚®ä»¶"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "ShowSavedSearches"
-msgstr "显示预存查询"
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "ShowScrips"
-msgstr "显示手续"
-
-#: lib/RT/Queue_Overlay.pm:99
-msgid "ShowTemplate"
-msgstr "显示模æ¿"
-
-#: lib/RT/Queue_Overlay.pm:103
-msgid "ShowTicket"
-msgstr "显示申请å•"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "ShowTicketComments"
-msgstr "显示申请å•çš„评论"
-
-#: lib/RT/Queue_Overlay.pm:107
-msgid "Sign up as a ticket Requestor or ticket or queue Cc"
-msgstr "登记æˆä¸ºç”³è¯·äººæˆ–副本收件人"
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "Sign up as a ticket or queue AdminCc"
-msgstr "登记æˆä¸ºç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
-msgid "Signature"
-msgstr "ç­¾åæ¡£"
-
-#: NOT FOUND IN SOURCE
-msgid "Signed in as %1"
-msgstr "使用者:%1"
-
-#: html/Elements/Tabs:68
-msgid "Simple Search"
-msgstr "简易查询"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:47
-msgid "Single"
-msgstr "å•ä¸€"
-
-#: html/Search/Elements/EditFormat:75
-msgid "Size"
-msgstr "大å°"
-
-#: html/Elements/Header:89
-msgid "Skip Menu"
-msgstr "略过选å•"
-
-#: html/Search/Elements/EditFormat:78
-msgid "Small"
-msgstr "å°"
-
-#: html/Admin/CustomFields/Modify.html:120
-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
-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 "排åºé¡ºåº"
-
-#: html/Admin/Elements/EditScrip:78
-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 "首页"
-
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
-msgid "Started"
-msgstr "实际起始日"
-
-#: NOT FOUND IN SOURCE
-msgid "Started date '%1' could not be parsed"
-msgstr "无法解读起始日期 '%1"
-
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
-msgid "Starts"
-msgstr "应起始日"
-
-msgid "StartsRelative"
-msgstr "应起始日(相对值)"
-
-msgid "StartedRelative"
-msgstr "实际起始日(相对值)"
-
-msgid "CreatedRelative"
-msgstr "实际新增日(相对值)"
-
-msgid "LastUpdatedRelative"
-msgstr "上次更新(相对值)"
-
-msgid "ToldRelative"
-msgstr "告知日(相对值)"
-
-msgid "DueRelative"
-msgstr "到期日(相对值)"
-
-msgid "ResolvedRelative"
-msgstr "解决日(相对值)"
-
-msgid "ReferredToBy"
-msgstr "被å‚考"
-
-msgid "DependedOnBy"
-msgstr "å¯æŽ¥ç»­å¤„ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Starts By"
-msgstr "应起始日"
-
-#: NOT FOUND IN SOURCE
-msgid "Starts date '%1' could not be parsed"
-msgstr "无法解读起始日期 '%1"
-
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
-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
-msgid "Status"
-msgstr "现况"
-
-msgid "ExtendedStatus"
-msgstr "é¢å¤–现况"
-
-#: etc/initialdata:309
-msgid "Status Change"
-msgstr "现况改å˜æ—¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Status changed from %1 to %2"
-msgstr "现况从 %1 改为 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "StatusChange"
-msgstr "现况改å˜æ—¶"
-
-#: html/Ticket/Elements/Tabs:178
-msgid "Steal"
-msgstr "强制更æ¢æ‰¿åŠžäºº"
-
-#: lib/RT/Queue_Overlay.pm:117
-msgid "Steal tickets"
-msgstr "强制承办申请å•"
-
-#: lib/RT/Queue_Overlay.pm:117
-msgid "StealTicket"
-msgstr "强制承办申请å•"
-
-#: lib/RT/Transaction_Overlay.pm:678
-#. ($Old->Name)
-msgid "Stolen from %1"
-msgstr "承办人从 %1 强制更æ¢"
-
-#: NOT FOUND IN SOURCE
-msgid "Stolen from %1 "
-msgstr "承办人从 %1 å¼ºåˆ¶æ›´æ¢ "
-
-#: html/Search/Elements/EditFormat:81
-msgid "Style"
-msgstr "æ ·å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Subgroup"
-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
-msgid "Subject"
-msgstr "主题"
-
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
-#. ($self->Data)
-msgid "Subject changed to %1"
-msgstr "标题已改为 %1"
-
-#: html/Elements/Submit:75
-msgid "Submit"
-msgstr "é€å‡º"
-
-#: NOT FOUND IN SOURCE
-msgid "Submit Workflow"
-msgstr "é€å‡ºæµç¨‹"
-
-#: lib/RT/Group_Overlay.pm:774
-msgid "Succeeded"
-msgstr "设定æˆåŠŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Sun"
-msgstr "星期日"
-
-#: lib/RT/Date.pm:423
-msgid "Sun."
-msgstr "星期日"
-
-#: lib/RT/System.pm:75
-msgid "SuperUser"
-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 人事系统数æ®ã€‚请ç¨å¾…..."
-
-#: html/User/Elements/DelegateRights:98
-msgid "System"
-msgstr "系统"
-
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
-msgid "System Configuration"
-msgstr "系统设定"
-
-#: NOT FOUND IN SOURCE
-msgid "System Defined"
-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 "系统错误"
-
-#: 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:224 lib/RT/Transaction_Overlay.pm:230
-#. ($msg)
-msgid "System Error: %1"
-msgstr "系统错误:%1"
-
-#: NOT FOUND IN SOURCE
-msgid "System Rights"
-msgstr "系统æƒé™"
-
-#: html/Admin/Tools/index.html:47
-msgid "System Tools"
-msgstr "系统工具"
-
-#: lib/RT/ACE_Overlay.pm:633
-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
-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
-msgid "System groups"
-msgstr "系统群组"
-
-#: NOT FOUND IN SOURCE
-msgid "SystemInternal"
-msgstr "系统内部用"
-
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
-msgstr "内部使用的系统角色群组"
-
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
-msgstr "TEST_STRING"
-
-#: NOT FOUND IN SOURCE
-msgid "TabbedUI"
-msgstr "页签接å£"
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
-msgid "Take"
-msgstr "å—ç†"
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "Take tickets"
-msgstr "自行承办申请å•"
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "TakeTicket"
-msgstr "自行承办申请å•"
-
-#: lib/RT/Transaction_Overlay.pm:663
-msgid "Taken"
-msgstr "å·²å—ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Task"
-msgstr "工作事项"
-
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
-msgid "Template"
-msgstr "模æ¿"
-
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
-#. ($TemplateObj->Id())
-msgid "Template #%1"
-msgstr "æ¨¡æ¿ #%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Template Content"
-msgstr "通知模æ¿å†…容"
-
-#: NOT FOUND IN SOURCE
-msgid "Template Description"
-msgstr "通知模æ¿æè¿°"
-
-#: NOT FOUND IN SOURCE
-msgid "Template Name"
-msgstr "通知模æ¿å称"
-
-#: html/Admin/Elements/EditTemplates:110
-msgid "Template deleted"
-msgstr "模æ¿å·²åˆ é™¤"
-
-#: lib/RT/Scrip_Overlay.pm:176
-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
-msgid "Template parsed"
-msgstr "模æ¿å‰–æžå®Œæ¯•"
-
-#: lib/RT/Template_Overlay.pm:391
-msgid "Template parsing error"
-msgstr "模æ¿å‰–æžé”™è¯¯"
-
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
-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 "文字"
-
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
-msgid "That is already the current value"
-msgstr "å·²ç»æ˜¯ç›®å‰å­—段的值"
-
-#: lib/RT/CustomField_Overlay.pm:412
-msgid "That is not a value for this custom field"
-msgstr "è¿™ä¸æ˜¯è¯¥è‡ªè®¢å­—段的值"
-
-#: lib/RT/Ticket_Overlay.pm:1994
-msgid "That is the same value"
-msgstr "åŒæ ·çš„值"
-
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
-msgid "That principal already has that right"
-msgstr "这项å•ä½å·²ç»æ‹¥æœ‰è¯¥æƒé™"
-
-#: lib/RT/Queue_Overlay.pm:753
-#. ($args{'Type'})
-msgid "That principal is already a %1 for this queue"
-msgstr "这项å•ä½å·²ç»æ˜¯è¿™ä¸ªè¡¨å•çš„ %1"
-
-#: lib/RT/Ticket_Overlay.pm:1435
-#. ($self->loc($args{'Type'}))
-msgid "That principal is already a %1 for this ticket"
-msgstr "这项å•ä½å·²ç»æ˜¯è¿™ä»½ç”³è¯·å•çš„ %1"
-
-#: lib/RT/Queue_Overlay.pm:852
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this queue"
-msgstr "这项å•ä½ä¸æ˜¯è¿™ä¸ªè¡¨å•çš„ %1"
-
-#: NOT FOUND IN SOURCE
-msgid "That principal is not a %1 for this ticket"
-msgstr "这项å•ä½ä¸æ˜¯è¿™ä»½ç”³è¯·å•çš„ %1"
-
-#: lib/RT/Ticket_Overlay.pm:1990
-msgid "That queue does not exist"
-msgstr "此表å•ä¸å­˜åœ¨"
-
-#: lib/RT/Ticket_Overlay.pm:3233
-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
-msgid "That user already owns that ticket"
-msgstr "该使用者已ç»æ‰¿åŠžè¿™ä»½ç”³è¯·å•"
-
-#: lib/RT/Ticket_Overlay.pm:3012
-msgid "That user does not exist"
-msgstr "使用者ä¸å­˜åœ¨"
-
-#: lib/RT/User_Overlay.pm:389
-msgid "That user is already privileged"
-msgstr "è¿™å使用者已ç»æ˜¯å†…部æˆå‘˜"
-
-#: lib/RT/User_Overlay.pm:410
-msgid "That user is already unprivileged"
-msgstr "è¿™å使用者属于éžå†…部æˆå‘˜ç¾¤ç»„"
-
-#: lib/RT/User_Overlay.pm:402
-msgid "That user is now privileged"
-msgstr "使用者加入内部æˆå‘˜ç¾¤ç»„完毕"
-
-#: lib/RT/User_Overlay.pm:423
-msgid "That user is now unprivileged"
-msgstr "è¿™å使用者已加入éžå†…部æˆå‘˜ç¾¤ç»„"
-
-#: NOT FOUND IN SOURCE
-msgid "That user is now unprivilegedileged"
-msgstr "è¿™å使用者已加入éžå†…部æˆå‘˜ç¾¤ç»„"
-
-#: lib/RT/Ticket_Overlay.pm:3031
-msgid "That user may not own tickets in that queue"
-msgstr "使用者å¯èƒ½æ²¡æœ‰æ‰¿åŠžè¡¨å•é‡Œçš„申请å•"
-
-#: lib/RT/Link_Overlay.pm:233
-msgid "That's not a numerical id"
-msgstr "è¿™ä¸æ˜¯ä¸€ä¸ªæ•°å­—ç¼–å·"
-
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
-msgid "The Basics"
-msgstr "基本信æ¯"
-
-#: lib/RT/ACE_Overlay.pm:112
-msgid "The CC of a ticket"
-msgstr "申请å•çš„副本收件人"
-
-#: lib/RT/ACE_Overlay.pm:113
-msgid "The administrative CC of a ticket"
-msgstr "申请å•çš„管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: NOT FOUND IN SOURCE
-msgid "The comment has been recorded"
-msgstr "评论已被纪录"
-
-#: bin/rt-crontool:275
-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"
-
-#: lib/RT/Record.pm:948
-msgid "The new value has been set."
-msgstr "新的字段值设定完æˆã€‚"
-
-#: lib/RT/ACE_Overlay.pm:110
-msgid "The owner of a ticket"
-msgstr "申请å•çš„承办人"
-
-#: lib/RT/ACE_Overlay.pm:111
-msgid "The requestor of a ticket"
-msgstr "申请å•çš„申请人"
-
-#: html/Admin/Elements/EditUserComments:47
-msgid "These comments aren't generally visible to the user"
-msgstr "该使用者ä¸ä¼šçœ‹è§è¿™äº›è¯„论"
-
-#: NOT FOUND IN SOURCE
-msgid "Third-"
-msgstr "三"
-
-#: lib/RT/CustomField_Overlay.pm:978
-msgid "This custom field does not apply to that object"
-msgstr "此自订字段ä¸é€‚用于该对象"
-
-#: html/Admin/Tools/Configuration.html:50
-msgid "This feature is only available to system administrators"
-msgstr "此项功能仅é™ç³»ç»Ÿç®¡ç†å‘˜ä½¿ç”¨"
-
-#: html/Ticket/Elements/PreviewScrips:96
-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
-msgid "This tool allows the user to run arbitrary perl modules from within RT."
-msgstr "此工具程åºä¼šè®©ä½¿ç”¨è€…ç»ç”± RT 执行任æ„命令。"
-
-#: lib/RT/Transaction_Overlay.pm:301
-msgid "This transaction appears to have no content"
-msgstr "此项更动报告没有内容"
-
-#: html/Ticket/Elements/ShowRequestor:70
-#. ($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 份优先处ç†ç”³è¯·å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Thu"
-msgstr "星期四"
-
-#: lib/RT/Date.pm:420
-msgid "Thu."
-msgstr "星期四"
-
-#: NOT FOUND IN SOURCE
-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
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket #%1 Jumbo update: %2"
-msgstr "æ›´æ–°ç”³è¯·å• #%1 的全部信æ¯ï¼š%2"
-
-#: html/Approvals/Elements/ShowDependency:67
-#. ($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
-#. ($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
-#. ($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
-#. ($Ticket->Id, $_)
-msgid "Ticket %1: %2"
-msgstr "ç”³è¯·å• %1:%2"
-
-#: html/Admin/Elements/QueueTabs:74
-msgid "Ticket Custom Fields"
-msgstr "申请å•çš„自订字段"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket Due"
-msgstr "表å•å¤„ç†æœŸé™"
-
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
-#. ($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:324
-msgid "Ticket Resolved"
-msgstr "申请å•å·²è§£å†³"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
-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:1920
-msgid "Ticket content"
-msgstr "申请å•å†…容"
-
-#: lib/RT/Tickets_Overlay.pm:1969
-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
-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 "找ä¸åˆ°ç”³è¯·å•ç¼–å·"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket killed"
-msgstr "申请å•åˆ é™¤å®Œæ¯•"
-
-#: html/Ticket/Display.html:55
-msgid "Ticket metadata"
-msgstr "申请å•çš„æè¿°ä¿¡æ¯"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket not found"
-msgstr "找ä¸åˆ°ç”³è¯·å•"
-
-#: etc/initialdata:310
-msgid "Ticket status changed"
-msgstr "申请å•çŽ°å†µå·²æ”¹å˜"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket watchers"
-msgstr "申请å•è§†å¯Ÿå‘˜"
-
-#: lib/RT/Search/FromSQL.pm:82
-#. (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
-msgid "Tickets"
-msgstr "申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets %1 %2"
-msgstr "ç”³è¯·å• %1 %2"
-
-#: NOT FOUND IN SOURCE
-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 "é€å‡ºçš„申请å•"
-
-msgid "CreatedBy"
-msgstr "建立人"
-
-#: html/Tools/Reports/CreatedByDates.html:86
-msgid "Tickets created after"
-msgstr "申请å•å»ºç«‹èµ·å§‹æ—¥"
-
-#: html/Tools/Reports/CreatedByDates.html:88
-msgid "Tickets created before"
-msgstr "申请å•å»ºç«‹æˆªæ­¢æ—¥"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets from %1"
-msgstr "%1 的申请å•"
-
-#: html/Tools/Reports/ResolvedByDates.html:87
-msgid "Tickets resolved after"
-msgstr "申请å•è§£å†³èµ·å§‹æ—¥"
-
-#: html/Tools/Reports/ResolvedByDates.html:89
-msgid "Tickets resolved before"
-msgstr "申请å•è§£å†³æˆªæ­¢æ—¥"
-
-#: html/Approvals/Elements/ShowDependency:48
-msgid "Tickets which depend on this approval:"
-msgstr "批准之åŽï¼Œå¯æŽ¥ç»­å¤„ç†ï¼š"
-
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
-msgid "Time Estimated"
-msgstr "预计时间"
-
-msgid "TimeEstimated"
-msgstr "预计时间"
-
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
-msgid "Time Left"
-msgstr "剩馀时间"
-
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
-msgid "Time Worked"
-msgstr "处ç†æ—¶é—´"
-
-#: lib/RT/Tickets_Overlay.pm:1891
-msgid "Time left"
-msgstr "剩馀时间"
-
-#: html/Elements/Footer:51
-msgid "Time to display"
-msgstr "显示时间"
-
-#: lib/RT/Tickets_Overlay.pm:1866
-msgid "Time worked"
-msgstr "已处ç†æ—¶é—´"
-
-#: NOT FOUND IN SOURCE
-msgid "TimeLeft"
-msgstr "剩馀时间"
-
-#: lib/RT/Ticket_Overlay.pm:1167
-msgid "TimeWorked"
-msgstr "已处ç†æ—¶é—´"
-
-#: html/Search/Elements/EditFormat:74
-msgid "Title"
-msgstr "标题"
-
-msgid "QueueName"
-msgstr "表å•å称"
-
-msgid "OwnerName"
-msgstr "承办人å称"
-
-msgid "<blank>"
-msgstr "<留空>"
-
-msgid "NEWLINE"
-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"
-
-#: html/Elements/Footer:62
-#. ('<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/Ticket_Overlay.pm:1170
-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
-msgid "Tools"
-msgstr "工具"
-
-#: html/Search/Elements/Chart:130
-msgid "Total"
-msgstr "页"
-
-#: etc/initialdata:252
-msgid "Transaction"
-msgstr "更动"
-
-#: lib/RT/Transaction_Overlay.pm:805
-#. ($self->Data)
-msgid "Transaction %1 purged"
-msgstr "清除更动报告 %1"
-
-#: lib/RT/Transaction_Overlay.pm:183
-msgid "Transaction Created"
-msgstr "更动报告已新增"
-
-#: html/Admin/Elements/QueueTabs:78
-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
-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/Transaction_Overlay.pm:870
-msgid "Transactions are immutable"
-msgstr "ä¸å¯æ›´æ”¹æ›´åŠ¨æŠ¥å‘Š"
-
-#: NOT FOUND IN SOURCE
-msgid "Transfer to"
-msgstr "移交给"
-
-#: NOT FOUND IN SOURCE
-msgid "Trying to delete a right: %1"
-msgstr "试图删除æŸé¡¹æƒé™ï¼š%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Tue"
-msgstr "星期二"
-
-#: lib/RT/Date.pm:418
-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
-msgid "Type"
-msgstr "类别"
-
-#: lib/RT/ScripCondition_Overlay.pm:128
-msgid "Unimplemented"
-msgstr "尚无实作"
-
-#: html/Admin/Users/Modify.html:89
-msgid "Unix login"
-msgstr "外部系统登入å¸å·"
-
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "外部系统登入å¸å·"
-
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
-#. ($self->ContentEncoding)
-#. ($ContentEncoding)
-msgid "Unknown ContentEncoding %1"
-msgstr "ä¸å¯è§£çš„内容文字编ç æ–¹å¼ %1"
-
-#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410
-msgid "Unknown field: %1"
-msgstr "未知的字段:%1"
-
-#: html/Elements/SelectResultsPerPage:58
-msgid "Unlimited"
-msgstr "全数显示"
-
-#: html/Search/Elements/SelectSearchesForObjects:64
-msgid "Unnamed search"
-msgstr "未命å的查询"
-
-#: etc/initialdata:32
-msgid "Unprivileged"
-msgstr "éžå†…部æˆå‘˜"
-
-#: html/Admin/Elements/EditCustomFields:60
-msgid "Unselected Custom Fields"
-msgstr "未选å–的自订字段"
-
-#: html/Admin/CustomFields/Objects.html:61
-msgid "Unselected objects"
-msgstr "未选å–的对象"
-
-#: lib/RT/Transaction_Overlay.pm:659
-msgid "Untaken"
-msgstr "未被å—ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Untitled search"
-msgstr "未命å的查询"
-
-#: NOT FOUND IN SOURCE
-msgid "Up"
-msgstr "上一页"
-
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
-msgid "Update"
-msgstr "处ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Update All"
-msgstr "全部更新"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "æ›´æ–°ç¼–å·"
-
-#: html/Ticket/Update.html:135
-msgid "Update Ticket"
-msgstr "更新申请å•"
-
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
-msgid "Update Type"
-msgstr "更新类别"
-
-#: NOT FOUND IN SOURCE
-msgid "Update all these tickets at once"
-msgstr "整批更新申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Update email"
-msgstr "更新电å­é‚®ä»¶ä¿¡ç®±"
-
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
-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
-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
-msgid "Update ticket"
-msgstr "更新申请å•"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ticket # %1"
-msgstr "æ›´æ–°ç”³è¯·å• # %1"
-
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
-#. ($Ticket->id)
-msgid "Update ticket #%1"
-msgstr "æ›´æ–°ç”³è¯·å• #%1"
-
-#: html/Ticket/Update.html:158
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Update ticket #%1 (%2)"
-msgstr "æ›´æ–°ç”³è¯·å• #%1 (%2)"
-
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
-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
-msgid "Updated"
-msgstr "å‰æ¬¡æ›´æ–°"
-
-#: html/Tools/Offline.html:93
-msgid "Upload"
-msgstr "上载"
-
-#: lib/RT/CustomField_Overlay.pm:84
-msgid "Upload multiple files"
-msgstr "上载多个档案"
-
-#: lib/RT/CustomField_Overlay.pm:79
-msgid "Upload multiple images"
-msgstr "上载多份图片"
-
-#: lib/RT/CustomField_Overlay.pm:85
-msgid "Upload one file"
-msgstr "上载一个档案"
-
-#: lib/RT/CustomField_Overlay.pm:80
-msgid "Upload one image"
-msgstr "上载一份图片"
-
-#: lib/RT/CustomField_Overlay.pm:86
-msgid "Upload up to %1 files"
-msgstr "上载最多 %1 个档案"
-
-#: lib/RT/CustomField_Overlay.pm:81
-msgid "Upload up to %1 images"
-msgstr "上载最多 %1 份图片"
-
-#: html/Tools/Offline.html:93
-msgid "Upload your changes"
-msgstr "上载您的更动"
-
-#: html/Admin/index.html:90
-msgid "Use other RT administrative tools"
-msgstr "使用其它的 RT 管ç†å·¥å…·"
-
-#: NOT FOUND IN SOURCE
-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:506
-#. ($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"
-
-#: etc/initialdata:132 etc/initialdata:206
-msgid "User Defined"
-msgstr "使用者自订"
-
-#: html/Admin/Elements/EditScrip:93
-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 "员工编å·"
-
-#: 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
-msgid "User Rights"
-msgstr "使用者æƒé™"
-
-#: NOT FOUND IN SOURCE
-msgid "User Setup"
-msgstr "使用者设定"
-
-#: NOT FOUND IN SOURCE
-msgid "User Shift"
-msgstr "员工ç­åˆ«"
-
-#: NOT FOUND IN SOURCE
-msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
-msgstr "使用者试图在 %2 对象 #%3 的自订字段 %1 上执行未知的更新æ“作"
-
-#: html/Admin/Users/Modify.html:301
-#. ($msg)
-msgid "User could not be created: %1"
-msgstr "无法新增使用者:%1"
-
-#: lib/RT/User_Overlay.pm:330
-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) 新增完毕"
-
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
-msgid "User defined groups"
-msgstr "使用者定义的群组"
-
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
-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 "使用者ç§äººæ•°æ®"
-
-#: html/Admin/Groups/index.html:103
-msgid "User-defined groups"
-msgstr "使用者自定群组"
-
-#: NOT FOUND IN SOURCE
-msgid "UserDefined"
-msgstr "使用者自定"
-
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
-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
-msgid "Users"
-msgstr "使用者"
-
-#: html/Admin/Users/index.html:85
-msgid "Users matching search criteria"
-msgstr "符åˆæŸ¥è¯¢æ¡ä»¶çš„使用者"
-
-#: bin/rt-crontool:134
-#. ($transaction->id)
-msgid "Using transaction #%1..."
-msgstr "使用更动 #%1..."
-
-#: lib/RT/Tickets_Overlay_SQL.pm:528
-msgid "Valid Query"
-msgstr "åˆç†çš„查询"
-
-#: html/Admin/CustomFields/Modify.html:80
-msgid "Validation"
-msgstr "验è¯"
-
-#: NOT FOUND IN SOURCE
-msgid "ValueOfQueue"
-msgstr "选择表å•"
-
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
-msgid "Values"
-msgstr "字段值"
-
-#: NOT FOUND IN SOURCE
-msgid "View log"
-msgstr "检视纪录档"
-
-#: lib/RT/Queue_Overlay.pm:107
-msgid "Watch"
-msgstr "视察"
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "WatchAsAdminCc"
-msgstr "以管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è§†å¯Ÿ"
-
-#: NOT FOUND IN SOURCE
-msgid "Watcher loaded"
-msgstr "æˆåŠŸåŠ è½½è§†å¯Ÿå‘˜ä¿¡æ¯"
-
-#: html/Admin/Elements/QueueTabs:63
-msgid "Watchers"
-msgstr "视察员"
-
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "网页文字编ç æ–¹å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Wed"
-msgstr "星期三"
-
-#: lib/RT/Date.pm:419
-msgid "Wed."
-msgstr "星期三"
-
-#: html/Tools/MyDay.html:75
-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 "当申请å•é€šè¿‡æ‰€æœ‰ç­¾æ ¸åŽï¼Œå°†æ­¤è®¯æ¯å›žå¤åˆ°åŽŸç”³è¯·å•"
-
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "当申请å•é€šè¿‡æŸé¡¹ç­¾æ ¸åŽï¼Œå°†æ­¤è®¯æ¯å›žå¤åˆ°åŽŸç”³è¯·å•"
-
-#: etc/initialdata:146
-msgid "When a ticket is created"
-msgstr "新增申请å•æ—¶"
-
-#: etc/initialdata:418
-msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
-msgstr "签核å•æ–°å¢žä¹‹åŽï¼Œé€šçŸ¥åº”å—ç†çš„承办人åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:151
-msgid "When anything happens"
-msgstr "当任何事情å‘生时"
-
-#: etc/initialdata:199
-msgid "Whenever a ticket is resolved"
-msgstr "当申请å•è§£å†³æ—¶"
-
-#: etc/initialdata:185
-msgid "Whenever a ticket's owner changes"
-msgstr "当申请å•æ›´æ¢æ‰¿åŠžäººæ—¶"
-
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
-msgid "Whenever a ticket's priority changes"
-msgstr "当申请å•çš„优先顺åºæ”¹å˜æ—¶"
-
-#: etc/initialdata:193
-msgid "Whenever a ticket's queue changes"
-msgstr "当申请å•æ›´æ¢è¡¨å•æ—¶"
-
-#: etc/initialdata:170
-msgid "Whenever a ticket's status changes"
-msgstr "当申请å•æ›´æ–°çŽ°å†µæ—¶"
-
-#: etc/initialdata:207
-msgid "Whenever a user-defined condition occurs"
-msgstr "当使用者自订的情况å‘生时"
-
-#: etc/initialdata:164
-msgid "Whenever comments come in"
-msgstr "当评论é€è¾¾æ—¶"
-
-#: etc/initialdata:157
-msgid "Whenever correspondence comes in"
-msgstr "当回å¤é€è¾¾æ—¶"
-
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "å…¬å¸"
-
-#: html/Search/Results.html:82
-msgid "Work offline"
-msgstr "离线工作"
-
-#: NOT FOUND IN SOURCE
-msgid "WorkPhone"
-msgstr "å…¬å¸ç”µè¯"
-
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
-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 您是未ç»æŽˆæƒçš„使用者"
-
-#: NOT FOUND IN SOURCE
-msgid "Yes"
-msgstr "是"
-
-#: lib/RT/Ticket_Overlay.pm:3140
-msgid "You already own this ticket"
-msgstr "您已是这份申请å•çš„承办人"
-
-#: html/autohandler:214 html/autohandler:222
-msgid "You are not an authorized user"
-msgstr "您ä¸æ˜¯è¢«æŽˆæƒçš„使用者"
-
-#: NOT FOUND IN SOURCE
-msgid "You can access it with the Download button on the right."
-msgstr "您å¯ä»¥æŒ‰å³æ–¹çš„‘下载’键æ¥å–得。"
-
-#: html/Prefs/Search.html:56
-msgid "You can also edit the predefined search itself"
-msgstr "您也å¯ä»¥ç›´æŽ¥ç¼–辑预先定义的æœå¯»æ–¹å¼"
-
-#: lib/RT/Ticket_Overlay.pm:3025
-msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "祇能é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿åŠžæˆ–是没有承办人的申请å•"
-
-#: lib/RT/Ticket_Overlay.pm:3021
-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"
-
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
-#. ($num, $queue)
-msgid "You found %1 tickets in queue %2"
-msgstr "æ‚¨ä¼šåœ¨è¡¨å• %2 找到 %1 的申请å•"
-
-#: html/NoAuth/Logout.html:52
-msgid "You have been logged out of RT."
-msgstr "您已注销 RT。"
-
-#: html/SelfService/Display.html:133
-msgid "You have no permission to create tickets in that queue."
-msgstr "您没有在该表å•æ–°å¢žç”³è¯·å•çš„æƒé™ã€‚"
-
-#: lib/RT/Ticket_Overlay.pm:2003
-msgid "You may not create requests in that queue."
-msgstr "您ä¸èƒ½åœ¨è¯¥è¡¨å•ä¸­æ出申请。"
-
-#: NOT FOUND IN SOURCE
-msgid "You need to restart the Request Tracker service for saved changes to take effect."
-msgstr "您必须é‡æ–°æ¿€æ´» Request Tracker æœåŠ¡ï¼Œå‚¨å­˜çš„更动æ‰ä¼šç”Ÿæ•ˆã€‚"
-
-#: html/NoAuth/Logout.html:56
-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 寄出的邮件收件人标头档"
-
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr "申请å•å·²ç”± %1 批准。å¯èƒ½è¿˜æœ‰å…¶å®ƒå¾…签核的步骤。"
-
-#: etc/initialdata:540
-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 驳回。"
-
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "您的申请å•å·²è¢«é©³å›žã€‚"
-
-#: html/autohandler:251
-msgid "Your username or password is incorrect"
-msgstr "您的å¸å·æˆ–å£ä»¤æœ‰è¯¯"
-
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
-msgid "Zip"
-msgstr "邮政编ç "
-
-#: NOT FOUND IN SOURCE
-msgid "[no subject]"
-msgstr "[没有标题]"
-
-msgid "[none]"
-msgstr "[æ— ]"
-
-#: NOT FOUND IN SOURCE
-msgid "ago"
-msgstr "过期"
-
-#: NOT FOUND IN SOURCE
-msgid "alert"
-msgstr "急讯"
-
-#: lib/RT/System.pm:87
-msgid "allow creation of saved searches"
-msgstr "å…许建立预存查询"
-
-#: lib/RT/System.pm:86
-msgid "allow loading of saved searches"
-msgstr "å…许加载预存查询"
-
-#: NOT FOUND IN SOURCE
-msgid "approving"
-msgstr "待签核"
-
-#: html/User/Elements/DelegateRights:80
-#. ($right->PrincipalObj->Object->SelfDescription)
-msgid "as granted to %1"
-msgstr "æƒé™åŒ %1"
-
-#: html/Search/Results.html:83
-msgid "chart"
-msgstr "图表"
-
-#: html/SelfService/Closed.html:49
-msgid "closed"
-msgstr "已解决"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
-msgid "contains"
-msgstr "包å«"
-
-#: NOT FOUND IN SOURCE
-msgid "content"
-msgstr "内容"
-
-#: NOT FOUND IN SOURCE
-msgid "content-type"
-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 "严é‡"
-
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
-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 "已删除"
-
-#: html/Search/Elements/PickBasics:61
-msgid "does not match"
-msgstr "ä¸ç¬¦åˆ"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
-msgid "doesn't contain"
-msgstr "ä¸åŒ…å«"
-
-#: NOT FOUND IN SOURCE
-msgid "email address"
-msgstr "电å­é‚®ä»¶ä¿¡ç®±"
-
-#: NOT FOUND IN SOURCE
-msgid "emergency"
-msgstr "å±éš¾"
-
-#: html/Elements/SelectEqualityOperator:59
-msgid "equal to"
-msgstr "等于"
-
-#: NOT FOUND IN SOURCE
-msgid "error"
-msgstr "错误"
-
-#: html/Search/Build.html:547
-msgid "error: can't move down"
-msgstr "错误:无法下移"
-
-#: html/Search/Build.html:569
-msgid "error: can't move left"
-msgstr "错误:无法左移"
-
-#: html/Search/Build.html:528
-msgid "error: can't move up"
-msgstr "错误:无法上移"
-
-#: html/Search/Build.html:612
-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
-msgid "error: nothing to move"
-msgstr "错误:没有å¯ç§»åŠ¨çš„对象"
-
-#: html/Search/Build.html:630
-msgid "error: nothing to toggle"
-msgstr "错误:没有å¯åˆ‡æ¢çš„对象"
-
-#: NOT FOUND IN SOURCE
-msgid "false"
-msgstr "å‡"
-
-#: NOT FOUND IN SOURCE
-msgid "filename"
-msgstr "æ¡£å"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
-msgid "greater than"
-msgstr "大于"
-
-#: lib/RT/Group_Overlay.pm:214
-#. ($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
-msgid "hours"
-msgstr "å°æ—¶"
-
-#: html/Search/Elements/PickBasics:48
-msgid "id"
-msgstr "ç¼–å·"
-
-#: NOT FOUND IN SOURCE
-msgid "info"
-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
-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
-msgid "isn't"
-msgstr "ä¸æ˜¯"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
-msgid "less than"
-msgstr "å°äºŽ"
-
-#: NOT FOUND IN SOURCE
-msgid "level Admin"
-msgstr "层主管"
-
-#: html/Search/Elements/PickBasics:60
-msgid "matches"
-msgstr "符åˆ"
-
-#: lib/RT/Date.pm:338
-msgid "min"
-msgstr "分"
-
-#: NOT FOUND IN SOURCE
-msgid "minutes"
-msgstr "分钟"
-
-#: NOT FOUND IN SOURCE
-msgid "modifications\\n\\n"
-msgstr "更改\\n\\n"
-
-#: lib/RT/Date.pm:354
-msgid "months"
-msgstr "月"
-
-#: lib/RT/Queue_Overlay.pm:82
-msgid "new"
-msgstr "新建立"
-
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
-msgid "no name"
-msgstr "没有å称"
-
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
-msgstr "没有值"
-
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
-msgid "none"
-msgstr "æ— "
-
-#: html/Elements/SelectEqualityOperator:59
-msgid "not equal to"
-msgstr "ä¸ç­‰äºŽ"
-
-#: NOT FOUND IN SOURCE
-msgid "notice"
-msgstr "æ示"
-
-#: NOT FOUND IN SOURCE
-msgid "notlike"
-msgstr "ä¸ç¬¦åˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "number"
-msgstr "å·"
-
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
-msgid "open"
-msgstr "å¼€å¯"
-
-#: NOT FOUND IN SOURCE
-msgid "opened"
-msgstr "已开å¯"
-
-#: lib/RT/Group_Overlay.pm:219
-#. ($self->Name, $user->Name)
-msgid "personal group '%1' for user '%2'"
-msgstr "使用者‘%2’的‘%1’代ç†äººç¾¤ç»„"
-
-#: lib/RT/Group_Overlay.pm:227
-#. ($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 "已处ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "rtname"
-msgstr "æœåŠ¡å™¨å称"
-
-#: lib/RT/Date.pm:334
-msgid "sec"
-msgstr "秒"
-
-#: lib/RT/System.pm:85
-msgid "show Configuration tab"
-msgstr "显示设定页签"
-
-#: html/Search/Results.html:80
-msgid "spreadsheet"
-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
-msgid "summary rows"
-msgstr "加总列"
-
-#: lib/RT/Group_Overlay.pm:222
-#. ($self->Type)
-msgid "system %1"
-msgstr "系统 %1"
-
-#: lib/RT/Group_Overlay.pm:233
-#. ($self->Type)
-msgid "system group '%1'"
-msgstr "系统群组 '%1'"
-
-#: html/Elements/Error:64 html/SelfService/Error.html:63
-msgid "the calling component did not specify why"
-msgstr "呼å«ç»„件未指明原因"
-
-#: NOT FOUND IN SOURCE
-msgid "ticket #%1"
-msgstr "ç”³è¯·å• #%1"
-
-#: lib/RT/Group_Overlay.pm:230
-#. ($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 "到"
-
-#: NOT FOUND IN SOURCE
-msgid "true"
-msgstr "真"
-
-#: lib/RT/Group_Overlay.pm:236
-#. ($self->Id)
-msgid "undescribed group %1"
-msgstr "没有æ述的群组 %1"
-
-#: NOT FOUND IN SOURCE
-msgid "unresolved"
-msgstr "未处ç†"
-
-#: lib/RT/Group_Overlay.pm:211
-#. ($user->Object->Name)
-msgid "user %1"
-msgstr "使用者 %1"
-
-#: NOT FOUND IN SOURCE
-msgid "warning"
-msgstr "警告"
-
-#: lib/RT/Date.pm:350
-msgid "weeks"
-msgstr "周"
-
-#: NOT FOUND IN SOURCE
-msgid "with template %1"
-msgstr "模æ¿ï¼š%1"
-
-#: lib/RT/Date.pm:358
-msgid "years"
-msgstr "å¹´"
-
-msgid "Press 'Esc' to close this window."
-msgstr "按 'Esc' é”®å¯å…³é—­æœ¬çª—å£ã€‚"
-
-msgid "HasMember"
-msgstr "拥有æˆå‘˜"
-
-msgid "LinkedTo"
-msgstr "连结至"
-
-msgid "Watcher"
-msgstr "视察员"
-
-msgid "(displaying new and open tickets for %1)"
-msgstr "(显示 %1 å下新建立åŠå¼€å¯ä¸­çš„申请å•)"
diff --git a/rt/lib/RT/I18N/zh_tw.po b/rt/lib/RT/I18N/zh_tw.po
deleted file mode 100644
index 7552a6bdf..000000000
--- a/rt/lib/RT/I18N/zh_tw.po
+++ /dev/null
@@ -1,8360 +0,0 @@
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: RT 3.6.x\n"
-"PO-Revision-Date: 2007-12-09 13:05+0800\n"
-"Last-Translator: Audrey Tang <cpan@audreyt.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"
-
-#: 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 ""
-
-#: html/Widgets/SavedSearch:60
-#. ($args->{Description})
-msgid " %1 saved."
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "#"
-msgstr "#"
-
-#: NOT FOUND IN SOURCE
-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
-#. ($Ticket->id, $Ticket->Subject)
-#. ($link->BaseObj->Id, $link->BaseObj->Subject)
-#. ($ticket->Id, $ticket->Subject)
-#. ($TicketObj->Id, $TicketObj->Subject)
-msgid "#%1: %2"
-msgstr "#%1: %2"
-
-#: html/Elements/ShowSearch:105
-msgid "$1"
-msgstr "$1"
-
-#: lib/RT/Record.pm:940
-#. ($label)
-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:256
-#. ($self->ObjectType, $self->Object->Id)
-msgid "%1 #%2"
-msgstr "%1 #%2"
-
-#: lib/RT/Date.pm:365
-#. ($s, $time_unit)
-msgid "%1 %2"
-msgstr "%1 %2"
-
-#: NOT FOUND IN SOURCE
-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))
-msgid "%1 %2 %3 %4:%5:%6 %7"
-msgstr "%7-%2-%3 %4:%5:%6 %1"
-
-#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690
-#. ($cf->Name, $new_value->Content)
-#. ($field, $self->NewValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 added"
-msgstr "%2 已新增為 %1"
-
-#: lib/RT/Date.pm:362
-#. ($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)
-#. ($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)
-#. ($field, $self->OldValue)
-#. ($self->Field, $principal->Object->Name)
-msgid "%1 %2 deleted"
-msgstr "%2 已自 %1 刪除"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 %2 of group %3"
-msgstr "%3 群組的 %1 %2"
-
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103
-#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->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
-#. ($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))
-#. (loc($Ticket->Status()))
-#. (loc($TicketObj->Status))
-#. ($TicketObj->OwnerObj->Name())
-msgid "%1 (Unchanged)"
-msgstr "%1 (未更改)"
-
-#: 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")
-msgid "%1 - An argument to pass to %2"
-msgstr "%1 - 傳éžçµ¦ %2 的一個åƒæ•¸"
-
-#: bin/rt-crontool:262
-#. ("--verbose")
-msgid "%1 - Output status updates to STDOUT"
-msgstr "%1 - 將更新狀態輸出到 STDOUT"
-
-#: bin/rt-crontool:253
-#. ("--template-id")
-msgid "%1 - Specify id of the template you want to use"
-msgstr "%1 - 指定欲使用的範本編號"
-
-#: bin/rt-crontool:256
-#. ("--transaction")
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
-msgstr "%1 - 指定欲使用的更動為 'first' (第一項) 或 'last' (最後一項)"
-
-#: bin/rt-crontool:247
-#. ("--action")
-msgid "%1 - Specify the action module you want to use"
-msgstr "%1 - 指定欲使用的動作模組"
-
-#: bin/rt-crontool:241
-#. ("--condition")
-msgid "%1 - Specify the condition module you want to use"
-msgstr "%1 - 指定欲使用的æ¢ä»¶æ¨¡çµ„"
-
-#: bin/rt-crontool:234
-#. ("--search")
-msgid "%1 - Specify the search module you want to use"
-msgstr "%1 - 指定欲使用的查詢模組"
-
-#: bin/rt-crontool:259
-#. ("--transaction-type")
-msgid "%1 - Specify the type of a transaction you want to use"
-msgstr "%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>',)
-msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr "%1 RT %2 版,%4 版權所有,1996-%3。"
-
-#: lib/RT/ScripAction_Overlay.pm:150
-#. ($self->Id)
-msgid "%1 ScripAction loaded"
-msgstr "載入手續 %1"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 Total"
-msgstr "å…± %1 ç­†"
-
-#: lib/RT/Record.pm:1722
-#. ($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)"
-
-#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151
-#. ($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
-#. ($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."'")
-msgid "%1 changed from %2 to %3"
-msgstr "%1 的值從 %2 改為 %3"
-
-#: html/Search/Build.html:213
-#. ($Description)
-msgid "%1 copy"
-msgstr "%1 複製"
-
-#: lib/RT/Record.pm:944
-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
-#. ($self)
-msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr "%1 無法將ç¾æ³è¨­æˆå·²è§£æ±ºã€‚RT 資料庫內容å¯èƒ½ä¸ä¸€è‡´ã€‚"
-
-#: lib/RT/Transaction_Overlay.pm:571
-#. ($obj_type)
-msgid "%1 created"
-msgstr "已建立 %1"
-
-#: lib/RT/Transaction_Overlay.pm:576
-#. ($obj_type)
-msgid "%1 deleted"
-msgstr "已刪除 %1"
-
-#: etc/initialdata:593
-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:229
-#. ($0)
-msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr "%1 是從外部排程程å¼(如 cron)來å°ç”³è«‹å–®é€²è¡Œæ“作的工具。"
-
-#: lib/RT/Queue_Overlay.pm:863
-#. ($principal->Object->Name, $args{'Type'})
-msgid "%1 is no longer a %2 for this queue."
-msgstr "%1 å·²ä¸å†æ˜¯æ­¤è¡¨å–®çš„ %2。"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 is no longer a %2 for this ticket."
-msgstr "%1 å·²ä¸å†æ˜¯æ­¤ç”³è«‹å–®çš„ %2。"
-
-#: NOT FOUND IN SOURCE
-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 ä¸æ˜¯ä¸€å€‹åˆæ³•çš„表單編號。"
-
-#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49
-#. ($minutes)
-msgid "%1 min"
-msgstr "%1 分é˜"
-
-#: etc/initialdata:601
-msgid "%1 newest unowned tickets"
-msgstr "å‰ %1 份待èªé ˜çš„申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 not shown"
-msgstr "沒有顯示 %1"
-
-#: lib/RT/CustomField_Overlay.pm:893
-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 é …çµæžœ"
-
-#: html/User/Elements/DelegateRights:97
-#. (loc($ObjectType =~ /^RT::(.*)$/))
-msgid "%1 rights"
-msgstr "%1權é™"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 succeeded\\n"
-msgstr "%1 完æˆ\\n"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for $MessageId"
-msgstr "ä¸çŸ¥é“ $MessageID çš„ %1 類別"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 type unknown for %2"
-msgstr "ä¸çŸ¥é“ %2 çš„ %1 類別"
-
-#: NOT FOUND IN SOURCE
-msgid "%1 was created without a CurrentUser\\n"
-msgstr "%1 新增時未指定ç¾è¡Œä½¿ç”¨è€…"
-
-#: lib/RT/Action/ResolveMembers.pm:63
-#. (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
-msgid "%1's %2 objects"
-msgstr "%1 內的 %2 物件"
-
-#: lib/RT/CustomField_Overlay.pm:895
-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
-#. ($object->Name)
-#. ($Object->Name)
-msgid "%1's saved searches"
-msgstr "%1 已儲存的查詢"
-
-#: lib/RT/Transaction_Overlay.pm:481
-#. ($self)
-msgid "%1: no attachment specified"
-msgstr "%1:未指定附件"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:78
-#. ($size)
-msgid "%1b"
-msgstr "%1 ä½å…ƒçµ„"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:75
-#. (int( $size / 102.4 ) / 10)
-msgid "%1k"
-msgstr "%1k ä½å…ƒçµ„"
-
-#: html/Ticket/Elements/ShowTime:49
-#. (sprintf("%.1f",$minutes / 60))
-msgid "%quant(%1,hour)"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "%quant(%1,result) found"
-msgstr "找到 %1 é …çµæžœ"
-
-#: lib/RT/Ticket_Overlay.pm:1142
-#. ($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
-msgid "(Check box to delete)"
-msgstr "(點é¸æ¬²åˆªé™¤çš„é …ç›®)"
-
-#: NOT FOUND IN SOURCE
-msgid "(Check boxes to delete)"
-msgstr "(點é¸æ¬²åˆªé™¤çš„é …ç›®)"
-
-#: html/Ticket/Elements/PreviewScrips:99
-msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr "(點é¸æ¬²åœç”¨é€šçŸ¥çš„收件人)"
-
-#: html/Ticket/Elements/PreviewScrips:123
-msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr "(點é¸æ¬²å•Ÿç”¨é€šçŸ¥çš„收件人)"
-
-#: html/Ticket/Create.html:218
-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)
-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
-msgid "(No custom fields)"
-msgstr "(沒有自訂欄ä½)"
-
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
-msgid "(No members)"
-msgstr "(沒有æˆå“¡)"
-
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48
-msgid "(No scrips)"
-msgstr "(沒有手續)"
-
-#: html/Admin/Elements/EditTemplates:52
-msgid "(No templates)"
-msgstr "沒有範本"
-
-#: NOT FOUND IN SOURCE
-msgid "(No workflows)"
-msgstr "沒有æµç¨‹"
-
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
-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>更改後續的收件者å單。)"
-
-#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的管ç†å“¡é›»å­éƒµä»¶ä½å€ã€‚這<b>將會</b>更改後續的收件者å單。)"
-
-#: html/Ticket/Create.html:103
-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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å­éƒµä»¶ä½å€ã€‚這<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 ""
-
-#: 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
-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
-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
-msgid "(Will not be sent email)"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "(default delegate)"
-msgstr "(é è¨­ä»£ç†äºº)"
-
-#: NOT FOUND IN SOURCE
-msgid "(delete)"
-msgstr "(刪除)"
-
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
-msgid "(empty)"
-msgstr "(空白)"
-
-#: NOT FOUND IN SOURCE
-msgid "(new)"
-msgstr "(新增)"
-
-#: html/Admin/Users/index.html:60
-msgid "(no name listed)"
-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
-msgid "(no value)"
-msgstr "(ç„¡)"
-
-#: html/Admin/Elements/EditCustomFieldValues:47
-msgid "(no values)"
-msgstr "(沒有值)"
-
-#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49
-msgid "(only one ticket)"
-msgstr "(僅能指定一份申請單)"
-
-#: html/Elements/RT__Ticket/ColumnMap:149
-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
-msgid "(required)"
-msgstr "(å¿…å¡«)"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "(untitled)"
-msgstr "(未命å)"
-
-#: html/Ticket/Elements/Reminders:133
-msgid "(yyyy/mm/dd)"
-msgstr "(yyyy/mm/dd)"
-
-#: NOT FOUND IN SOURCE
-msgid "*"
-msgstr "★"
-
-#: html/Elements/EditCustomFieldSelect:57
-msgid "-"
-msgstr "-"
-
-#: bin/rt-crontool:95
-msgid "--transaction argument could be only 'first' or 'last'"
-msgstr "--transaction 的值僅能為 'first' 或 'last'"
-
-#: NOT FOUND IN SOURCE
-msgid ":"
-msgstr ":"
-
-#: html/Ticket/Elements/ShowBasics:53
-msgid "<% $Ticket->Status%>"
-msgstr "<% $Ticket->Status%>"
-
-#: html/Elements/SelectTicketTypes:48
-msgid "<% $_ %>"
-msgstr "<% $_ %>"
-
-#: html/Search/Elements/SelectLinks:48
-msgid "<%$_%>"
-msgstr "<%$_%>"
-
-#: html/Search/Elements/DisplayOptions:73
-msgid "<%$field%>"
-msgstr "<%$field%>"
-
-#: html/Elements/CreateTicket:47
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
-msgstr "<input type=\"submit\" class=\"button\" value=\"æ出申請單\" />&nbsp;%1"
-
-#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787
-#. ($m->scomp('/Elements/SelectNewTicketQueue'))
-msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
-msgstr "<input type=\"submit\" value=\"æ出申請單\">&nbsp;%1"
-
-#: etc/initialdata:218
-msgid "A blank template"
-msgstr "空白範本"
-
-#: html/Admin/Users/Modify.html:371
-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:174 lib/RT/Principal_Overlay.pm:219
-msgid "ACE not found"
-msgstr "找ä¸åˆ° ACE 設定"
-
-#: lib/RT/ACE_Overlay.pm:853
-msgid "ACEs can only be created and deleted."
-msgstr "祇能新增或刪除 ACE 設定。"
-
-#: NOT FOUND IN SOURCE
-msgid "ACLEquivalence"
-msgstr "ACLEquivalence"
-
-#: html/Search/Elements/SelectAndOr:46
-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 "個人資訊"
-
-#: html/User/Elements/Tabs:53
-msgid "About me"
-msgstr "個人資訊"
-
-#: NOT FOUND IN SOURCE
-msgid "Access Right"
-msgstr "系統使用登錄權é™"
-
-#: html/Admin/Users/Modify.html:106
-msgid "Access control"
-msgstr "å­˜å–權é™"
-
-#: html/Admin/Elements/EditScrip:65
-msgid "Action"
-msgstr "動作"
-
-#: lib/RT/Scrip_Overlay.pm:172
-#. ($args{'ScripAction'})
-msgid "Action %1 not found"
-msgstr "動作 %1 找ä¸åˆ°"
-
-#: NOT FOUND IN SOURCE
-msgid "Action committed."
-msgstr "動作執行完畢"
-
-#: bin/rt-crontool:171
-msgid "Action committed.\\n"
-msgstr "動作執行完畢。\\n"
-
-#: lib/RT/Scrip_Overlay.pm:168
-msgid "Action is mandatory argument"
-msgstr ""
-
-#: bin/rt-crontool:167
-msgid "Action prepared..."
-msgstr "動作準備完畢..."
-
-#: NOT FOUND IN SOURCE
-msgid "Activated Date"
-msgstr "申請啟動時間"
-
-#: html/Search/Build.html:85
-msgid "Add"
-msgstr "新增"
-
-#: html/Search/Bulk.html:92
-msgid "Add AdminCc"
-msgstr "新增管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: html/Search/Bulk.html:88
-msgid "Add Cc"
-msgstr "新增副本收件人"
-
-#: html/Search/Elements/EditFormat:49
-msgid "Add Columns"
-msgstr ""
-
-#: html/Search/Elements/PickCriteria:46
-msgid "Add Criteria"
-msgstr "新增æ¢ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Add Entry"
-msgstr "新增列"
-
-#: html/Ticket/Create.html:147 html/Ticket/Update.html:116
-msgid "Add More Files"
-msgstr "新增更多附件"
-
-#: NOT FOUND IN SOURCE
-msgid "Add Next State"
-msgstr "新增下一項關å¡"
-
-#: html/Search/Bulk.html:84
-msgid "Add Requestor"
-msgstr "新增申請人"
-
-#: html/Admin/Elements/AddCustomFieldValue:46
-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 "新增一é“手續到此表單"
-
-#: html/Admin/Global/Scrip.html:83
-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
-msgid "Add comments or replies to selected tickets"
-msgstr "新增評論或回覆到指定的申請單"
-
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
-msgid "Add members"
-msgstr "新增æˆå“¡"
-
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
-msgid "Add new watchers"
-msgstr "新增視察員"
-
-#: html/Search/Build.html:85
-msgid "Add these terms to your search"
-msgstr ""
-
-#: html/Search/Bulk.html:158
-msgid "Add values"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:108
-msgid "Add, delete and modify custom field values for objects"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "AddNextState"
-msgstr "新增下一項關å¡"
-
-#: lib/RT/Queue_Overlay.pm:763
-#. ($args{'Type'})
-msgid "Added principal as a %1 for this queue"
-msgstr "å–®ä½å·²æ–°å¢žç‚ºæ­¤è¡¨å–®çš„ %1"
-
-#: lib/RT/Ticket_Overlay.pm:1455
-#. ($self->loc($args{'Type'}))
-msgid "Added principal as a %1 for this ticket"
-msgstr "å–®ä½å·²æ–°å¢žç‚ºæ­¤ç”³è«‹å–®çš„ %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Additional Hints"
-msgstr "é¡å¤–æ示"
-
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
-msgid "Address1"
-msgstr "ä½å€"
-
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
-msgid "Address2"
-msgstr "ä½å€(續)"
-
-#: NOT FOUND IN SOURCE
-msgid "Adjust Blinking Rate"
-msgstr "調整閃çˆé€Ÿåº¦å¿«æ…¢"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin"
-msgstr "管ç†å“¡"
-
-#: html/Ticket/Create.html:98
-msgid "Admin Cc"
-msgstr "管ç†å“¡å‰¯æœ¬"
-
-#: etc/initialdata:295
-msgid "Admin Comment"
-msgstr "管ç†å“¡è©•è«–"
-
-#: etc/initialdata:274
-msgid "Admin Correspondence"
-msgstr "管ç†å“¡å›žè¦†"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin Rights"
-msgstr "管ç†å“¡æ¬Šé™"
-
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
-msgid "Admin queues"
-msgstr "表單管ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Admin users"
-msgstr "使用者管ç†"
-
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
-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"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminAllPersonalGroups"
-msgstr "管ç†æ‰€æœ‰ä»£ç†äººç¾¤çµ„"
-
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113
-msgid "AdminCc"
-msgstr "管ç†å“¡å‰¯æœ¬"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminComment"
-msgstr "管ç†å“¡è©•è«–"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCorrespondence"
-msgstr "管ç†å“¡å›žè¦†"
-
-#: lib/RT/CustomField_Overlay.pm:106
-msgid "AdminCustomField"
-msgstr "管ç†è‡ªè¨‚欄ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminCustomFields"
-msgstr "管ç†è‡ªè¨‚欄ä½"
-
-#: lib/RT/Group_Overlay.pm:163
-msgid "AdminGroup"
-msgstr "管ç†ç¾¤çµ„"
-
-#: NOT FOUND IN SOURCE
-msgid "AdminGroupDescription"
-msgstr "管ç†ç¾¤çµ„æè¿°"
-
-#: lib/RT/Group_Overlay.pm:165
-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:80
-msgid "AdminOwnPersonalGroups"
-msgstr "管ç†ä»£ç†äººç¾¤çµ„"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "AdminQueue"
-msgstr "管ç†è¡¨å–®"
-
-#: lib/RT/System.pm:81
-msgid "AdminUsers"
-msgstr "管ç†ä½¿ç”¨è€…"
-
-#: NOT FOUND IN SOURCE
-msgid "Administrative"
-msgstr "行政類"
-
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
-msgid "Administrative Cc"
-msgstr "管ç†å“¡å‰¯æœ¬"
-
-#: NOT FOUND IN SOURCE
-msgid "Admins"
-msgstr "主管"
-
-#: html/Ticket/Elements/Tabs:216
-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
-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:363
-msgid "All Approvals Passed"
-msgstr "完æˆå…¨éƒ¨ç°½æ ¸"
-
-#: NOT FOUND IN SOURCE
-msgid "All Condition"
-msgstr "所有æ¢ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "All Custom Fields"
-msgstr "所有自訂欄ä½"
-
-#: html/Admin/Queues/index.html:75
-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 "ç¦åˆ©è£œåŠ©ç”³è«‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Always sends a message to the requestors independent of message sender"
-msgstr "無論寄件來æºç‚ºä½•ï¼Œä¸€å¾‹å¯„信給申請人"
-
-#: NOT FOUND IN SOURCE
-msgid "Amount"
-msgstr "數é¡"
-
-#: html/Search/Elements/EditQuery:56
-msgid "And/Or"
-msgstr "AND/OR"
-
-#: NOT FOUND IN SOURCE
-msgid "Any Condition"
-msgstr "ä»»æ„æ¢ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Applies To"
-msgstr "套用於"
-
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
-msgid "Applies to"
-msgstr "套用於"
-
-#: html/Search/Edit.html:64
-msgid "Apply"
-msgstr "套用"
-
-#: NOT FOUND IN SOURCE
-msgid "Apply Template"
-msgstr "引用範本"
-
-#: html/Search/Edit.html:64
-msgid "Apply your changes"
-msgstr "套用更動"
-
-#: html/Elements/Tabs:77
-msgid "Approval"
-msgstr "簽核"
-
-#: html/Approvals/Display.html:65 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
-#. ($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
-#. ($ticket->Id)
-msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr "簽核單 #%1:系統錯誤,記錄失敗"
-
-#: html/Approvals/index.html:73
-#. ($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:351
-msgid "Approval Passed"
-msgstr "完æˆæŸé …簽核"
-
-#: etc/initialdata:374
-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 "簽核æµç¨‹"
-
-#: html/Approvals/Elements/Approve:69
-msgid "Approve"
-msgstr "核准"
-
-#: NOT FOUND IN SOURCE
-msgid "Approver"
-msgstr "簽核人"
-
-#: NOT FOUND IN SOURCE
-msgid "Approver Setting"
-msgstr "執行簽核人設定"
-
-#: etc/initialdata:504
-msgid "Approver's notes: %1"
-msgstr "簽核備註:%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Apr"
-msgstr "四月"
-
-#: lib/RT/Date.pm:444
-msgid "Apr."
-msgstr "04"
-
-#: NOT FOUND IN SOURCE
-msgid "April"
-msgstr "四月"
-
-#: NOT FOUND IN SOURCE
-msgid "Are you sure to delete checked items?"
-msgstr "您確定è¦åˆªé™¤ï¼Ÿ"
-
-#: html/Search/Elements/DisplayOptions:81
-msgid "Asc"
-msgstr ""
-
-#: html/Elements/SelectSortOrder:56
-msgid "Ascending"
-msgstr "éžå¢ž"
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "Assign and remove custom fields"
-msgstr "指派åŠç§»é™¤è‡ªè¨‚欄ä½"
-
-#: lib/RT/Queue_Overlay.pm:96
-msgid "AssignCustomFields"
-msgstr "指派自訂欄ä½"
-
-#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116
-msgid "Attach"
-msgstr "附件"
-
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:143
-msgid "Attach file"
-msgstr "附加檔案"
-
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94
-msgid "Attached file"
-msgstr "ç¾æœ‰é™„件"
-
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
-#. ($Attachment)
-msgid "Attachment '%1' could not be loaded"
-msgstr "無法載入附件 '%1'"
-
-#: lib/RT/Transaction_Overlay.pm:489
-msgid "Attachment created"
-msgstr "附件新增完畢"
-
-#: lib/RT/Tickets_Overlay.pm:1945
-msgid "Attachment filename"
-msgstr "附件檔å"
-
-#: html/Ticket/Elements/ShowAttachments:47
-msgid "Attachments"
-msgstr "附件"
-
-#: lib/RT/Attributes_Overlay.pm:171
-msgid "Attribute Deleted"
-msgstr "已刪除該屬性"
-
-#: NOT FOUND IN SOURCE
-msgid "Attributes"
-msgstr "屬性"
-
-#: NOT FOUND IN SOURCE
-msgid "Aug"
-msgstr "八月"
-
-#: lib/RT/Date.pm:448
-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:221
-msgid "Autoreply"
-msgstr "自動回覆"
-
-#: etc/initialdata:72
-msgid "Autoreply To Requestors"
-msgstr "自動å°ç”³è«‹äººå›žè¦†"
-
-#: NOT FOUND IN SOURCE
-msgid "AutoreplyToRequestors"
-msgstr "自動å°ç”³è«‹äººå›žè¦†"
-
-#: html/Widgets/SelectionBox:185
-msgid "Available"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Available Columns"
-msgstr "å¯ç”¨çš„欄ä½ï¼š"
-
-#: NOT FOUND IN SOURCE
-msgid "Available Rights:"
-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 的資料錯誤"
-
-#: NOT FOUND IN SOURCE
-msgid "Bad transaction number for attachment. %1 should be %2\\n"
-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
-msgid "Basics"
-msgstr "基本資訊"
-
-#: NOT FOUND IN SOURCE
-msgid "Batch Approval"
-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
-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 "開始簽核"
-
-#: NOT FOUND IN SOURCE
-msgid "Begin From "
-msgstr "起始日"
-
-#: html/Elements/Logo:47
-msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Binary"
-msgstr "檔案"
-
-#: NOT FOUND IN SOURCE
-msgid "Birthday"
-msgstr "生日"
-
-#: etc/initialdata:217
-msgid "Blank"
-msgstr "空白範本"
-
-#: html/Search/Elements/EditFormat:84
-msgid "Bold"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Bookmarkable URL for this search"
-msgstr "將查詢çµæžœè½‰ç‚ºå¯æ”¾å…¥æ›¸ç±¤çš„網å€"
-
-#: html/Search/Results.html:79
-msgid "Bookmarkable link"
-msgstr "å¯æ”¾å…¥æ›¸ç±¤çš„網å€"
-
-#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69
-msgid "Brief headers"
-msgstr "精簡標頭檔"
-
-#: html/Ticket/Elements/Tabs:227
-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 "事業部:"
-
-#: lib/RT/User_Overlay.pm:1853
-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:379
-msgid "Can't add a custom field value without a name"
-msgstr "ä¸èƒ½æ–°å¢žæ²’有å稱的自訂欄ä½å€¼"
-
-#: html/Admin/CustomFields/Objects.html:86
-#. ($Class)
-msgid "Can't find a collection class for '%1'"
-msgstr ""
-
-#: html/Search/Build.html:286
-msgid "Can't find a saved search to work with"
-msgstr "找ä¸åˆ°å·²å„²å­˜çš„查詢"
-
-#: lib/RT/Link_Overlay.pm:159
-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
-#. (loc($self->{SearchType}))
-msgid "Can't save %1"
-msgstr "無法儲存 %1"
-
-#: html/Search/Build.html:290
-msgid "Can't save this search"
-msgstr "無法儲存此項查詢"
-
-#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358
-msgid "Can't specifiy both base and target"
-msgstr "ä¸èƒ½åŒæ™‚指定起始申請單與目的申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Cancel"
-msgstr "å–消"
-
-#: html/autohandler:204
-#. ($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 "分類管ç†"
-
-#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
-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
-msgid "Cc"
-msgstr "副本"
-
-#: NOT FOUND IN SOURCE
-msgid "Cc Type"
-msgstr "副本類別"
-
-#: NOT FOUND IN SOURCE
-msgid "Chairperson's Office"
-msgstr "董事長室"
-
-#: NOT FOUND IN SOURCE
-msgid "Change Ticket"
-msgstr "修改申請單"
-
-#: html/SelfService/Prefs.html:52
-msgid "Change password"
-msgstr "更改密碼"
-
-#: NOT FOUND IN SOURCE
-msgid "ChangeOwnerUI"
-msgstr "å¯å¦é¸æ“‡è¡¨å–®æ‰¿è¾¦äºº"
-
-#: html/Elements/Submit:78
-msgid "Check All"
-msgstr "全部é¸å–"
-
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97
-msgid "Check box to delete"
-msgstr "é¸æ“‡æ¬²åˆªé™¤çš„é …ç›®"
-
-#: html/Admin/Elements/SelectRights:55
-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
-msgid "Children"
-msgstr "å­ç”³è«‹å–®"
-
-#: NOT FOUND IN SOURCE
-msgid "Chinese Name"
-msgstr "中文姓å"
-
-#: NOT FOUND IN SOURCE
-msgid "Chinese/English"
-msgstr "中英文"
-
-#: html/NoAuth/js/util.js:201
-msgid "Choose a date"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
-msgid "City"
-msgstr "所在城市"
-
-#: NOT FOUND IN SOURCE
-msgid "ClassicUI"
-msgstr "傳統介é¢"
-
-#: html/Elements/Submit:80
-msgid "Clear All"
-msgstr "全部清除"
-
-#: html/Helpers/CalPopup.html:51
-msgid "Close window"
-msgstr "關閉視窗"
-
-#: html/Ticket/Elements/ShowDates:68
-msgid "Closed"
-msgstr "已解決"
-
-#: NOT FOUND IN SOURCE
-msgid "Closed Tickets"
-msgstr "已解決的申請單"
-
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78
-msgid "Closed tickets"
-msgstr "已解決的申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Code"
-msgstr "執行程å¼ç¢¼"
-
-#: lib/RT/CustomField_Overlay.pm:89
-msgid "Combobox: Select or enter multiple values"
-msgstr "下拉文字框:é¸æ“‡æˆ–éµå…¥å¤šé‡é …ç›®"
-
-#: lib/RT/CustomField_Overlay.pm:90
-msgid "Combobox: Select or enter one value"
-msgstr "下拉文字框:é¸æ“‡æˆ–éµå…¥å–®ä¸€é …ç›®"
-
-#: lib/RT/CustomField_Overlay.pm:91
-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
-msgid "Comment"
-msgstr "è©•è«–"
-
-#: html/Admin/Queues/Modify.html:79
-msgid "Comment Address"
-msgstr "è©•è«–é›»å­éƒµä»¶åœ°å€"
-
-#: NOT FOUND IN SOURCE
-msgid "Comment not recorded"
-msgstr "評論未被紀錄"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "Comment on tickets"
-msgstr "å°ç”³è«‹å–®æ出評論"
-
-#: lib/RT/Queue_Overlay.pm:111
-msgid "CommentOnTicket"
-msgstr "評論申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Comments"
-msgstr "è©•è«–"
-
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75
-msgid "Comments (Not sent to requestors)"
-msgstr "è©•è«–(ä¸é€çµ¦ç”³è«‹äºº)"
-
-#: html/Search/Bulk.html:128
-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
-msgid "Comments about this user"
-msgstr "使用者æè¿°"
-
-#: lib/RT/Transaction_Overlay.pm:634
-msgid "Comments added"
-msgstr "新增評論完畢"
-
-#: NOT FOUND IN SOURCE
-msgid "Commit"
-msgstr "確èª"
-
-#: lib/RT/Action/Generic.pm:175
-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 "設定查詢æ¢ä»¶"
-
-#: html/Admin/Elements/EditScrip:59
-msgid "Condition"
-msgstr "æ¢ä»¶"
-
-#: lib/RT/Scrip_Overlay.pm:184
-msgid "Condition is mandatory argument"
-msgstr "æ¢ä»¶æ˜¯å¿…填欄ä½"
-
-#: bin/rt-crontool:151
-msgid "Condition matches..."
-msgstr "符åˆæ¢ä»¶..."
-
-#: lib/RT/Scrip_Overlay.pm:188
-msgid "Condition not found"
-msgstr "未找到符åˆçš„ç¾æ³"
-
-#: html/Elements/Tabs:84
-msgid "Configuration"
-msgstr "設定"
-
-#: html/SelfService/Prefs.html:54
-msgid "Confirm"
-msgstr "確èªå¯†ç¢¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Confirm Password"
-msgstr "密碼確èª"
-
-#: NOT FOUND IN SOURCE
-msgid "Confirm Submit"
-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'"
-
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
-msgid "Content"
-msgstr "內容"
-
-#: html/Elements/SelectAttachmentField:49
-msgid "Content-Type"
-msgstr "內容類型"
-
-#: NOT FOUND IN SOURCE
-msgid "Coould not create group"
-msgstr "無法新增群組"
-
-#: html/Search/Elements/EditSearches:65
-msgid "Copy"
-msgstr "複製"
-
-#: NOT FOUND IN SOURCE
-msgid "Copy Field From:"
-msgstr "欲複製欄ä½ï¼š"
-
-#: etc/initialdata:286
-msgid "Correspondence"
-msgstr "回覆"
-
-#: NOT FOUND IN SOURCE
-msgid "Correspondence Address"
-msgstr "申請單回覆地å€"
-
-#: lib/RT/Transaction_Overlay.pm:630
-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 "
-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 "ä¸èƒ½æ›´æ”¹æ‰¿è¾¦äººã€‚"
-
-#: html/Admin/CustomFields/Modify.html:161
-#. ($msg)
-msgid "Could not create CustomField"
-msgstr "無法新增自訂欄ä½"
-
-#: html/Admin/Elements/EditCustomField:113
-#. ($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 "無法建立通知範本"
-
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
-msgid "Could not create group"
-msgstr "無法新增群組"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not create item"
-msgstr "無法新增項目"
-
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
-#. ($msg)
-msgid "Could not create template: %1"
-msgstr "無法新增範本:%1"
-
-#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407
-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 "無法新增使用者"
-
-#: 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:741 lib/RT/Ticket_Overlay.pm:1423
-msgid "Could not find or create that user"
-msgstr "找ä¸åˆ°æˆ–無法新增該å使用者"
-
-#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504
-msgid "Could not find that principal"
-msgstr "找ä¸åˆ°è©²å–®ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not find user %1."
-msgstr "找ä¸åˆ°ä½¿ç”¨è€… %1。"
-
-#: html/Admin/CustomFields/Objects.html:69
-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
-msgid "Could not load group"
-msgstr "無法載入群組"
-
-#: lib/RT/SavedSearch.pm:119
-#. ($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
-#. ($args{'Type'})
-msgid "Could not make that principal a %1 for this queue"
-msgstr "無法將該單ä½è¨­ç‚ºæ­¤è¡¨å–®çš„ %1。"
-
-#: lib/RT/Ticket_Overlay.pm:1444
-#. ($self->loc($args{'Type'}))
-msgid "Could not make that principal a %1 for this ticket"
-msgstr "無法將該單ä½è¨­ç‚ºæ­¤ç”³è«‹å–®çš„ %1。"
-
-#: lib/RT/Queue_Overlay.pm:860
-#. ($args{'Type'})
-msgid "Could not remove that principal as a %1 for this queue"
-msgstr "ç„¡æ³•å°‡å–®ä½ %1 從表單移除。"
-
-#: NOT FOUND IN SOURCE
-msgid "Could not remove that principal as a %1 for this ticket"
-msgstr "ç„¡æ³•å°‡å–®ä½ %1 從申請單移除。"
-
-#: lib/RT/User_Overlay.pm:191
-msgid "Could not set user info"
-msgstr "無法設定使用者資訊"
-
-#: lib/RT/Transaction_Overlay.pm:159
-msgid "Couldn't add attachment"
-msgstr "無法新增附件"
-
-#: lib/RT/Group_Overlay.pm:1003
-msgid "Couldn't add member to group"
-msgstr "無法新增æˆå“¡è‡³ç¾¤çµ„"
-
-#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771
-#. ($Msg)
-msgid "Couldn't create a transaction: %1"
-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:953
-msgid "Couldn't find row"
-msgstr "找ä¸åˆ°æ­¤åˆ—資料"
-
-#: lib/RT/Group_Overlay.pm:977
-msgid "Couldn't find that principal"
-msgstr "找ä¸åˆ°è©²å–®ä½"
-
-#: lib/RT/CustomField_Overlay.pm:409
-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
-#. ($self->Id)
-msgid "Couldn't load %1 from the users database.\\n"
-msgstr "無法從使用者資料庫載入 %1。\\n"
-
-#: html/Admin/CustomFields/UserRights.html:149
-#. ($id)
-msgid "Couldn't load Class %1"
-msgstr "無法載入類別 %1"
-
-#: html/Admin/CustomFields/GroupRights.html:107
-#. ($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:2016
-#. ($self->Id)
-msgid "Couldn't load copy of ticket #%1."
-msgstr ""
-
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
-#. ($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
-msgid "Couldn't load link"
-msgstr "無法載入éˆçµã€‚"
-
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
-#. ($id)
-msgid "Couldn't load object %1"
-msgstr "無法載入物件 %1"
-
-#: html/Admin/Queues/People.html:142
-#. ($id)
-msgid "Couldn't load queue"
-msgstr "無法載入表單"
-
-#: html/Admin/Queues/GroupRights.html:122 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 "無法載入手續"
-
-#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167
-#. ($id)
-msgid "Couldn't load scrip #%1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load template"
-msgstr "無法載入範本"
-
-#: NOT FOUND IN SOURCE
-msgid "Couldn't load that user (%1)"
-msgstr "無法載入該å使用者(%1)"
-
-#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680
-#. ($id)
-msgid "Couldn't load ticket '%1'"
-msgstr "無法載入申請單 '%1'"
-
-#: lib/RT/Ticket_Overlay.pm:2643
-#. ($args{'URI'})
-msgid "Couldn't resolve '%1' into a URI."
-msgstr ""
-
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
-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
-msgid "Create"
-msgstr "新增"
-
-#: NOT FOUND IN SOURCE
-msgid "Create Subgroup:"
-msgstr "新增å­ç¾¤çµ„:"
-
-#: etc/initialdata:135
-msgid "Create Tickets"
-msgstr "新增申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Create User:"
-msgstr "新增æˆå“¡ï¼š"
-
-#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96
-msgid "Create a CustomField"
-msgstr "新增自訂欄ä½"
-
-#: html/Admin/Queues/CustomField.html:69
-#. ($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 "新增自訂欄ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new global Scrip"
-msgstr "新增全域手續"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new global scrip"
-msgstr "新增全域手續"
-
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
-msgid "Create a new group"
-msgstr "新增群組"
-
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
-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 "新增範本"
-
-#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60
-msgid "Create a new ticket"
-msgstr "新增申請單"
-
-#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314
-msgid "Create a new user"
-msgstr "新增使用者"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a new workflow"
-msgstr "新增æµç¨‹"
-
-#: html/Admin/Queues/Modify.html:125
-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
-#. ($QueueObj->Name)
-msgid "Create a scrip for queue %1"
-msgstr "為 %1 表單新增手續"
-
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
-msgid "Create a template"
-msgstr "新增範本"
-
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
-msgid "Create a ticket"
-msgstr "æ出申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Create a workflow"
-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:137
-msgid "Create new tickets based on this scrip's template"
-msgstr "ä¾æ“šæ­¤é …手續內的模版,新增申請單"
-
-#: html/SelfService/Create.html:105
-msgid "Create ticket"
-msgstr "新增申請單"
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "Create tickets in this queue"
-msgstr "在此表單中新增申請單"
-
-#: lib/RT/CustomField_Overlay.pm:106
-msgid "Create, delete and modify custom fields"
-msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è‡ªè¨‚欄ä½"
-
-#: lib/RT/Queue_Overlay.pm:92
-msgid "Create, delete and modify queues"
-msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è¡¨å–®"
-
-#: NOT FOUND IN SOURCE
-msgid "Create, delete and modify the members of any user's personal groups"
-msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä»»ä½•ä½¿ç”¨è€…的代ç†äººç¾¤çµ„"
-
-#: lib/RT/System.pm:80
-msgid "Create, delete and modify the members of personal groups"
-msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä»£ç†äººç¾¤çµ„"
-
-#: lib/RT/System.pm:81
-msgid "Create, delete and modify users"
-msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä½¿ç”¨è€…"
-
-#: lib/RT/System.pm:87
-msgid "CreateSavedSearch"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:109
-msgid "CreateTicket"
-msgstr "新增申請單"
-
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169
-msgid "Created"
-msgstr "新增日"
-
-#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117
-#. ($CustomFieldObj->Name())
-msgid "Created CustomField %1"
-msgstr "è‡ªè¨‚æ¬„ä½ %1 新增æˆåŠŸ"
-
-#: html/Tools/Reports/Elements/Tabs:63
-msgid "Created in a date range"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Created template %1"
-msgstr "範本 %1 新增æˆåŠŸ"
-
-#: html/Tools/Reports/CreatedByDates.html:52
-msgid "Created tickets in period, grouped by status"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Created workflow %1"
-msgstr "æµç¨‹ %1 新增æˆåŠŸ"
-
-#: html/Search/Elements/PickBasics:102
-msgid "Creator"
-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 "ç¾æœ‰ç¾¤çµ„列表:"
-
-#: html/Elements/EditLinks:49
-msgid "Current Links"
-msgstr "ç¾æœ‰é—œä¿‚"
-
-#: NOT FOUND IN SOURCE
-msgid "Current Rights:"
-msgstr "ç¾æœ‰æ¬Šé™ï¼š"
-
-#: html/Admin/Elements/EditScrips:51
-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 "ç¾æœ‰è¦–察員"
-
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
-msgid "Current members"
-msgstr "ç¾æœ‰æˆå“¡"
-
-#: html/Admin/Elements/SelectRights:51
-msgid "Current rights"
-msgstr "ç¾æœ‰æ¬Šé™"
-
-#: html/Search/Elements/EditQuery:47
-msgid "Current search"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Current search criteria"
-msgstr "ç¾æœ‰æŸ¥è©¢æ¢ä»¶"
-
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
-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
-msgid "Custom Fields"
-msgstr "自訂欄ä½"
-
-#: html/Admin/CustomFields/index.html:60
-#. ($lookup)
-msgid "Custom Fields for %1"
-msgstr "%1 的自訂欄ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom Fields which apply to all queues"
-msgstr "é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½"
-
-#: html/Admin/Elements/EditScrip:107
-msgid "Custom action cleanup code"
-msgstr "動作後執行程å¼"
-
-#: html/Admin/Elements/EditScrip:103
-msgid "Custom action preparation code"
-msgstr "動作å‰åŸ·è¡Œç¨‹å¼"
-
-#: html/Admin/Elements/EditScrip:99
-msgid "Custom condition"
-msgstr "自訂æ¢ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field %1 %2 %3"
-msgstr "è‡ªè¨‚æ¬„ä½ %1 %2 %3"
-
-#: NOT FOUND IN SOURCE
-msgid "Custom field %1 does not apply to this object"
-msgstr "è‡ªè¨‚æ¬„ä½ %1 ä¸é©ç”¨æ–¼æ­¤ç‰©ä»¶"
-
-#: lib/RT/Tickets_Overlay.pm:2424
-#. ($CF->Name)
-msgid "Custom field %1 has a value."
-msgstr "è‡ªè¨‚æ¬„ä½ %1 已有值"
-
-#: lib/RT/Tickets_Overlay.pm:2420
-#. ($CF->Name)
-msgid "Custom field %1 has no value."
-msgstr "è‡ªè¨‚æ¬„ä½ %1 沒有值"
-
-#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754
-#. ($args{'Field'})
-msgid "Custom field %1 not found"
-msgstr "找ä¸åˆ°è‡ªè¨‚æ¬„ä½ %1"
-
-#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121
-#. ($cf)
-#. ($obj->Name)
-msgid "Custom field '%1'"
-msgstr ""
-
-#: 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
-#. ($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:419
-msgid "Custom field value could not be deleted"
-msgstr "無法刪除自訂欄ä½å€¼"
-
-#: lib/RT/CustomField_Overlay.pm:1169
-msgid "Custom field value could not be found"
-msgstr "找ä¸åˆ°è‡ªè¨‚欄ä½å€¼"
-
-#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417
-msgid "Custom field value deleted"
-msgstr "自訂欄ä½å€¼åˆªé™¤æˆåŠŸ"
-
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638
-msgid "CustomField"
-msgstr "自訂欄ä½"
-
-#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75
-msgid "Customize"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Data error"
-msgstr "資料錯誤"
-
-#: NOT FOUND IN SOURCE
-msgid "DatabaseBindRemote"
-msgstr "容許外部連線"
-
-#: NOT FOUND IN SOURCE
-msgid "DatabaseName"
-msgstr "MySQL資料庫"
-
-#: NOT FOUND IN SOURCE
-msgid "Date of Departure"
-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
-msgid "Dates"
-msgstr "日期"
-
-#: NOT FOUND IN SOURCE
-msgid "Dec"
-msgstr "å二月"
-
-#: lib/RT/Date.pm:452
-msgid "Dec."
-msgstr "12"
-
-#: NOT FOUND IN SOURCE
-msgid "December"
-msgstr "å二月"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Approval"
-msgstr "é è¨­ç°½æ ¸"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Autoresponse Template"
-msgstr "é è¨­è‡ªå‹•å›žæ‡‰ç¯„本"
-
-#: etc/initialdata:222
-msgid "Default Autoresponse template"
-msgstr "é è¨­è‡ªå‹•å›žæ‡‰ç¯„本"
-
-#: html/Tools/Offline.html:61
-msgid "Default Queue"
-msgstr "é è¨­è¡¨å–®"
-
-#: html/Tools/Offline.html:70
-msgid "Default Requestor"
-msgstr "é è¨­ç”³è«‹äºº"
-
-#: NOT FOUND IN SOURCE
-msgid "Default Value"
-msgstr "é è¨­å€¼"
-
-#: etc/initialdata:296
-msgid "Default admin comment template"
-msgstr "é è¨­ç®¡ç†å“¡è©•è«–範本"
-
-#: etc/initialdata:275
-msgid "Default admin correspondence template"
-msgstr "é è¨­ç®¡ç†å“¡å›žè¦†ç¯„本"
-
-#: etc/initialdata:287
-msgid "Default correspondence template"
-msgstr "é è¨­å›žè¦†ç¯„本"
-
-#: etc/initialdata:253
-msgid "Default transaction template"
-msgstr "é è¨­æ›´å‹•ç¯„本"
-
-#: NOT FOUND IN SOURCE
-msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "é è¨­ï¼š%1/%2 已自 %3 改為 %4"
-
-#: NOT FOUND IN SOURCE
-msgid "DefaultApproval"
-msgstr "é è¨­ç°½æ ¸"
-
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
-msgid "Delegate rights"
-msgstr "代ç†äººæ¬Šé™"
-
-#: lib/RT/System.pm:84
-msgid "Delegate specific rights which have been granted to you."
-msgstr "å°‡æ“有的權é™å§”託他人代ç†"
-
-#: lib/RT/System.pm:84
-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 "代ç†ç‹€æ…‹"
-
-#: html/User/Elements/Tabs:59
-msgid "Delegation"
-msgstr "代ç†äººæ¬Šé™"
-
-#: NOT FOUND IN SOURCE
-msgid "Delegation Groups"
-msgstr "代ç†äººç¾¤çµ„"
-
-#: NOT FOUND IN SOURCE
-msgid "Delegation Rights"
-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
-msgid "Delete"
-msgstr "刪除"
-
-#: html/Admin/Elements/EditTemplates:79
-msgid "Delete Template"
-msgstr "刪除範本"
-
-#: lib/RT/SavedSearch.pm:220
-#. ($msg)
-msgid "Delete failed: %1"
-msgstr ""
-
-#: html/Admin/Elements/EditScrips:74
-msgid "Delete selected scrips"
-msgstr "刪除指定的手續"
-
-#: lib/RT/Queue_Overlay.pm:114
-msgid "Delete tickets"
-msgstr "刪除申請單"
-
-#: html/Search/Bulk.html:159
-msgid "Delete values"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:114
-msgid "DeleteTicket"
-msgstr "刪除申請單"
-
-#: lib/RT/SavedSearch.pm:218
-msgid "Deleted search"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Deleting this object could break referential integrity"
-msgstr "刪除此物件å¯èƒ½ç ´å£žåƒè€ƒå®Œæ•´æ€§"
-
-#: lib/RT/Queue_Overlay.pm:394
-msgid "Deleting this object would break referential integrity"
-msgstr "刪除此物件å¯èƒ½ç ´å£žåƒè€ƒå®Œæ•´æ€§"
-
-#: lib/RT/User_Overlay.pm:512
-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
-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 "差旅截止日"
-
-#: 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
-msgid "Depended on by"
-msgstr "å¯æŽ¥çºŒè™•ç†çš„申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Dependencies: \\n"
-msgstr "附屬性:\\n"
-
-#: lib/RT/Transaction_Overlay.pm:718
-#. ($value)
-msgid "Dependency by %1 added"
-msgstr "已加入å¯æŽ¥çºŒè™•ç†çš„申請單 %1"
-
-#: lib/RT/Transaction_Overlay.pm:758
-#. ($value)
-msgid "Dependency by %1 deleted"
-msgstr "已移除å¯æŽ¥çºŒè™•ç†çš„申請單 %1"
-
-#: lib/RT/Transaction_Overlay.pm:715
-#. ($value)
-msgid "Dependency on %1 added"
-msgstr "已加入需先處ç†çš„申請單 %1"
-
-#: lib/RT/Transaction_Overlay.pm:755
-#. ($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
-msgid "Depends on"
-msgstr "需先處ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "DependsOn"
-msgstr "需先處ç†"
-
-#: html/Search/Elements/DisplayOptions:86
-msgid "Desc"
-msgstr ""
-
-#: html/Elements/SelectSortOrder:56
-msgid "Descending"
-msgstr "éžæ¸›"
-
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:152
-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
-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 "直接"
-
-#: NOT FOUND IN SOURCE
-msgid "Disability"
-msgstr "殘障身分"
-
-#: NOT FOUND IN SOURCE
-msgid "Disability Type"
-msgstr "殘障類別"
-
-#: NOT FOUND IN SOURCE
-msgid "Disabled"
-msgstr "åœç”¨"
-
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
-msgid "Display"
-msgstr "顯示內容"
-
-#: lib/RT/Queue_Overlay.pm:93
-msgid "Display Access Control List"
-msgstr "顯示權é™æŽ§åˆ¶æ¸…å–®"
-
-#: html/Search/Elements/DisplayOptions:46
-msgid "Display Columns"
-msgstr "顯示欄ä½"
-
-#: lib/RT/Queue_Overlay.pm:99
-msgid "Display Scrip templates for this queue"
-msgstr "顯示此表單的範本"
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "Display Scrips for this queue"
-msgstr "顯示此表單的手續"
-
-#: html/Ticket/Elements/ShowHistory:59
-msgid "Display mode"
-msgstr "顯示模å¼"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "Display saved searches for this group"
-msgstr "顯示此群組已儲存的查詢"
-
-#: NOT FOUND IN SOURCE
-msgid "Display ticket #%1"
-msgstr "顯示第%1號申請單"
-
-#: html/Elements/Footer:61
-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:75
-msgid "Do anything and everything"
-msgstr "å…許一切æ“作"
-
-#: html/Elements/Refresh:51
-msgid "Don't refresh this page."
-msgstr "ä¸æ›´æ–°æ­¤é é¢ã€‚"
-
-#: NOT FOUND IN SOURCE
-msgid "Don't show search results"
-msgstr "ä¸é¡¯ç¤ºæŸ¥è©¢çµæžœ"
-
-#: NOT FOUND IN SOURCE
-msgid "Done"
-msgstr "完æˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "Down"
-msgstr "下一é "
-
-#: html/Ticket/Elements/ShowTransactionAttachments:82
-msgid "Download"
-msgstr "下載"
-
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
-msgid "Download as a tab-delimited file"
-msgstr "下載以 Tab 分隔的檔案"
-
-#: NOT FOUND IN SOURCE
-msgid "Dr."
-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
-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'"
-
-#: NOT FOUND IN SOURCE
-msgid "ERROR: Couldn't load ticket '%1': %2.\\n"
-msgstr "無法載入申請單 '%1':%2.\\n"
-
-#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107
-msgid "Edit"
-msgstr "編輯"
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Conditions"
-msgstr "編輯å‰ç½®æ¢ä»¶"
-
-#: html/Search/Bulk.html:149
-msgid "Edit Custom Fields"
-msgstr ""
-
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
-#. ($Object->Name)
-msgid "Edit Custom Fields for %1"
-msgstr "編輯 %1 的自訂欄ä½"
-
-#: html/Admin/Global/CustomFields/Groups.html:54
-msgid "Edit Custom Fields for all groups"
-msgstr ""
-
-#: html/Admin/Global/CustomFields/Users.html:54
-msgid "Edit Custom Fields for all users"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Custom Fields for queue %1"
-msgstr "編輯表單 %1 的自訂欄ä½"
-
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54
-msgid "Edit Custom Fields for tickets in all queues"
-msgstr ""
-
-#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
-msgid "Edit Links"
-msgstr "編輯申請單關係"
-
-#: html/Search/Edit.html:68
-msgid "Edit Query"
-msgstr "編輯查詢"
-
-#: html/Ticket/Elements/Tabs:214
-msgid "Edit Search"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Edit Subgroups"
-msgstr "新增/維護å­ç¾¤çµ„"
-
-#: html/Admin/Queues/Templates.html:63
-#. ($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:167
-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
-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:167
-msgid "EditSavedSearches"
-msgstr "編輯已儲存的查詢"
-
-#: html/Admin/Queues/Modify.html:140
-#. ($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
-#. ($CustomFieldObj->Name())
-msgid "Editing CustomField %1"
-msgstr "ç·¨è¼¯è‡ªè¨‚æ¬„ä½ %1"
-
-#: html/Admin/Groups/Members.html:53
-#. ($Group->Name)
-msgid "Editing membership for group %1"
-msgstr "編輯群組 %1 çš„æˆå“¡è³‡è¨Š"
-
-#: html/User/Groups/Members.html:150
-#. ($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 "最高學歷"
-
-#: NOT FOUND IN SOURCE
-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
-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
-msgid "Email"
-msgstr "é›»å­éƒµä»¶ä¿¡ç®±"
-
-#: NOT FOUND IN SOURCE
-msgid "Email Address"
-msgstr "é›»å­éƒµä»¶ä¿¡ç®±"
-
-#: lib/RT/User_Overlay.pm:235
-msgid "Email address in use"
-msgstr "此電å­éƒµä»¶ä¿¡ç®±å·²è¢«ä½¿ç”¨"
-
-#: NOT FOUND IN SOURCE
-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 "代ç†å•Ÿå‹•"
-
-#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72
-msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "啟用(å–消勾é¸å°‡åœç”¨æ­¤è‡ªè¨‚欄ä½)"
-
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
-msgid "Enabled (Unchecking this box disables this group)"
-msgstr "啟用(å–消勾é¸å°‡åœç”¨æ­¤ç¾¤çµ„)"
-
-#: html/Admin/Queues/Modify.html:105
-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 "啟動日期:"
-
-#: html/Admin/Queues/index.html:78
-msgid "Enabled Queues"
-msgstr "已啟用的表單"
-
-#: NOT FOUND IN SOURCE
-msgid "Enabled Status"
-msgstr "啟用狀態"
-
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138
-#. (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"
-
-#: NOT FOUND IN SOURCE
-msgid "End of Trial"
-msgstr "試用期滿日"
-
-#: NOT FOUND IN SOURCE
-msgid "English Name"
-msgstr "英文姓å"
-
-#: lib/RT/CustomField_Overlay.pm:64
-msgid "Enter multiple values"
-msgstr "éµå…¥å¤šé‡é …ç›®"
-
-#: html/Elements/EditLinks:126
-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:65
-msgid "Enter one value"
-msgstr "éµå…¥å–®ä¸€é …ç›®"
-
-#: html/Elements/EditLinks:123
-msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
-msgstr "éµå…¥æ¬²å°‡è¡¨å–®é€£çµè‡³çš„物件或 URI。項目之間請以空白隔開。"
-
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
-msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr "éµå…¥ç”³è«‹å–®å¯éˆçµåˆ°çš„申請單編號或網å€ã€‚項目之間請以空白隔開。"
-
-#: lib/RT/CustomField_Overlay.pm:66
-msgid "Enter up to %1 values"
-msgstr "éµå…¥æœ€å¤š %1 個項目"
-
-#: 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 "時間填表"
-
-#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
-msgid "Error"
-msgstr "錯誤"
-
-#: NOT FOUND IN SOURCE
-msgid "Error adding watcher"
-msgstr "新增視察員失敗"
-
-#: lib/RT/Queue_Overlay.pm:672
-msgid "Error in parameters to Queue->AddWatcher"
-msgstr "表單->新增視察員的åƒæ•¸æœ‰èª¤"
-
-#: lib/RT/Queue_Overlay.pm:833
-msgid "Error in parameters to Queue->DeleteWatcher"
-msgstr "表單->刪除視察員的åƒæ•¸æœ‰èª¤"
-
-#: lib/RT/Ticket_Overlay.pm:1372
-msgid "Error in parameters to Ticket->AddWatcher"
-msgstr "申請單->新增視察員的åƒæ•¸æœ‰èª¤"
-
-#: lib/RT/Ticket_Overlay.pm:1538
-msgid "Error in parameters to Ticket->DeleteWatcher"
-msgstr "申請單->刪除視察員的åƒæ•¸æœ‰èª¤"
-
-#: bin/rt-crontool:285
-msgid "Escalate tickets"
-msgstr "調整申請單優先等級"
-
-#: NOT FOUND IN SOURCE
-msgid "Estimate"
-msgstr "é è¨ˆ"
-
-#: html/Ticket/Elements/ShowBasics:57
-msgid "Estimated"
-msgstr "é è¨ˆ"
-
-#: etc/initialdata:20
-msgid "Everyone"
-msgstr "所有人"
-
-#: bin/rt-crontool:271
-msgid "Example:"
-msgstr "範例:"
-
-#: NOT FOUND IN SOURCE
-msgid "Existing user renamed from %1 to %2"
-msgstr "ç¾æœ‰ä½¿ç”¨è€… %1 已改å為 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "Export"
-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 "外部介é¢ç¶²å€"
-
-#: html/Admin/Users/Modify.html:99
-msgid "Extra info"
-msgstr "備註"
-
-#: lib/RT/SavedSearch.pm:177
-msgid "Failed to create search attribute"
-msgstr "查詢屬性建立失敗"
-
-#: lib/RT/User_Overlay.pm:376
-msgid "Failed to find 'Privileged' users pseudogroup."
-msgstr "找ä¸åˆ°ã€Œå…§éƒ¨æˆå“¡ã€è™›æ“¬ç¾¤çµ„的使用者。"
-
-#: lib/RT/User_Overlay.pm:383
-msgid "Failed to find 'Unprivileged' users pseudogroup"
-msgstr "找ä¸åˆ°ã€Œéžå…§éƒ¨æˆå“¡ã€è™›æ“¬ç¾¤çµ„的使用者。"
-
-#: bin/rt-crontool:206
-#. ($modname, $@)
-msgid "Failed to load module %1. (%2)"
-msgstr "無法載入模組 %1. (%2)"
-
-#: lib/RT/SavedSearch.pm:152
-#. ($privacy)
-msgid "Failed to load object for %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Feb"
-msgstr "二月"
-
-#: lib/RT/Date.pm:442
-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 "欄ä½é¡žåˆ¥"
-
-#: html/Elements/SelectAttachmentField:50
-msgid "Filename"
-msgstr "檔å"
-
-#: lib/RT/CustomField_Overlay.pm:69
-msgid "Fill in multiple text areas"
-msgstr "填入多個文字框"
-
-#: lib/RT/CustomField_Overlay.pm:74
-msgid "Fill in multiple wikitext areas"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:70
-msgid "Fill in one text area"
-msgstr "填入一個文字框"
-
-#: lib/RT/CustomField_Overlay.pm:75
-msgid "Fill in one wikitext area"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118
-msgid "Fill in this field with a URL."
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:71
-msgid "Fill in up to %1 text areas"
-msgstr "填入最多 %1 個文字框"
-
-#: lib/RT/CustomField_Overlay.pm:76
-msgid "Fill in up to %1 wikitext areas"
-msgstr ""
-
-#: 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 "最終"
-
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841
-msgid "Final Priority"
-msgstr "最終順ä½"
-
-#: lib/RT/Ticket_Overlay.pm:1164
-msgid "FinalPriority"
-msgstr "最終順ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Financial Department:"
-msgstr "財務部:"
-
-#: NOT FOUND IN SOURCE
-msgid "Find group whose"
-msgstr "尋找群組的"
-
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
-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
-msgid "Find people whose"
-msgstr "尋找人員的"
-
-#: NOT FOUND IN SOURCE
-msgid "Find queues whose"
-msgstr "尋找表單的"
-
-#: html/Search/Results.html:147
-msgid "Find tickets"
-msgstr "尋找申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Finish Approval"
-msgstr "簽核完畢"
-
-#: 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 "固定ç­"
-
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
-msgid "Foo Bar Baz"
-msgstr "甲 乙 丙"
-
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
-msgid "Foo!"
-msgstr "甲ï¼"
-
-#: html/Search/Bulk.html:83
-msgid "Force change"
-msgstr "強制更æ›"
-
-#: NOT FOUND IN SOURCE
-msgid "Form Processing"
-msgstr "é›»å­è¡¨å–®ä½œæ¥­å€"
-
-#: html/Search/Elements/EditFormat:52
-msgid "Format"
-msgstr ""
-
-#: html/Search/Results.html:145
-#. ($ticketcount)
-msgid "Found %quant(%1,ticket)"
-msgstr "找到 %1 張申請單"
-
-#: lib/RT/Record.pm:956
-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 "時間輸入"
-
-#: NOT FOUND IN SOURCE
-msgid "Fri"
-msgstr "星期五"
-
-#: lib/RT/Date.pm:421
-msgid "Fri."
-msgstr "星期五"
-
-#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72
-msgid "Full headers"
-msgstr "完整標頭檔"
-
-#: NOT FOUND IN SOURCE
-msgid "Gecos"
-msgstr "登入帳號"
-
-#: NOT FOUND IN SOURCE
-msgid "Gender"
-msgstr "性別"
-
-#: html/Tools/Offline.html:85
-msgid "Get template from file"
-msgstr "å–出檔案裡的範本"
-
-#: NOT FOUND IN SOURCE
-msgid "Getting the current user from a pgp sig\\n"
-msgstr "å–å¾—ç›®å‰ä½¿ç”¨è€…çš„ pgp 簽章\\n"
-
-#: lib/RT/Transaction_Overlay.pm:684
-#. ($New->Name)
-msgid "Given to %1"
-msgstr "交予 %1"
-
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
-msgid "Global"
-msgstr "全域設定"
-
-#: NOT FOUND IN SOURCE
-msgid "Global Approval"
-msgstr "全域簽核"
-
-#: html/Admin/Elements/EditCustomFields:55
-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 "全域設定"
-
-#: html/Admin/Global/CustomFields/index.html:59
-msgid "Global custom field configuration"
-msgstr ""
-
-#: html/Admin/Global/MyRT.html:48
-#. ($pane)
-msgid "Global portlet %1 saved."
-msgstr ""
-
-#: html/Admin/Elements/SelectTemplate:59
-#. (loc($Template->Name))
-msgid "Global template: %1"
-msgstr "全域範本:%1"
-
-#: NOT FOUND IN SOURCE
-msgid "GlobalApproval"
-msgstr "全域簽核"
-
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89
-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
-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 "到é é¢"
-
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
-msgid "Goto ticket"
-msgstr "跳到申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Grand"
-msgstr "上"
-
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
-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 "群組å稱:"
-
-#: 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
-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:983
-msgid "Group already has member"
-msgstr "群組內已有此æˆå“¡"
-
-#: NOT FOUND IN SOURCE
-msgid "Group could not be created."
-msgstr "無法新增群組"
-
-#: html/Admin/Groups/Modify.html:109
-#. ($create_msg)
-msgid "Group could not be created: %1"
-msgstr "無法新增群組:%1"
-
-#: lib/RT/Group_Overlay.pm:521
-msgid "Group created"
-msgstr "群組新增完畢"
-
-#: NOT FOUND IN SOURCE
-msgid "Group created: %1"
-msgstr "群組 %1 新增完畢"
-
-#: lib/RT/Group_Overlay.pm:1155
-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
-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"
-
-#: 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 "群組:"
-
-#: 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
-msgid "Groups"
-msgstr "群組"
-
-#: lib/RT/Group_Overlay.pm:989
-msgid "Groups can't be members of their members"
-msgstr "ä¸èƒ½å°‡ç¾¤çµ„設為群組內æˆå“¡"
-
-#: html/Admin/Groups/index.html:86
-msgid "Groups matching search criteria"
-msgstr "符åˆæŸ¥è©¢æ¢ä»¶çš„群組"
-
-#: html/Ticket/Elements/ShowRequestor:77
-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 屬性"
-
-#: NOT FOUND IN SOURCE
-msgid "Health Insurance"
-msgstr "å¥ä¿è£œåŠ©èº«ä»½"
-
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
-msgid "Hello!"
-msgstr "å—¨ï¼"
-
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
-#. ($name)
-msgid "Hello, %1"
-msgstr "嗨,%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Help"
-msgstr "說明"
-
-#: NOT FOUND IN SOURCE
-msgid "Help Desks"
-msgstr "å„項業務窗å£"
-
-#: NOT FOUND IN SOURCE
-msgid "Hidden"
-msgstr "éš±è—"
-
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111
-msgid "History"
-msgstr "紀錄"
-
-#: html/Admin/Groups/History.html:62
-#. ($GroupObj->Name)
-msgid "History of the group %1"
-msgstr "群組 %1 的紀錄"
-
-#: html/Admin/Users/History.html:62
-#. ($UserObj->Name)
-msgid "History of the user %1"
-msgstr "使用者 %1 的紀錄"
-
-#: NOT FOUND IN SOURCE
-msgid "HomePhone"
-msgstr "ä½è™•é›»è©±"
-
-#: html/Elements/Tabs:65
-msgid "Homepage"
-msgstr "主é "
-
-#: NOT FOUND IN SOURCE
-msgid "Hotel Expense"
-msgstr "ä½å®¿è²»"
-
-#: html/Elements/SelectTimeUnits:48
-msgid "Hours"
-msgstr ""
-
-#: lib/RT/Base.pm:119
-#. (6)
-msgid "I have %quant(%1,concrete mixer)."
-msgstr "我有 %quant(%1,份固體攪拌器)。"
-
-#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415
-msgid "I'm lost"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "ID Number"
-msgstr "身分證號"
-
-#: NOT FOUND IN SOURCE
-msgid "ID Type"
-msgstr "身分類別"
-
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766
-msgid "Id"
-msgstr "編號"
-
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
-msgid "Identity"
-msgstr "身份"
-
-#: etc/initialdata:429
-msgid "If an approval is rejected, reject the original and delete pending approvals"
-msgstr "若簽核單é­åˆ°é§å›žï¼Œå‰‡é€£å¸¶é§å›žåŽŸç”³è«‹å–®ï¼Œä¸¦åˆªé™¤å…¶ä»–相關的待簽核事項"
-
-#: html/Tools/Offline.html:74
-msgid "If no Requestor is specified, create tickets with this requestor."
-msgstr "若沒有指定申請者,則以此使用者作為申請者"
-
-#: html/Tools/Offline.html:65
-msgid "If no queue is specified, create tickets in this queue."
-msgstr "申請單若沒有指定表單,則將它新增在此表單內"
-
-#: bin/rt-crontool:267
-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
-msgid "If you've updated anything above, be sure to"
-msgstr "若您已更新以上資料,請記得按一下"
-
-#: lib/RT/Record.pm:947
-msgid "Illegal value for %1"
-msgstr "%1 的值錯誤"
-
-#: NOT FOUND IN SOURCE
-msgid "Image"
-msgstr "圖片"
-
-#: lib/RT/Record.pm:950
-msgid "Immutable field"
-msgstr "此欄ä½å€¼ä¸å¯æ›´å‹•"
-
-#: NOT FOUND IN SOURCE
-msgid "Import"
-msgstr "匯入"
-
-#: NOT FOUND IN SOURCE
-msgid "Include disabled custom fields in listing."
-msgstr "列出åœç”¨çš„自訂欄ä½"
-
-#: html/Admin/Groups/index.html:65
-msgid "Include disabled groups in listing."
-msgstr "列出åœç”¨çš„群組"
-
-#: html/Admin/Queues/index.html:65
-msgid "Include disabled queues in listing."
-msgstr "列出åœç”¨çš„表單"
-
-#: html/Admin/Users/index.html:71
-msgid "Include disabled users in search."
-msgstr "列出åœç”¨çš„使用者"
-
-#: html/Admin/CustomFields/Modify.html:113
-msgid "Include page"
-msgstr ""
-
-#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441
-msgid "Incomplete Query"
-msgstr ""
-
-#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438
-msgid "Incomplete query"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Indirect Employee"
-msgstr "直接/間接員工"
-
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816
-msgid "Initial Priority"
-msgstr "åˆå§‹å„ªå…ˆé †ä½"
-
-#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165
-msgid "InitialPriority"
-msgstr "åˆå§‹å„ªå…ˆé †ä½"
-
-#: lib/RT/ScripAction_Overlay.pm:133
-msgid "Input error"
-msgstr "輸入錯誤"
-
-#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162
-#. ($self->FriendlyPattern)
-#. ($CF->FriendlyPattern)
-msgid "Input must match %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Interest noted"
-msgstr "登記æˆåŠŸ"
-
-#: lib/RT/Ticket_Overlay.pm:3503
-msgid "Internal Error"
-msgstr "內部錯誤"
-
-#: lib/RT/Record.pm:308
-#. ($id->{error_message})
-msgid "Internal Error: %1"
-msgstr "內部錯誤:%1"
-
-#: lib/RT/Group_Overlay.pm:668
-msgid "Invalid Group Type"
-msgstr "錯誤的群組類別"
-
-#: lib/RT/Principal_Overlay.pm:161
-msgid "Invalid Right"
-msgstr "錯誤的權é™"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid Type"
-msgstr "錯誤的類型"
-
-#: lib/RT/Record.pm:952
-msgid "Invalid data"
-msgstr "錯誤的資料"
-
-#: NOT FOUND IN SOURCE
-msgid "Invalid owner. Defaulting to 'nobody'."
-msgstr "錯誤的承辦人。改為é è¨­æ‰¿è¾¦äººã€Œnobodyã€ã€‚"
-
-#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678
-#. ($msg)
-msgid "Invalid pattern: %1"
-msgstr ""
-
-#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244
-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
-msgid "Invalid right"
-msgstr "錯誤的權é™"
-
-#: lib/RT/Record.pm:283
-#. ($key)
-msgid "Invalid value for %1"
-msgstr "%1 的值錯誤"
-
-#: lib/RT/Record.pm:1610
-msgid "Invalid value for custom field"
-msgstr "錯誤的自訂欄ä½å€¼"
-
-#: lib/RT/Ticket_Overlay.pm:424
-msgid "Invalid value for status"
-msgstr "錯誤的狀態值"
-
-#: NOT FOUND IN SOURCE
-msgid "IssueStatement"
-msgstr "é€å‡ºé™³è¿°"
-
-#: bin/rt-crontool:268
-msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
-msgstr "請絕å°ä¸è¦è®“未具權é™çš„使用者執行此工具程å¼ã€‚"
-
-#: bin/rt-crontool:269
-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
-msgid "It takes several arguments:"
-msgstr "它接å—下列åƒæ•¸ï¼š"
-
-#: html/Search/Elements/EditFormat:85
-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 "待簽核項目"
-
-#: NOT FOUND IN SOURCE
-msgid "Jan"
-msgstr "一月"
-
-#: lib/RT/Date.pm:441
-msgid "Jan."
-msgstr "01"
-
-#: NOT FOUND IN SOURCE
-msgid "January"
-msgstr "一月"
-
-#: NOT FOUND IN SOURCE
-msgid "Job"
-msgstr "è·ç¨±"
-
-#: lib/RT/Group_Overlay.pm:166
-msgid "Join or leave this group"
-msgstr "加入或離開此群組"
-
-#: NOT FOUND IN SOURCE
-msgid "Jul"
-msgstr "七月"
-
-#: lib/RT/Date.pm:447
-msgid "Jul."
-msgstr "07"
-
-#: NOT FOUND IN SOURCE
-msgid "July"
-msgstr "七月"
-
-#: html/Ticket/Elements/Tabs:125
-msgid "Jumbo"
-msgstr "全部資訊"
-
-#: NOT FOUND IN SOURCE
-msgid "Jun"
-msgstr "六月"
-
-#: lib/RT/Date.pm:446
-msgid "Jun."
-msgstr "06"
-
-#: NOT FOUND IN SOURCE
-msgid "June"
-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 "使用語言"
-
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
-msgid "Language"
-msgstr "語言"
-
-#: html/Search/Elements/EditFormat:79
-msgid "Large"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:96
-msgid "Last"
-msgstr "上次更新"
-
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
-msgid "Last Contact"
-msgstr "上次è¯çµ¡"
-
-#: html/Elements/SelectDateType:50
-msgid "Last Contacted"
-msgstr "上次è¯çµ¡æ—¥æœŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Last Notified"
-msgstr "上次通知"
-
-#: html/Elements/SelectDateType:51
-msgid "Last Updated"
-msgstr "上次更新"
-
-#: NOT FOUND IN SOURCE
-msgid "LastUpdated"
-msgstr "上次更新"
-
-#: html/Search/Elements/PickBasics:103
-msgid "LastUpdatedBy"
-msgstr "上次更新者"
-
-#: html/Ticket/Elements/ShowBasics:68
-msgid "Left"
-msgstr "剩餘時間"
-
-#: html/Admin/Users/Modify.html:109
-msgid "Let this user access RT"
-msgstr "å…許這å使用者登入"
-
-#: html/Admin/Users/Modify.html:113
-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"
-
-#: html/Search/Elements/EditFormat:68
-msgid "Link"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Link a Queue"
-msgstr "申請表單連çµ"
-
-#: lib/RT/Record.pm:1306
-msgid "Link already exists"
-msgstr "æ­¤éˆçµå·²å­˜åœ¨"
-
-#: lib/RT/Record.pm:1320
-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
-msgid "Link not found"
-msgstr "找ä¸åˆ°éˆçµ"
-
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
-#. ($Ticket->Id)
-msgid "Link ticket #%1"
-msgstr "éˆçµç”³è«‹å–® #%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Link ticket %1"
-msgstr "éˆçµç”³è«‹å–® %1"
-
-#: html/Admin/CustomFields/Modify.html:102
-msgid "Link values to"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:700
-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
-msgid "Links"
-msgstr "éˆçµ"
-
-#: NOT FOUND IN SOURCE
-msgid "List All Users"
-msgstr "列出所有用戶資料"
-
-#: html/Search/Elements/EditSearches:75
-msgid "Load"
-msgstr "載入"
-
-#: html/Search/Elements/EditSearches:73
-msgid "Load saved search:"
-msgstr "載入已儲存的查詢:"
-
-#: lib/RT/System.pm:86
-msgid "LoadSavedSearch"
-msgstr ""
-
-#: html/Admin/Tools/Configuration.html:64
-msgid "Loaded perl modules"
-msgstr "已載入的 Perl 模組"
-
-#: lib/RT/SavedSearch.pm:111
-#. ($self->Name)
-msgid "Loaded search %1"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
-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 "紀錄檔å"
-
-#: html/Elements/Header:91
-#. ("<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
-msgid "Login"
-msgstr "登入"
-
-#: html/Elements/Header:101
-msgid "Logout"
-msgstr "登出"
-
-#: NOT FOUND IN SOURCE
-msgid "Long-term contractor"
-msgstr "長期契約員工"
-
-#: lib/RT/CustomField_Overlay.pm:932
-msgid "Lookup type mismatch"
-msgstr "å°æ‡‰çš„類別ä¸ç¬¦"
-
-#: html/Search/Bulk.html:82
-msgid "Make Owner"
-msgstr "新增承辦人"
-
-#: html/Search/Bulk.html:106
-msgid "Make Status"
-msgstr "新增ç¾æ³"
-
-#: html/Search/Bulk.html:114
-msgid "Make date Due"
-msgstr "新增到期日"
-
-#: html/Search/Bulk.html:116
-msgid "Make date Resolved"
-msgstr "新增解決日期"
-
-#: html/Search/Bulk.html:110
-msgid "Make date Started"
-msgstr "新增實際起始日期"
-
-#: html/Search/Bulk.html:108
-msgid "Make date Starts"
-msgstr "新增應起始日期"
-
-#: html/Search/Bulk.html:112
-msgid "Make date Told"
-msgstr "新增報告日期"
-
-#: html/Search/Bulk.html:102
-msgid "Make priority"
-msgstr "新增優先順ä½"
-
-#: html/Search/Bulk.html:104
-msgid "Make queue"
-msgstr "新增表單"
-
-#: html/Search/Bulk.html:100
-msgid "Make subject"
-msgstr "新增主題"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "Make this group visible to user"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Male"
-msgstr "ç”·"
-
-#: html/Admin/index.html:78
-msgid "Manage custom fields and custom field values"
-msgstr "管ç†è‡ªè¨‚欄ä½åŠæ¬„ä½å€¼"
-
-#: html/Admin/index.html:69
-msgid "Manage groups and group membership"
-msgstr "管ç†ç¾¤çµ„åŠæ‰€å±¬æˆå“¡"
-
-#: html/Admin/index.html:85
-msgid "Manage properties and configuration which apply to all queues"
-msgstr "管ç†é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„屬性與設定"
-
-#: html/Admin/index.html:74
-msgid "Manage queues and queue-specific properties"
-msgstr "管ç†å„表單åŠç›¸é—œå±¬æ€§"
-
-#: html/Admin/index.html:64
-msgid "Manage users and passwords"
-msgstr "管ç†ä½¿ç”¨è€…與密碼"
-
-#: NOT FOUND IN SOURCE
-msgid "Manager"
-msgstr "經ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Mar"
-msgstr "三月"
-
-#: lib/RT/Date.pm:443
-msgid "Mar."
-msgstr "03"
-
-#: NOT FOUND IN SOURCE
-msgid "March"
-msgstr "三月"
-
-#: NOT FOUND IN SOURCE
-msgid "Marketing Department"
-msgstr "行銷部"
-
-#: NOT FOUND IN SOURCE
-msgid "Match Pattern"
-msgstr "符åˆæ¨£å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "May"
-msgstr "五月"
-
-#: lib/RT/Date.pm:445
-msgid "May."
-msgstr "05"
-
-#: lib/RT/Transaction_Overlay.pm:731
-#. ($value)
-msgid "Member %1 added"
-msgstr "æˆå“¡ %1 新增完畢"
-
-#: lib/RT/Transaction_Overlay.pm:771
-#. ($value)
-msgid "Member %1 deleted"
-msgstr "æˆå“¡ %1 刪除完畢"
-
-#: lib/RT/Group_Overlay.pm:1000
-msgid "Member added"
-msgstr "新增æˆå“¡å®Œç•¢"
-
-#: lib/RT/Group_Overlay.pm:1162
-msgid "Member deleted"
-msgstr "æˆå“¡å·²åˆªé™¤"
-
-#: lib/RT/Group_Overlay.pm:1166
-msgid "Member not deleted"
-msgstr "æˆå“¡æœªåˆªé™¤"
-
-#: html/Elements/SelectLinkType:47
-msgid "Member of"
-msgstr "隸屬於"
-
-#: NOT FOUND IN SOURCE
-msgid "Member since"
-msgstr "註冊日期"
-
-#: NOT FOUND IN SOURCE
-msgid "MemberOf"
-msgstr "隸屬於"
-
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
-msgid "Members"
-msgstr "æˆå“¡"
-
-#: lib/RT/Transaction_Overlay.pm:728
-#. ($value)
-msgid "Membership in %1 added"
-msgstr "所屬群組 %1 加入完畢"
-
-#: lib/RT/Transaction_Overlay.pm:768
-#. ($value)
-msgid "Membership in %1 deleted"
-msgstr "所屬群組 %1 移除完畢"
-
-#: html/Admin/Elements/UserTabs:61
-msgid "Memberships"
-msgstr "所屬群組"
-
-#: html/Admin/Users/Memberships.html:60
-#. ($UserObj->Name)
-msgid "Memberships of the user %1"
-msgstr "使用者 %1 的所屬群組"
-
-#: lib/RT/Ticket_Overlay.pm:2893
-msgid "Merge Successful"
-msgstr "æ•´åˆå®Œç•¢"
-
-#: lib/RT/Ticket_Overlay.pm:2780
-msgid "Merge failed. Couldn't set EffectiveId"
-msgstr "æ•´åˆå¤±æ•—。無法設定 EffectiveId"
-
-#: lib/RT/Ticket_Overlay.pm:2788
-msgid "Merge failed. Couldn't set Status"
-msgstr ""
-
-#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48
-msgid "Merge into"
-msgstr "æ•´åˆé€²"
-
-#: lib/RT/Transaction_Overlay.pm:734
-#. ($value)
-msgid "Merged into %1"
-msgstr "已整åˆé€² %1"
-
-#: html/Search/Bulk.html:143 html/Ticket/Update.html:118
-msgid "Message"
-msgstr "訊æ¯"
-
-#: html/Ticket/Elements/ShowTransactionAttachments:164
-msgid "Message body not shown because it is too large or is not plain text."
-msgstr "信件內文ä¸æ˜¯ç´”文字,因此無法顯示。"
-
-#: lib/RT/Ticket_Overlay.pm:2451
-msgid "Message could not be recorded"
-msgstr "無法紀錄訊æ¯"
-
-#: lib/RT/Ticket_Overlay.pm:2454
-msgid "Message recorded"
-msgstr "訊æ¯ç´€éŒ„æˆåŠŸ"
-
-#: html/Ticket/Elements/PreviewScrips:122
-msgid "Messages about this ticket will not be sent to..."
-msgstr "此申請單的相關訊æ¯ä¸æœƒå¯„é€çµ¦..."
-
-#: html/Elements/SelectTimeUnits:47
-msgid "Minutes"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Misc. Expense"
-msgstr "雜費"
-
-#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445
-msgid "Mismatched parentheses"
-msgstr "未å°é½Šçš„括號"
-
-#: lib/RT/Record.pm:954
-msgid "Missing a primary key?: %1"
-msgstr "缺少主éµå€¼ï¼Ÿ(%1)"
-
-#: NOT FOUND IN SOURCE
-msgid "Missing mandatory fields"
-msgstr "缺少必填欄ä½"
-
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92
-msgid "Mobile"
-msgstr "行動電話"
-
-#: NOT FOUND IN SOURCE
-msgid "MobilePhone"
-msgstr "行動電話"
-
-#: lib/RT/Queue_Overlay.pm:94
-msgid "Modify Access Control List"
-msgstr "更改權é™æŽ§åˆ¶æ¸…å–®"
-
-#: html/Admin/Elements/ObjectCustomFields:96
-#. (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
-#. (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
-msgid "Modify Group Rights"
-msgstr "更改群組權é™"
-
-#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101
-msgid "Modify Members"
-msgstr "更改æˆå“¡"
-
-#: html/User/Delegation.html:58
-msgid "Modify Rights"
-msgstr "更改權é™"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "Modify Scrip templates for this queue"
-msgstr "更改此表單的範本"
-
-#: lib/RT/Queue_Overlay.pm:100
-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
-msgid "Modify User Rights"
-msgstr "更改使用者權é™"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify Workflow"
-msgstr "更改æµç¨‹"
-
-#: html/Admin/Queues/CustomField.html:66
-#. ($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
-#. ($QueueObj->Name)
-msgid "Modify a scrip for queue %1"
-msgstr "更改 %1 表單內的手續"
-
-#: html/Admin/Global/Scrip.html:75
-msgid "Modify a scrip that applies to all queues"
-msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„手續"
-
-#: html/Admin/CustomFields/Objects.html:90
-#. ($CF->Name)
-msgid "Modify associated objects for %1"
-msgstr "更改é©ç”¨ %1 的物件"
-
-#: NOT FOUND IN SOURCE
-msgid "Modify dates for # %1"
-msgstr "更改 # %1 的日期"
-
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
-#. ($TicketObj->Id)
-msgid "Modify dates for #%1"
-msgstr "更改 #%1 的日期"
-
-#: html/Ticket/ModifyDates.html:57
-#. ($TicketObj->Id)
-msgid "Modify dates for ticket # %1"
-msgstr "更改申請單 # %1 的日期"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
-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
-msgid "Modify global group rights"
-msgstr "更改全域設定的群組權é™"
-
-#: html/Admin/Global/GroupRights.html:54
-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
-msgid "Modify global user rights"
-msgstr "更改全域設定的使用者權é™"
-
-#: html/Admin/Global/UserRights.html:54
-msgid "Modify global user rights."
-msgstr "更改全域設定的使用者權é™ã€‚"
-
-#: lib/RT/Group_Overlay.pm:163
-msgid "Modify group metadata or delete group"
-msgstr "更改群組資料åŠåˆªé™¤ç¾¤çµ„"
-
-#: html/Admin/CustomFields/GroupRights.html:164
-#. ($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
-#. ($GroupObj->Name)
-msgid "Modify group rights for group %1"
-msgstr "更改群組 %1 的群組權é™"
-
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
-#. ($QueueObj->Name)
-msgid "Modify group rights for queue %1"
-msgstr "更改表單 %1 的群組權é™"
-
-#: lib/RT/Group_Overlay.pm:165
-msgid "Modify membership roster for this group"
-msgstr "更改此群組的æˆå“¡åå–®"
-
-#: lib/RT/System.pm:82
-msgid "Modify one's own RT account"
-msgstr "更改個人的帳號資訊"
-
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
-#. ($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
-#. ($Ticket->id)
-#. ($Ticket->Id)
-msgid "Modify people related to ticket #%1"
-msgstr "更改申請單 #%1 éˆçµåˆ°çš„人員"
-
-#: html/Admin/Queues/Scrips.html:67
-#. ($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
-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
-#. (loc($TemplateObj->Name()))
-#. ($TemplateObj->id)
-msgid "Modify template %1"
-msgstr "更改範本 %1"
-
-#: html/Admin/Global/Templates.html:65
-msgid "Modify templates which apply to all queues"
-msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„範本"
-
-#: html/Admin/Global/index.html:85
-msgid "Modify the default \"RT at a glance\" view"
-msgstr "更改é è¨­çš„「RT 一覽ã€æª¢è¦–"
-
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
-#. ($Group->Name)
-msgid "Modify the group %1"
-msgstr "更改群組 %1"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "Modify the queue watchers"
-msgstr "更改表單視察員"
-
-#: html/Admin/Users/Modify.html:309
-#. ($UserObj->Name)
-msgid "Modify the user %1"
-msgstr "更改使用者 %1"
-
-#: html/Ticket/ModifyAll.html:58
-#. ($Ticket->Id)
-msgid "Modify ticket # %1"
-msgstr "更改申請單 # %1"
-
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
-#. ($TicketObj->Id)
-msgid "Modify ticket #%1"
-msgstr "更改申請單 # %1"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "Modify tickets"
-msgstr "更改申請單"
-
-#: html/Admin/CustomFields/UserRights.html:157
-#. ($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
-#. ($GroupObj->Name)
-msgid "Modify user rights for group %1"
-msgstr "更改群組 %1 的使用者權é™"
-
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
-#. ($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:108
-msgid "ModifyCustomField"
-msgstr "更改自訂欄ä½"
-
-#: lib/RT/Group_Overlay.pm:166
-msgid "ModifyOwnMembership"
-msgstr "更改自己是å¦å±¬æ–¼æŸç¾¤çµ„"
-
-#: lib/RT/Queue_Overlay.pm:95
-msgid "ModifyQueueWatchers"
-msgstr "更改表單視察員"
-
-#: lib/RT/Queue_Overlay.pm:100
-msgid "ModifyScrips"
-msgstr "更改手續"
-
-#: lib/RT/System.pm:82
-msgid "ModifySelf"
-msgstr "更改個人帳號"
-
-#: lib/RT/Queue_Overlay.pm:97
-msgid "ModifyTemplate"
-msgstr "更改範本"
-
-#: lib/RT/Queue_Overlay.pm:113
-msgid "ModifyTicket"
-msgstr "更改申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Mon"
-msgstr "星期一"
-
-#: lib/RT/Date.pm:417
-msgid "Mon."
-msgstr "星期一"
-
-#: NOT FOUND IN SOURCE
-msgid "More"
-msgstr "更多"
-
-#: html/Ticket/Elements/ShowRequestor:61
-#. ($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 "全移"
-
-#: html/Admin/Elements/PickCustomFields:83
-msgid "Move down"
-msgstr "下移"
-
-#: html/Admin/Elements/PickCustomFields:75
-msgid "Move up"
-msgstr "上移"
-
-#: html/Admin/Elements/SelectSingleOrMultiple:48
-msgid "Multiple"
-msgstr "多é‡"
-
-#: lib/RT/User_Overlay.pm:226
-msgid "Must specify 'Name' attribute"
-msgstr "必須指定 'Name' 的屬性"
-
-#: html/SelfService/Elements/MyRequests:57
-#. ($friendly_status)
-msgid "My %1 tickets"
-msgstr "我的 %1 申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "My Approvals"
-msgstr "表單簽核"
-
-#: html/Tools/Elements/Tabs:63
-msgid "My Day"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "My Requests"
-msgstr "表單申請追蹤"
-
-#: NOT FOUND IN SOURCE
-msgid "My Tickets"
-msgstr "表單處ç†"
-
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
-msgid "My approvals"
-msgstr "表單簽核"
-
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54
-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
-msgid "Name"
-msgstr "å稱"
-
-#: lib/RT/User_Overlay.pm:233
-msgid "Name in use"
-msgstr "帳號已有人使用"
-
-#: NOT FOUND IN SOURCE
-msgid "Nationality"
-msgstr "國ç±"
-
-#: NOT FOUND IN SOURCE
-msgid "Need approval from system administrator"
-msgstr "需先由系統管ç†å“¡é€²è¡Œæ‰¹å‡†"
-
-#: html/Ticket/Elements/ShowDates:73
-msgid "Never"
-msgstr "從未更動"
-
-#: NOT FOUND IN SOURCE
-msgid "New"
-msgstr "新建立"
-
-#: html/Elements/EditLinks:117
-msgid "New Links"
-msgstr "新增關係"
-
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
-msgid "New Password"
-msgstr "新的密碼"
-
-#: etc/initialdata:332
-msgid "New Pending Approval"
-msgstr "新的待簽核事項"
-
-#: NOT FOUND IN SOURCE
-msgid "New Query"
-msgstr "新增查詢"
-
-#: NOT FOUND IN SOURCE
-msgid "New Request"
-msgstr "表單申請"
-
-#: html/Ticket/Elements/Tabs:212
-msgid "New Search"
-msgstr "新增查詢"
-
-#: NOT FOUND IN SOURCE
-msgid "New Watchers"
-msgstr "新增視察員"
-
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
-msgid "New custom field"
-msgstr "新增自訂欄ä½"
-
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
-msgid "New group"
-msgstr "新增群組"
-
-#: html/SelfService/Prefs.html:53
-msgid "New password"
-msgstr "新的密碼"
-
-#: lib/RT/User_Overlay.pm:816
-msgid "New password notification sent"
-msgstr "é€å‡ºæ–°å¯†ç¢¼é€šçŸ¥"
-
-#: html/Admin/Elements/QueueTabs:95
-msgid "New queue"
-msgstr "新增表單"
-
-#: html/Ticket/Elements/Reminders:118
-msgid "New reminder:"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "New request"
-msgstr "æ出申請單"
-
-#: html/Admin/Elements/SelectRights:65
-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
-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
-msgid "New template"
-msgstr "新增範本"
-
-#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88
-msgid "New ticket"
-msgstr "æ出申請單"
-
-#: lib/RT/Ticket_Overlay.pm:2757
-msgid "New ticket doesn't exist"
-msgstr "沒有新申請單"
-
-#: html/Admin/Elements/UserTabs:81
-msgid "New user"
-msgstr "新增使用者"
-
-#: html/Admin/Elements/CreateUserCalled:47
-msgid "New user called"
-msgstr "新使用者åå­—"
-
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
-msgid "New watchers"
-msgstr "新視察員"
-
-#: NOT FOUND IN SOURCE
-msgid "New window setting"
-msgstr "更新視窗設定"
-
-#: NOT FOUND IN SOURCE
-msgid "New workflow"
-msgstr "新增æµç¨‹"
-
-#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92
-msgid "Next"
-msgstr "下一項"
-
-#: html/Elements/TicketList:104
-msgid "Next Page"
-msgstr "下一é "
-
-#: NOT FOUND IN SOURCE
-msgid "Next page"
-msgstr "下一é "
-
-#: NOT FOUND IN SOURCE
-msgid "NickName"
-msgstr "暱稱"
-
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
-msgid "Nickname"
-msgstr "暱稱"
-
-#: NOT FOUND IN SOURCE
-msgid "Night Shift"
-msgstr "å°å¤œç­"
-
-#: NOT FOUND IN SOURCE
-msgid "No"
-msgstr "å¦"
-
-#: html/Admin/CustomFields/UserRights.html:145
-msgid "No Class defined"
-msgstr "尚未定義類別"
-
-#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119
-msgid "No CustomField"
-msgstr "無自訂欄ä½"
-
-#: html/Admin/CustomFields/GroupRights.html:103
-msgid "No CustomField defined"
-msgstr "尚未定義自訂欄ä½"
-
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
-msgid "No Group defined"
-msgstr "尚未定義群組"
-
-#: lib/RT/Tickets_Overlay_SQL.pm:482
-msgid "No Query"
-msgstr "沒有查詢"
-
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
-msgid "No Queue defined"
-msgstr "尚未定義表單"
-
-#: bin/rt-crontool:73
-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
-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 "沒有æµç¨‹"
-
-#: html/Approvals/Elements/Approve:77
-msgid "No action"
-msgstr "æš«ä¸è™•ç†"
-
-#: lib/RT/Record.pm:949
-msgid "No column specified"
-msgstr "未指定欄ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "No command found\\n"
-msgstr "找ä¸åˆ°å‘½ä»¤"
-
-#: html/Ticket/Elements/ShowRequestor:68
-msgid "No comment entered about this user"
-msgstr "沒有å°é€™å使用者的評論"
-
-#: NOT FOUND IN SOURCE
-msgid "No correspondence attached"
-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
-#. (ref $self)
-msgid "No description for %1"
-msgstr "æ²’æœ‰å° %1 çš„æè¿°"
-
-#: lib/RT/Users_Overlay.pm:190
-msgid "No group specified"
-msgstr "未指定群組"
-
-#: html/Admin/Groups/index.html:52
-msgid "No groups matching search criteria found."
-msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„群組。"
-
-#: lib/RT/Ticket_Overlay.pm:2393
-msgid "No message attached"
-msgstr "沒有附上訊æ¯"
-
-#: lib/RT/User_Overlay.pm:1034
-msgid "No password set"
-msgstr "沒有設定密碼"
-
-#: lib/RT/Queue_Overlay.pm:361
-msgid "No permission to create queues"
-msgstr "沒有新增表單的權é™"
-
-#: lib/RT/Ticket_Overlay.pm:420
-#. ($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
-msgid "No permission to display that ticket"
-msgstr "沒有顯示該申請單的權é™"
-
-#: lib/RT/SavedSearch.pm:156
-msgid "No permission to save system-wide searches"
-msgstr "沒有儲存全域é å­˜æŸ¥è©¢çš„權é™"
-
-#: html/SelfService/Update.html:117
-msgid "No permission to view update ticket"
-msgstr "沒有檢視申請單更新的權é™"
-
-#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489
-msgid "No principal specified"
-msgstr "未指定單ä½"
-
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
-msgid "No principals selected."
-msgstr "未指定單ä½ã€‚"
-
-#: NOT FOUND IN SOURCE
-msgid "No protocol specified in %1"
-msgstr "%1 內未指定å”定"
-
-#: html/Admin/Queues/index.html:57
-msgid "No queues matching search criteria found."
-msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„表單。"
-
-#: html/Admin/Elements/SelectRights:106
-msgid "No rights found"
-msgstr "找ä¸åˆ°æ¬Šé™"
-
-#: html/Admin/Elements/SelectRights:53
-msgid "No rights granted."
-msgstr "沒有é¸å®šæ¬Šé™"
-
-#: lib/RT/SavedSearch.pm:196
-msgid "No search loaded"
-msgstr "尚未載入查詢"
-
-#: html/Search/Bulk.html:232
-msgid "No search to operate on."
-msgstr "沒有è¦é€²è¡Œçš„查詢"
-
-#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78
-msgid "No subject"
-msgstr "沒有標題"
-
-#: NOT FOUND IN SOURCE
-msgid "No ticket id specified"
-msgstr "未指定申請單編號"
-
-#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565
-msgid "No transaction type specified"
-msgstr "未指定更動報告類別"
-
-#: NOT FOUND IN SOURCE
-msgid "No user or email address specified"
-msgstr "未指定使用者或電å­éƒµä»¶åœ°å€"
-
-#: html/Admin/Users/index.html:55
-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:946
-msgid "No value sent to _Set!\\n"
-msgstr "_Set 沒有收到任何值!\\n"
-
-#: html/Elements/QuickCreate:59
-msgid "Nobody"
-msgstr "沒有人"
-
-#: lib/RT/Record.pm:951
-msgid "Nonexistant field?"
-msgstr "欄ä½ä¸å­˜åœ¨ï¼Ÿ"
-
-#: NOT FOUND IN SOURCE
-msgid "Normal Users"
-msgstr "一般用戶群組"
-
-#: html/Search/Chart:71 html/Search/Elements/Chart:88
-msgid "Not Set"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Not configured to fetch the content from a %1 in %2"
-msgstr "未設定æˆå¾ž %2 å…§æ“·å– %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Not logged in"
-msgstr "尚未登入"
-
-#: html/Elements/Header:96
-msgid "Not logged in."
-msgstr "尚未登入"
-
-#: lib/RT/Date.pm:397
-msgid "Not set"
-msgstr "尚未設定"
-
-#: html/NoAuth/Reminder.html:48
-msgid "Not yet implemented."
-msgstr "尚未完工。"
-
-#: NOT FOUND IN SOURCE
-msgid "Not yet implemented...."
-msgstr "尚未完工..."
-
-#: html/Approvals/Elements/Approve:81
-msgid "Notes"
-msgstr "備註"
-
-#: NOT FOUND IN SOURCE
-msgid "Notes:"
-msgstr "備註:"
-
-#: lib/RT/User_Overlay.pm:819
-msgid "Notification could not be sent"
-msgstr "無法é€å‡ºé€šçŸ¥"
-
-#: etc/initialdata:101
-msgid "Notify AdminCcs"
-msgstr "通知管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:97
-msgid "Notify AdminCcs as Comment"
-msgstr "以評論方å¼é€šçŸ¥ç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
-msgid "Notify Ccs"
-msgstr "通知副本收件人"
-
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
-msgid "Notify Ccs as Comment"
-msgstr "以評論方å¼é€šçŸ¥å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:128
-msgid "Notify Other Recipients"
-msgstr "通知其他收件人"
-
-#: etc/initialdata:124
-msgid "Notify Other Recipients as Comment"
-msgstr "以評論方å¼é€šçŸ¥å…¶ä»–收件人"
-
-#: etc/initialdata:85
-msgid "Notify Owner"
-msgstr "通知承辦人"
-
-#: etc/initialdata:81
-msgid "Notify Owner as Comment"
-msgstr "以評論方å¼é€šçŸ¥æ‰¿è¾¦äºº"
-
-#: etc/initialdata:376
-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:353
-msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr "通知承辦人申請單已完æˆæŸé …簽核"
-
-#: etc/initialdata:334
-msgid "Notify Owners and AdminCcs of new items pending their approval"
-msgstr "æ•´ç†å¾…簽核事項,通知承辦人åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:77
-msgid "Notify Requestors"
-msgstr "通知申請人"
-
-#: etc/initialdata:111
-msgid "Notify Requestors and Ccs"
-msgstr "通知申請人åŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:106
-msgid "Notify Requestors and Ccs as Comment"
-msgstr "以評論方å¼é€šçŸ¥ç”³è«‹äººåŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:120
-msgid "Notify Requestors, Ccs and AdminCcs"
-msgstr "通知申請人ã€å‰¯æœ¬åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:116
-msgid "Notify Requestors, Ccs and AdminCcs as Comment"
-msgstr "以評論方å¼é€šçŸ¥ç”³è«‹äººã€å‰¯æœ¬åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: NOT FOUND IN SOURCE
-msgid "Notify people:"
-msgstr "通知å°è±¡"
-
-#: NOT FOUND IN SOURCE
-msgid "Nov"
-msgstr "å一月"
-
-#: lib/RT/Date.pm:451
-msgid "Nov."
-msgstr "11"
-
-#: NOT FOUND IN SOURCE
-msgid "November"
-msgstr "å一月"
-
-#: NOT FOUND IN SOURCE
-msgid "OIN104"
-msgstr "104eHRMS 介é¢"
-
-#: NOT FOUND IN SOURCE
-msgid "OK"
-msgstr "確定"
-
-#: html/Search/Elements/SelectAndOr:47
-msgid "OR"
-msgstr "OR"
-
-#: lib/RT/Record.pm:322
-msgid "Object could not be created"
-msgstr "無法新增物件"
-
-#: lib/RT/Record.pm:123
-msgid "Object could not be deleted"
-msgstr ""
-
-#: lib/RT/Record.pm:341
-msgid "Object created"
-msgstr "物件新增完畢"
-
-#: lib/RT/Record.pm:120
-msgid "Object deleted"
-msgstr ""
-
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
-#. ($ObjectType)
-#. ($LookupType)
-msgid "Object of type %1 cannot take custom fields"
-msgstr "自訂欄ä½ä¸é©ç”¨æ–¼é¡žåˆ¥ç‚º %1 的物件"
-
-#: lib/RT/CustomField_Overlay.pm:967
-msgid "Object type mismatch"
-msgstr "物件類別ä¸ç¬¦"
-
-#: NOT FOUND IN SOURCE
-msgid "Occupation Status"
-msgstr "在è·ç‹€æ…‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Oct"
-msgstr "å月"
-
-#: lib/RT/Date.pm:450
-msgid "Oct."
-msgstr "10"
-
-#: NOT FOUND IN SOURCE
-msgid "October"
-msgstr "å月"
-
-#: NOT FOUND IN SOURCE
-msgid "Office Phone"
-msgstr "辦公室電話"
-
-#: html/Tools/Elements/Tabs:55
-msgid "Offline"
-msgstr "離線"
-
-#: html/Tools/Offline.html:49
-msgid "Offline edits"
-msgstr "離線編輯"
-
-#: html/Tools/Offline.html:46
-msgid "Offline upload"
-msgstr "離線上載"
-
-#: html/Elements/SelectDateRelation:56
-msgid "On"
-msgstr "等於"
-
-#: lib/RT/Transaction_Overlay.pm:326
-#. ($self->CreatedAsString(), $self->CreatorObj->Name())
-msgid "On %1, %2 wrote:"
-msgstr "在 %1 時,%2 寫到:"
-
-#: NOT FOUND IN SOURCE
-msgid "On Change"
-msgstr "更改申請單時"
-
-#: etc/initialdata:163
-msgid "On Comment"
-msgstr "評論時"
-
-#: etc/initialdata:156
-msgid "On Correspond"
-msgstr "回覆申請單時"
-
-#: etc/initialdata:145
-msgid "On Create"
-msgstr "新增申請單時"
-
-#: etc/initialdata:184
-msgid "On Owner Change"
-msgstr "承辦人改變時"
-
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
-msgid "On Priority Change"
-msgstr "優先順ä½æ”¹è®Šæ™‚"
-
-#: etc/initialdata:192
-msgid "On Queue Change"
-msgstr "表單改變時"
-
-#: etc/initialdata:198
-msgid "On Resolve"
-msgstr "解決申請單時"
-
-#: etc/initialdata:169
-msgid "On Status Change"
-msgstr "ç¾æ³æ”¹è®Šæ™‚"
-
-#: etc/initialdata:150
-msgid "On Transaction"
-msgstr "發生更動時"
-
-#: html/Approvals/Elements/PendingMyApproval:70
-#. ("<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
-#. ("<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
-msgid "Only show custom fields for:"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Open"
-msgstr "é–‹å•Ÿ"
-
-#: html/SelfService/index.html:46
-msgid "Open Tickets"
-msgstr ""
-
-#: html/Ticket/Elements/Tabs:160
-msgid "Open it"
-msgstr "é–‹å•Ÿ"
-
-#: html/SelfService/Elements/Tabs:75
-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
-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 "é¸é …å稱"
-
-#: html/Prefs/MyRT.html:70
-msgid "Options"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:59
-msgid "Order by"
-msgstr "排åºæ–¹å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Ordering and sorting"
-msgstr "é †åºèˆ‡æŽ’åºæ–¹å¼"
-
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
-msgid "Organization"
-msgstr "組織å稱"
-
-#: NOT FOUND IN SOURCE
-msgid "Organization:"
-msgstr "組織:"
-
-#: html/Approvals/Elements/Approve:53
-#. ($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:622
-msgid "Outgoing email about a comment recorded"
-msgstr "已紀錄發é€çš„評論郵件"
-
-#: lib/RT/Transaction_Overlay.pm:626
-msgid "Outgoing email recorded"
-msgstr "已紀錄發é€çš„郵件"
-
-#: html/Admin/Queues/Modify.html:90
-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:112
-msgid "Own tickets"
-msgstr "承辦申請單"
-
-#: lib/RT/Queue_Overlay.pm:112
-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
-msgid "Owner"
-msgstr "承辦人"
-
-#: NOT FOUND IN SOURCE
-msgid "Owner changed from %1 to %2"
-msgstr "承辦人已從 %1 改為 %2"
-
-#: lib/RT/Ticket_Overlay.pm:505
-msgid "Owner could not be set."
-msgstr "無法設定承辦人。"
-
-#: lib/RT/Transaction_Overlay.pm:672
-#. ($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 "承辦人電話"
-
-#: NOT FOUND IN SOURCE
-msgid "Page #"
-msgstr " "
-
-#: html/Elements/TicketList:78
-#. ($Page, int($TotalFound/$Rows)+$oddRows)
-msgid "Page %1 of %2"
-msgstr "第 %1/%2 é "
-
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96
-msgid "Pager"
-msgstr "呼å«å™¨"
-
-#: NOT FOUND IN SOURCE
-msgid "PagerPhone"
-msgstr "呼å«å™¨è™Ÿç¢¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Parameter"
-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
-msgid "Parents"
-msgstr "æ¯ç”³è«‹å–®"
-
-#: NOT FOUND IN SOURCE
-msgid "Park Space"
-msgstr "åœè»Šä½ç”³è«‹"
-
-#: html/Elements/Login:95 html/User/Prefs.html:105
-msgid "Password"
-msgstr "密碼"
-
-#: html/NoAuth/Reminder.html:46
-msgid "Password Reminder"
-msgstr "密碼æ示"
-
-#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045
-msgid "Password changed"
-msgstr ""
-
-#: lib/RT/User_Overlay.pm:1037 lib/RT/User_Overlay.pm:214
-#. ($RT::MinimumPasswordLength)
-msgid "Password needs to be at least %1 characters long"
-msgstr "密碼長度至少必須為 %1 個字元"
-
-#: lib/RT/User_Overlay.pm:1044
-msgid "Password set"
-msgstr "密碼已設定"
-
-#: NOT FOUND IN SOURCE
-msgid "Password too short"
-msgstr "密碼太短"
-
-#: html/User/Prefs.html:240
-#. (loc_fuzzy($msg))
-msgid "Password: %1"
-msgstr "密碼:%1"
-
-#: lib/RT/User_Overlay.pm:1030
-msgid "Password: Permission Denied"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:364
-msgid "Passwords do not match."
-msgstr "密碼確èªå¤±æ•—。"
-
-#: html/User/Prefs.html:242
-msgid "Passwords do not match. Your password has not been changed"
-msgstr "密碼確èªå¤±æ•—。您的密碼並未改變。"
-
-#: NOT FOUND IN SOURCE
-msgid "Pelase select a queue"
-msgstr "è«‹é¸æ“‡è¡¨å–®å稱"
-
-#: NOT FOUND IN SOURCE
-msgid "Pending Approval"
-msgstr "等待簽核"
-
-#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
-msgid "People"
-msgstr "人員"
-
-#: NOT FOUND IN SOURCE
-msgid "People with Queue Rights"
-msgstr "æ“有表單權é™äººå“¡"
-
-#: etc/initialdata:133
-msgid "Perform a user-defined action"
-msgstr "執行使用者自訂的動作"
-
-#: html/Admin/Tools/Configuration.html:94
-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
-msgid "Permission Denied"
-msgstr "權é™ä¸è¶³"
-
-#: NOT FOUND IN SOURCE
-msgid "Permission Settings"
-msgstr "權é™è¨­å®š"
-
-#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247
-msgid "Permission denied"
-msgstr ""
-
-#: lib/RT/Template_Overlay.pm:372
-msgid "Permissions denied"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Permitted Queues:"
-msgstr "æ“有權é™è¡¨å–®åˆ—表:"
-
-#: NOT FOUND IN SOURCE
-msgid "Personal"
-msgstr "代ç†äººç¾¤çµ„"
-
-#: html/User/Elements/Tabs:56
-msgid "Personal Groups"
-msgstr "代ç†äººç¾¤çµ„"
-
-#: NOT FOUND IN SOURCE
-msgid "Personal Homepage"
-msgstr "個人首é "
-
-#: NOT FOUND IN SOURCE
-msgid "Personal Todo"
-msgstr "ç§äººå¾…辦事項"
-
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
-msgid "Personal groups"
-msgstr "代ç†äººç¾¤çµ„"
-
-#: html/User/Elements/DelegateRights:58
-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 "電話號碼"
-
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81
-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 "è«‹å…ˆé¸ä¸­è¦åˆªé™¤çš„å°è±¡"
-
-#: 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 "è·ç´š"
-
-#: 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
-msgid "Preferences"
-msgstr "å好"
-
-#: html/Admin/Users/MyRT.html:75
-#. ($pane, $UserObj->Name)
-msgid "Preferences %1 for user %2 ."
-msgstr "使用者 %2 çš„ %1 å好。"
-
-#: html/Prefs/MyRT.html:141
-#. ($pane)
-msgid "Preferences saved for %1."
-msgstr "æˆåŠŸå„²å­˜ %1 çš„å好。"
-
-#: NOT FOUND IN SOURCE
-msgid "Prefs"
-msgstr "個人資訊"
-
-#: lib/RT/Action/Generic.pm:195
-msgid "Prepare Stubbed"
-msgstr "é å‚™å‹•ä½œå®Œç•¢"
-
-#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84
-msgid "Prev"
-msgstr "上一項"
-
-#: html/Elements/TicketList:101
-msgid "Previous Page"
-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
-#. ($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
-msgid "Priority"
-msgstr "優先順ä½"
-
-#: html/Admin/Queues/Modify.html:86
-msgid "Priority starts at"
-msgstr "優先順ä½èµ·å§‹å€¼"
-
-#: html/Search/Elements/EditSearches:50
-msgid "Privacy:"
-msgstr "éš±ç§è¨­å®šï¼š"
-
-#: etc/initialdata:25
-msgid "Privileged"
-msgstr "內部æˆå“¡"
-
-#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231
-#. (loc_fuzzy($msg))
-msgid "Privileged status: %1"
-msgstr "內部æˆå“¡ç‹€æ…‹ï¼š%1"
-
-#: html/Admin/Users/index.html:102
-msgid "Privileged users"
-msgstr "內部æˆå“¡"
-
-#: NOT FOUND IN SOURCE
-msgid "Process Status"
-msgstr "處ç†ç‹€æ…‹"
-
-#: NOT FOUND IN SOURCE
-msgid "Project"
-msgstr "專案"
-
-#: NOT FOUND IN SOURCE
-msgid "Project Name"
-msgstr "專案å稱"
-
-#: NOT FOUND IN SOURCE
-msgid "Projects"
-msgstr "專案"
-
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
-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 "公共事務å€"
-
-#: NOT FOUND IN SOURCE
-msgid "Purging stale data: %1"
-msgstr "移除éŽæœŸè³‡æ–™: %1"
-
-#: NOT FOUND IN SOURCE
-msgid "Query"
-msgstr "查詢"
-
-#: html/Search/Build.html:121
-msgid "Query Builder"
-msgstr "建立查詢"
-
-#: html/Search/Elements/Chart:101
-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
-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
-#. ($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 "表單關éµå­—é¸å–"
-
-#: html/Admin/Queues/Modify.html:64
-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:365
-msgid "Queue already exists"
-msgstr "表單已存在"
-
-#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380
-msgid "Queue could not be created"
-msgstr "無法新增表單"
-
-#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17
-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
-msgid "Queue created"
-msgstr "表單新增完畢"
-
-#: NOT FOUND IN SOURCE
-msgid "Queue is not specified."
-msgstr "未指定表單。"
-
-#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197
-msgid "Queue not found"
-msgstr "找ä¸åˆ°è¡¨å–®"
-
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
-msgid "Queues"
-msgstr "表單"
-
-#: html/Elements/MyAdminQueues:46
-msgid "Queues I administer"
-msgstr ""
-
-#: html/Elements/MySupportQueues:46
-msgid "Queues I'm an AdminCc for"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Quick Search"
-msgstr "表單ç¾æ³"
-
-#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
-msgid "Quick search"
-msgstr "表單一覽"
-
-#: html/Elements/QuickCreate:47
-msgid "Quick ticket creation"
-msgstr "快速建立申請單"
-
-#: html/Search/Results.html:81
-msgid "RSS"
-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)
-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"
-
-#: html/Admin/index.html:46 html/Admin/index.html:47
-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 設定錯誤"
-
-#: NOT FOUND IN SOURCE
-msgid "RT Critical error. Message not recorded!"
-msgstr "RT 致命錯誤。訊æ¯æœªè¢«ç´€éŒ„。"
-
-#: html/Elements/Error:63 html/SelfService/Error.html:62
-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
-msgid "RT Self Service / Closed Tickets"
-msgstr "RT 自助æœå‹™/已解決的申請單"
-
-#: html/Admin/Tools/Configuration.html:73
-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
-msgid "RT at a glance"
-msgstr "RT 一覽"
-
-#: html/Admin/Users/MyRT.html:30
-#. ($UserObj->Name)
-msgid "RT at a glance for the user %1"
-msgstr "使用者 %1 的 RT 一覽"
-
-#: html/Admin/CustomFields/Modify.html:117
-msgid "RT can include content from another web service when showing this custom field."
-msgstr "RT å¯æ–¼é¡¯ç¤ºæ­¤è‡ªè¨‚欄ä½æ™‚引入其他網站的內容"
-
-#: html/Admin/CustomFields/Modify.html:106
-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
-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)
-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> 散佈。"
-
-#: NOT FOUND IN SOURCE
-msgid "RT thinks this message may be a bounce"
-msgstr "RT èªç‚ºé€™å¯èƒ½æ˜¯é€€ä¿¡"
-
-#: html/Search/Simple.html:58
-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
-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 çš„é›»å­éƒµä»¶å‘½ä»¤æ¨¡å¼é ˆè¦ PGP èªè­‰ã€‚您å¯èƒ½æ²’有簽章,或是您的簽章無法辨識。"
-
-#: 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 "唯讀"
-
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
-msgid "Real Name"
-msgstr "真實姓å"
-
-#: NOT FOUND IN SOURCE
-msgid "RealName"
-msgstr "真實姓å"
-
-#: NOT FOUND IN SOURCE
-msgid "Really reject this ticket?"
-msgstr "您確定è¦é§å›žé€™å¼µç”³è«‹å–®å—Žï¼Ÿ"
-
-#: lib/RT/Transaction_Overlay.pm:725
-#. ($value)
-msgid "Reference by %1 added"
-msgstr "已加入 %1 為åƒè€ƒæœ¬ç”³è«‹å–®"
-
-#: lib/RT/Transaction_Overlay.pm:765
-#. ($value)
-msgid "Reference by %1 deleted"
-msgstr "已移除 %1 為åƒè€ƒæœ¬ç”³è«‹å–®"
-
-#: lib/RT/Transaction_Overlay.pm:722
-#. ($value)
-msgid "Reference to %1 added"
-msgstr "已加入åƒè€ƒç”³è«‹å–® %1"
-
-#: lib/RT/Transaction_Overlay.pm:762
-#. ($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
-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
-msgid "Refers to"
-msgstr "åƒè€ƒ"
-
-#: NOT FOUND IN SOURCE
-msgid "RefersTo"
-msgstr "åƒè€ƒ"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine"
-msgstr "在çµæžœç¯„åœå…§æŸ¥è©¢"
-
-#: NOT FOUND IN SOURCE
-msgid "Refine search"
-msgstr "調整查詢æ¢ä»¶"
-
-#: NOT FOUND IN SOURCE
-msgid "Refresh"
-msgstr "æ›´æ–°"
-
-#: html/Elements/Refresh:57
-#. ($value/60)
-msgid "Refresh this page every %1 minutes."
-msgstr "æ¯ %1 分é˜æ›´æ–°é é¢"
-
-#: lib/RT/Transaction_Overlay.pm:811
-#. ($ticket->Subject)
-msgid "Reminder '%1' added"
-msgstr "已建立æ醒項目「%1ã€"
-
-#: lib/RT/Transaction_Overlay.pm:824
-#. ($ticket->Subject)
-msgid "Reminder '%1' completed"
-msgstr "已完æˆæ醒項目「%1ã€"
-
-#: lib/RT/Transaction_Overlay.pm:817
-#. ($ticket->Subject)
-msgid "Reminder '%1' reopened"
-msgstr "å·²é‡æ–°é–‹å•Ÿæ醒項目「%1ã€"
-
-#: html/Ticket/Reminders.html:46
-#. ($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
-msgid "Reminders"
-msgstr ""
-
-#: html/Ticket/Reminders.html:50
-#. ($Ticket->Id)
-msgid "Reminders for ticket #%1"
-msgstr "申請單 #%1 çš„æ醒項目"
-
-#: NOT FOUND IN SOURCE
-msgid "Remove"
-msgstr "移除"
-
-#: html/Search/Bulk.html:94
-msgid "Remove AdminCc"
-msgstr "移除管ç†å“¡å‰¯æœ¬"
-
-#: html/Search/Bulk.html:90
-msgid "Remove Cc"
-msgstr "移除副本"
-
-#: html/Search/Bulk.html:86
-msgid "Remove Requestor"
-msgstr "移除申請人"
-
-#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147
-msgid "Reply"
-msgstr "回覆"
-
-#: html/Admin/Queues/Modify.html:72
-msgid "Reply Address"
-msgstr "回覆地å€"
-
-#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78
-msgid "Reply to requestors"
-msgstr "回覆申請人"
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "Reply to tickets"
-msgstr "å°ç”³è«‹å–®é€²è¡Œå›žè¦†"
-
-#: lib/RT/Queue_Overlay.pm:110
-msgid "ReplyToTicket"
-msgstr "回覆申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Report to Duty"
-msgstr "上下ç­åˆ·å¡"
-
-#: NOT FOUND IN SOURCE
-msgid "Reported on"
-msgstr "到è·æ—¥æœŸ"
-
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47
-msgid "Reports"
-msgstr ""
-
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111
-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 "RequestorAddresses"
-msgstr "申請人地å€"
-
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
-msgid "Requestors"
-msgstr "申請人"
-
-#: html/Admin/Queues/Modify.html:96
-msgid "Requests should be due in"
-msgstr "申請單處ç†æœŸé™"
-
-#: lib/RT/Attribute_Overlay.pm:146
-#. ('Object')
-msgid "Required parameter '%1' not specified"
-msgstr "未指定必è¦çš„åƒæ•¸ã€Œ%1ã€"
-
-#: html/Elements/Submit:83
-msgid "Reset"
-msgstr "é‡è¨­"
-
-#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60
-msgid "Reset to default"
-msgstr ""
-
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84
-msgid "Residence"
-msgstr "ä½è™•"
-
-#: NOT FOUND IN SOURCE
-msgid "Resolution"
-msgstr "解決狀態"
-
-#: html/Ticket/Elements/Tabs:156
-msgid "Resolve"
-msgstr "解決"
-
-#: html/Ticket/Update.html:156
-#. ($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
-msgid "Resolved"
-msgstr "已解決"
-
-#: html/Tools/Reports/Elements/Tabs:55
-msgid "Resolved by owner"
-msgstr ""
-
-#: html/Tools/Reports/Elements/Tabs:59
-msgid "Resolved in date range"
-msgstr ""
-
-#: html/Tools/Reports/ResolvedByDates.html:52
-msgid "Resolved tickets in period, grouped by owner"
-msgstr ""
-
-#: html/Tools/Reports/ResolvedByOwner.html:50
-msgid "Resolved tickets, grouped by owner"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Response to requestors"
-msgstr "回覆申請人"
-
-#: NOT FOUND IN SOURCE
-msgid "Responsibility Type"
-msgstr "責任å€åˆ†"
-
-#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47
-msgid "Results"
-msgstr "çµæžœ"
-
-#: NOT FOUND IN SOURCE
-msgid "Results per page"
-msgstr "æ¯é åˆ—出幾筆çµæžœ"
-
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
-msgid "Retype Password"
-msgstr "å†æ¬¡è¼¸å…¥å¯†ç¢¼"
-
-#: 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:630
-msgid "Right Delegated"
-msgstr "權é™ä»£ç†å®Œç•¢"
-
-#: lib/RT/ACE_Overlay.pm:320
-msgid "Right Granted"
-msgstr "權é™è¨­å®šå®Œç•¢"
-
-#: lib/RT/ACE_Overlay.pm:178
-msgid "Right Loaded"
-msgstr "權é™è¼‰å…¥å®Œç•¢"
-
-#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716
-msgid "Right could not be revoked"
-msgstr "無法撤消權é™"
-
-#: html/User/Delegation.html:85
-msgid "Right not found"
-msgstr "找ä¸åˆ°æ¬Šé™"
-
-#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655
-msgid "Right not loaded."
-msgstr "權é™ä¸¦æœªè¼‰å…¥ã€‚"
-
-#: lib/RT/ACE_Overlay.pm:712
-msgid "Right revoked"
-msgstr "權é™æ’¤æ¶ˆå®Œç•¢"
-
-#: html/Admin/Elements/UserTabs:70
-msgid "Rights"
-msgstr "權é™åŠä»£ç†äºº"
-
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961
-#. ($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 的權é™"
-
-#: NOT FOUND IN SOURCE
-msgid "Role Members"
-msgstr "角色æˆå“¡"
-
-#: NOT FOUND IN SOURCE
-msgid "Role Name"
-msgstr "角色å稱"
-
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
-msgid "Roles"
-msgstr "角色"
-
-#: NOT FOUND IN SOURCE
-msgid "RootApproval"
-msgstr "交由系統管ç†å“¡ç°½æ ¸"
-
-#: html/Prefs/MyRT.html:72
-msgid "Rows per box"
-msgstr ""
-
-#: html/Search/Elements/DisplayOptions:93
-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 伺æœå™¨"
-
-#: NOT FOUND IN SOURCE
-msgid "Sat"
-msgstr "星期六"
-
-#: lib/RT/Date.pm:422
-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
-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
-msgid "Save Changes"
-msgstr "儲存更改"
-
-#: html/User/Prefs.html:181
-msgid "Save Preferences"
-msgstr "儲存å好"
-
-#: html/Ticket/Elements/PreviewScrips:131
-msgid "Save changes"
-msgstr "儲存更改"
-
-#: lib/RT/SavedSearch.pm:173
-#. ($name)
-msgid "Saved search %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Saved searches"
-msgstr "已儲存的查詢"
-
-#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84
-#. ($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:203
-msgid "Scrip Created"
-msgstr "手續新增完畢"
-
-#: html/Admin/Elements/EditScrip:52
-msgid "Scrip Fields"
-msgstr "手續欄ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrip Name"
-msgstr "訊æ¯å稱"
-
-#: html/Admin/Elements/EditScrips:109
-msgid "Scrip deleted"
-msgstr "手續刪除完畢"
-
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
-msgid "Scrips"
-msgstr "手續"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrips "
-msgstr "訊æ¯é€šçŸ¥"
-
-#: NOT FOUND IN SOURCE
-msgid "Scrips for %1\\n"
-msgstr "%1 的手續\\n"
-
-#: html/Admin/Queues/Scrips.html:55
-msgid "Scrips which apply to all queues"
-msgstr "é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„手續"
-
-#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63
-msgid "Search"
-msgstr "查詢"
-
-#: NOT FOUND IN SOURCE
-msgid "Search Criteria"
-msgstr "查詢æ¢ä»¶"
-
-#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50
-msgid "Search Preferences"
-msgstr ""
-
-#: lib/RT/SavedSearch.pm:115
-msgid "Search attribute load failure"
-msgstr "æœå°‹å±¬æ€§è¼‰å…¥å¤±æ•—"
-
-#: html/Approvals/Elements/PendingMyApproval:59
-msgid "Search for approvals"
-msgstr "簽核單查詢"
-
-#: html/Search/Simple.html:67
-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>編號</strong>ã€<strong>表單å稱</strong>ã€æ‰¿è¾¦äººçš„<strong>使用者å稱</strong>ã€æˆ–申請人的<strong>é›»å­éƒµä»¶åœ°å€</strong>。以上格å¼ä¹‹å¤–的文字,則會在申請單內文åŠé™„件內檢索。"
-
-#: html/User/Elements/Tabs:62
-msgid "Search options"
-msgstr ""
-
-#: html/Search/Chart.html:56
-#. ($PrimaryGroupBy)
-msgid "Search results grouped by %1"
-msgstr "æœå°‹çµæžœï¼Œä¾ %1 分組"
-
-#: lib/RT/SavedSearch.pm:203
-#. ($msg)
-msgid "Search update: %1"
-msgstr "更新查詢:%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Searches can't be associated with that kind of object"
-msgstr "ä¸èƒ½å°æ­¤é¡žç‰©ä»¶é€²è¡ŒæŸ¥è©¢"
-
-#: html/Search/Simple.html:57
-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 "二階主管員工"
-
-#: bin/rt-crontool:265
-msgid "Security:"
-msgstr "安全性:"
-
-#: html/Elements/ShowCustomFields:98
-msgid "See also:"
-msgstr ""
-
-#: lib/RT/CustomField_Overlay.pm:105
-msgid "See custom fields"
-msgstr "查閱自訂欄ä½"
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "See exact outgoing email messages and their recipeients"
-msgstr "查閱é€å‡ºçš„é›»å­éƒµä»¶åŠæ”¶ä»¶äºº"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "See ticket private commentary"
-msgstr "查閱申請單內的ç§äººè©•è«–"
-
-#: lib/RT/Queue_Overlay.pm:103
-msgid "See ticket summaries"
-msgstr "查閱申請單總覽"
-
-#: lib/RT/CustomField_Overlay.pm:105
-msgid "SeeCustomField"
-msgstr "查閱自訂欄ä½"
-
-#: lib/RT/Group_Overlay.pm:169
-msgid "SeeGroup"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:91
-msgid "SeeQueue"
-msgstr "查閱表單"
-
-#: NOT FOUND IN SOURCE
-msgid "Select"
-msgstr "é¸æ“‡"
-
-#: NOT FOUND IN SOURCE
-msgid "Select All"
-msgstr "å…¨é¸"
-
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
-msgid "Select a Custom Field"
-msgstr "é¸æ“‡è‡ªè¨‚欄ä½"
-
-#: html/Admin/Groups/index.html:78
-msgid "Select a group"
-msgstr "é¸æ“‡ç¾¤çµ„"
-
-#: html/Admin/Queues/index.html:54
-msgid "Select a queue"
-msgstr "é¸æ“‡è¡¨å–®"
-
-#: html/SelfService/CreateTicketInQueue.html:48
-msgid "Select a queue for your new ticket"
-msgstr "為您新的申請單é¸æ“‡ä¸€å€‹è¡¨å–®"
-
-#: NOT FOUND IN SOURCE
-msgid "Select a queue to link to"
-msgstr "è«‹é¸æ“‡æ¬²é€£çµè¡¨å–®"
-
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
-msgid "Select a user"
-msgstr "é¸æ“‡ä½¿ç”¨è€…"
-
-#: html/Admin/Elements/CustomFieldTabs:90
-msgid "Select custom field"
-msgstr "é¸æ“‡è‡ªè¨‚欄ä½"
-
-#: html/Admin/Global/CustomFields/index.html:70
-msgid "Select custom fields for all user groups"
-msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰ä½¿ç”¨è€…群組的自訂欄ä½"
-
-#: html/Admin/Global/CustomFields/index.html:65
-msgid "Select custom fields for all users"
-msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰ä½¿ç”¨è€…的自訂欄ä½"
-
-#: html/Admin/Global/CustomFields/index.html:76
-msgid "Select custom fields for tickets in all queues"
-msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®å…§ç”³è«‹å–®çš„自訂欄ä½"
-
-#: html/Admin/Global/CustomFields/index.html:83
-msgid "Select custom fields for transactions on tickets in all queues"
-msgstr "é¸æ“‡é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®å…§ç”³è«‹å–®ä¹‹æ›´å‹•çš„自訂欄ä½"
-
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
-msgid "Select group"
-msgstr "é¸æ“‡ç¾¤çµ„"
-
-#: lib/RT/CustomField_Overlay.pm:59
-msgid "Select multiple values"
-msgstr "é¸æ“‡å¤šé‡é …ç›®"
-
-#: lib/RT/CustomField_Overlay.pm:60
-msgid "Select one value"
-msgstr "é¸æ“‡å–®ä¸€é …ç›®"
-
-#: html/Admin/Elements/QueueTabs:92
-msgid "Select queue"
-msgstr "é¸æ“‡è¡¨å–®"
-
-#: html/Prefs/Quicksearch.html:53
-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
-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
-msgid "Select template"
-msgstr "é¸æ“‡ç¯„本"
-
-#: lib/RT/CustomField_Overlay.pm:61
-msgid "Select up to %1 values"
-msgstr "é¸æ“‡æœ€å¤š %1 個值"
-
-#: html/Admin/Elements/UserTabs:78
-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 "單一é¸é …"
-
-#: html/Admin/Elements/EditCustomFields:58
-msgid "Selected Custom Fields"
-msgstr "å·²é¸å–的自訂欄ä½"
-
-#: html/Admin/CustomFields/Objects.html:59
-msgid "Selected objects"
-msgstr "å·²é¸å–的物件"
-
-#: NOT FOUND IN SOURCE
-msgid "Selected users:"
-msgstr "å·²é¸å–的使用者:"
-
-#: html/Widgets/SelectionBox:209
-msgid "Selections modified. Please save your changes"
-msgstr "é¸å–的項目已更改。請儲存您的更動"
-
-#: NOT FOUND IN SOURCE
-msgid "Self Service"
-msgstr "自助æœå‹™"
-
-#: etc/initialdata:121
-msgid "Send mail to all watchers"
-msgstr "寄信給所有視察員"
-
-#: etc/initialdata:117
-msgid "Send mail to all watchers as a \"comment\""
-msgstr "以評論方å¼å¯„信給所有視察員"
-
-#: etc/initialdata:112
-msgid "Send mail to requestors and Ccs"
-msgstr "寄信給申請人åŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:107
-msgid "Send mail to requestors and Ccs as a comment"
-msgstr "以評論方å¼å¯„信給申請人åŠå‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:78
-msgid "Sends a message to the requestors"
-msgstr "寄信給申請人"
-
-#: etc/initialdata:125 etc/initialdata:129
-msgid "Sends mail to explicitly listed Ccs and Bccs"
-msgstr "寄信給特定的副本åŠå¯†ä»¶å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
-msgid "Sends mail to the Ccs"
-msgstr "寄信給副本收件人"
-
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
-msgid "Sends mail to the Ccs as a comment"
-msgstr "以評論方å¼å¯„信給副本收件人"
-
-#: etc/initialdata:102
-msgid "Sends mail to the administrative Ccs"
-msgstr "寄信給管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:98
-msgid "Sends mail to the administrative Ccs as a comment"
-msgstr "以評論寄信給管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:82 etc/initialdata:86
-msgid "Sends mail to the owner"
-msgstr "寄信給申請人"
-
-#: NOT FOUND IN SOURCE
-msgid "Sep"
-msgstr "ä¹æœˆ"
-
-#: lib/RT/Date.pm:449
-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"
-
-#: NOT FOUND IN SOURCE
-msgid "Shift Type"
-msgstr "ç­åˆ¥å±¬æ€§"
-
-#: html/Ticket/Elements/ShowTransaction:158
-msgid "Show"
-msgstr "顯示"
-
-#: html/Approvals/index.html:52
-msgid "Show Approvals"
-msgstr "顯示待簽核申請單"
-
-#: html/Search/Elements/EditFormat:56
-msgid "Show Columns"
-msgstr "顯示欄ä½"
-
-#: html/Ticket/Elements/Tabs:220
-msgid "Show Results"
-msgstr "顯示çµæžœ"
-
-#: html/Approvals/Elements/PendingMyApproval:64
-msgid "Show approved requests"
-msgstr "顯示已批准的簽核單"
-
-#: html/Ticket/Create.html:316
-msgid "Show basics"
-msgstr "顯示基本資訊"
-
-#: html/Approvals/Elements/PendingMyApproval:65
-msgid "Show denied requests"
-msgstr "顯示已é§å›žçš„簽核單"
-
-#: html/Ticket/Create.html:319
-msgid "Show details"
-msgstr "顯示細節"
-
-#: html/Approvals/Elements/PendingMyApproval:63
-msgid "Show pending requests"
-msgstr "顯示待處ç†çš„簽核單"
-
-#: html/Approvals/Elements/PendingMyApproval:66
-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
-msgid "ShowConfigTab"
-msgstr ""
-
-#: lib/RT/Queue_Overlay.pm:106
-msgid "ShowOutgoingEmail"
-msgstr "顯示寄é€éƒµä»¶"
-
-#: lib/RT/Group_Overlay.pm:168
-msgid "ShowSavedSearches"
-msgstr "顯示已儲存的查詢"
-
-#: lib/RT/Queue_Overlay.pm:102
-msgid "ShowScrips"
-msgstr "顯示手續"
-
-#: lib/RT/Queue_Overlay.pm:99
-msgid "ShowTemplate"
-msgstr "顯示範本"
-
-#: lib/RT/Queue_Overlay.pm:103
-msgid "ShowTicket"
-msgstr "顯示申請單"
-
-#: lib/RT/Queue_Overlay.pm:104
-msgid "ShowTicketComments"
-msgstr "顯示申請單的評論"
-
-#: lib/RT/Queue_Overlay.pm:107
-msgid "Sign up as a ticket Requestor or ticket or queue Cc"
-msgstr "登記æˆç‚ºç”³è«‹äººæˆ–副本收件人"
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "Sign up as a ticket or queue AdminCc"
-msgstr "登記æˆç‚ºç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168
-msgid "Signature"
-msgstr "ç°½å檔"
-
-#: NOT FOUND IN SOURCE
-msgid "Signed in as %1"
-msgstr "使用者:%1"
-
-#: html/Elements/Tabs:68
-msgid "Simple Search"
-msgstr ""
-
-#: html/Admin/Elements/SelectSingleOrMultiple:47
-msgid "Single"
-msgstr "單一"
-
-#: html/Search/Elements/EditFormat:75
-msgid "Size"
-msgstr ""
-
-#: html/Elements/Header:89
-msgid "Skip Menu"
-msgstr "ç•¥éŽé¸å–®"
-
-#: html/Search/Elements/EditFormat:78
-msgid "Small"
-msgstr ""
-
-#: html/Admin/CustomFields/Modify.html:120
-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
-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 "排åºé †åº"
-
-#: html/Admin/Elements/EditScrip:78
-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 "首é "
-
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
-msgid "Started"
-msgstr "實際起始日"
-
-#: NOT FOUND IN SOURCE
-msgid "Started date '%1' could not be parsed"
-msgstr "無法解讀起始日期 '%1"
-
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
-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"
-
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
-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
-msgid "Status"
-msgstr "ç¾æ³"
-
-#: etc/initialdata:309
-msgid "Status Change"
-msgstr "ç¾æ³æ”¹è®Šæ™‚"
-
-#: NOT FOUND IN SOURCE
-msgid "Status changed from %1 to %2"
-msgstr "ç¾æ³å¾ž %1 改為 %2"
-
-#: NOT FOUND IN SOURCE
-msgid "StatusChange"
-msgstr "ç¾æ³æ”¹è®Šæ™‚"
-
-#: html/Ticket/Elements/Tabs:178
-msgid "Steal"
-msgstr "強制更æ›æ‰¿è¾¦äºº"
-
-#: lib/RT/Queue_Overlay.pm:117
-msgid "Steal tickets"
-msgstr "強制承辦申請單"
-
-#: lib/RT/Queue_Overlay.pm:117
-msgid "StealTicket"
-msgstr "強制承辦申請單"
-
-#: lib/RT/Transaction_Overlay.pm:678
-#. ($Old->Name)
-msgid "Stolen from %1"
-msgstr "承辦人從 %1 強制更æ›"
-
-#: NOT FOUND IN SOURCE
-msgid "Stolen from %1 "
-msgstr "承辦人從 %1 å¼·åˆ¶æ›´æ› "
-
-#: html/Search/Elements/EditFormat:81
-msgid "Style"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Subgroup"
-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
-msgid "Subject"
-msgstr "主題"
-
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:700
-#. ($self->Data)
-msgid "Subject changed to %1"
-msgstr "標題已改為 %1"
-
-#: html/Elements/Submit:75
-msgid "Submit"
-msgstr "é€å‡º"
-
-#: NOT FOUND IN SOURCE
-msgid "Submit Workflow"
-msgstr "é€å‡ºæµç¨‹"
-
-#: lib/RT/Group_Overlay.pm:774
-msgid "Succeeded"
-msgstr "設定æˆåŠŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "Sun"
-msgstr "星期日"
-
-#: lib/RT/Date.pm:423
-msgid "Sun."
-msgstr "星期日"
-
-#: lib/RT/System.pm:75
-msgid "SuperUser"
-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 人事系統資料。請ç¨å¾…..."
-
-#: html/User/Elements/DelegateRights:98
-msgid "System"
-msgstr "系統"
-
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
-msgid "System Configuration"
-msgstr "系統設定"
-
-#: NOT FOUND IN SOURCE
-msgid "System Defined"
-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 "系統錯誤"
-
-#: 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:224 lib/RT/Transaction_Overlay.pm:230
-#. ($msg)
-msgid "System Error: %1"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "System Rights"
-msgstr "系統權é™"
-
-#: html/Admin/Tools/index.html:47
-msgid "System Tools"
-msgstr "系統工具"
-
-#: lib/RT/ACE_Overlay.pm:633
-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
-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
-msgid "System groups"
-msgstr "系統群組"
-
-#: NOT FOUND IN SOURCE
-msgid "SystemInternal"
-msgstr "系統內部用"
-
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
-msgid "SystemRolegroup for internal use"
-msgstr "內部使用的系統角色群組"
-
-#: lib/RT/CurrentUser.pm:357
-msgid "TEST_STRING"
-msgstr "TEST_STRING"
-
-#: NOT FOUND IN SOURCE
-msgid "TabbedUI"
-msgstr "é ç±¤ä»‹é¢"
-
-#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170
-msgid "Take"
-msgstr "å—ç†"
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "Take tickets"
-msgstr "自行承辦申請單"
-
-#: lib/RT/Queue_Overlay.pm:115
-msgid "TakeTicket"
-msgstr "自行承辦申請單"
-
-#: lib/RT/Transaction_Overlay.pm:663
-msgid "Taken"
-msgstr "å·²å—ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Task"
-msgstr "工作事項"
-
-#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78
-msgid "Template"
-msgstr "範本"
-
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
-#. ($TemplateObj->Id())
-msgid "Template #%1"
-msgstr "範本 #%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Template Content"
-msgstr "通知範本內容"
-
-#: NOT FOUND IN SOURCE
-msgid "Template Description"
-msgstr "通知範本æè¿°"
-
-#: NOT FOUND IN SOURCE
-msgid "Template Name"
-msgstr "通知範本å稱"
-
-#: html/Admin/Elements/EditTemplates:110
-msgid "Template deleted"
-msgstr "範本已刪除"
-
-#: lib/RT/Scrip_Overlay.pm:176
-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
-msgid "Template parsed"
-msgstr "範本剖æžå®Œç•¢"
-
-#: lib/RT/Template_Overlay.pm:391
-msgid "Template parsing error"
-msgstr ""
-
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
-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 "文字"
-
-#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945
-msgid "That is already the current value"
-msgstr "已經是目å‰æ¬„ä½çš„值"
-
-#: lib/RT/CustomField_Overlay.pm:412
-msgid "That is not a value for this custom field"
-msgstr "這ä¸æ˜¯è©²è‡ªè¨‚欄ä½çš„值"
-
-#: lib/RT/Ticket_Overlay.pm:1994
-msgid "That is the same value"
-msgstr "åŒæ¨£çš„值"
-
-#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614
-msgid "That principal already has that right"
-msgstr "這項單ä½å·²ç¶“æ“有該權é™"
-
-#: lib/RT/Queue_Overlay.pm:753
-#. ($args{'Type'})
-msgid "That principal is already a %1 for this queue"
-msgstr "這項單ä½å·²ç¶“是這個表單的 %1"
-
-#: lib/RT/Ticket_Overlay.pm:1435
-#. ($self->loc($args{'Type'}))
-msgid "That principal is already a %1 for this ticket"
-msgstr "這項單ä½å·²ç¶“是這份申請單的 %1"
-
-#: lib/RT/Queue_Overlay.pm:852
-#. ($args{'Type'})
-msgid "That principal is not a %1 for this queue"
-msgstr "這項單ä½ä¸æ˜¯é€™å€‹è¡¨å–®çš„ %1"
-
-#: NOT FOUND IN SOURCE
-msgid "That principal is not a %1 for this ticket"
-msgstr "這項單ä½ä¸æ˜¯é€™ä»½ç”³è«‹å–®çš„ %1"
-
-#: lib/RT/Ticket_Overlay.pm:1990
-msgid "That queue does not exist"
-msgstr "此表單ä¸å­˜åœ¨"
-
-#: lib/RT/Ticket_Overlay.pm:3233
-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
-msgid "That user already owns that ticket"
-msgstr "該使用者已經承辦這份申請單"
-
-#: lib/RT/Ticket_Overlay.pm:3012
-msgid "That user does not exist"
-msgstr "使用者ä¸å­˜åœ¨"
-
-#: lib/RT/User_Overlay.pm:389
-msgid "That user is already privileged"
-msgstr "這å使用者已經是內部æˆå“¡"
-
-#: lib/RT/User_Overlay.pm:410
-msgid "That user is already unprivileged"
-msgstr "這å使用者屬於éžå…§éƒ¨æˆå“¡ç¾¤çµ„"
-
-#: lib/RT/User_Overlay.pm:402
-msgid "That user is now privileged"
-msgstr "使用者加入內部æˆå“¡ç¾¤çµ„完畢"
-
-#: lib/RT/User_Overlay.pm:423
-msgid "That user is now unprivileged"
-msgstr "這å使用者已加入éžå…§éƒ¨æˆå“¡ç¾¤çµ„"
-
-#: NOT FOUND IN SOURCE
-msgid "That user is now unprivilegedileged"
-msgstr "這å使用者已加入éžå…§éƒ¨æˆå“¡ç¾¤çµ„"
-
-#: lib/RT/Ticket_Overlay.pm:3031
-msgid "That user may not own tickets in that queue"
-msgstr "使用者å¯èƒ½æ²’有承辦表單裡的申請單"
-
-#: lib/RT/Link_Overlay.pm:233
-msgid "That's not a numerical id"
-msgstr "這ä¸æ˜¯ä¸€å€‹æ•¸å­—編號"
-
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49
-msgid "The Basics"
-msgstr "基本資訊"
-
-#: lib/RT/ACE_Overlay.pm:112
-msgid "The CC of a ticket"
-msgstr "申請單的副本收件人"
-
-#: lib/RT/ACE_Overlay.pm:113
-msgid "The administrative CC of a ticket"
-msgstr "申請單的管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: NOT FOUND IN SOURCE
-msgid "The comment has been recorded"
-msgstr "評論已被紀錄"
-
-#: bin/rt-crontool:275
-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"
-
-#: lib/RT/Record.pm:948
-msgid "The new value has been set."
-msgstr "新的欄ä½å€¼è¨­å®šå®Œæˆã€‚"
-
-#: lib/RT/ACE_Overlay.pm:110
-msgid "The owner of a ticket"
-msgstr "申請單的承辦人"
-
-#: lib/RT/ACE_Overlay.pm:111
-msgid "The requestor of a ticket"
-msgstr "申請單的申請人"
-
-#: html/Admin/Elements/EditUserComments:47
-msgid "These comments aren't generally visible to the user"
-msgstr "該使用者ä¸æœƒçœ‹è¦‹é€™äº›è©•è«–"
-
-#: NOT FOUND IN SOURCE
-msgid "Third-"
-msgstr "三"
-
-#: lib/RT/CustomField_Overlay.pm:978
-msgid "This custom field does not apply to that object"
-msgstr "此自訂欄ä½ä¸é©ç”¨æ–¼è©²ç‰©ä»¶"
-
-#: html/Admin/Tools/Configuration.html:50
-msgid "This feature is only available to system administrators"
-msgstr "此項功能僅é™ç³»çµ±ç®¡ç†å“¡ä½¿ç”¨"
-
-#: html/Ticket/Elements/PreviewScrips:96
-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
-msgid "This tool allows the user to run arbitrary perl modules from within RT."
-msgstr "此工具程å¼æœƒè®“使用者經由 RT 執行任æ„命令。"
-
-#: lib/RT/Transaction_Overlay.pm:301
-msgid "This transaction appears to have no content"
-msgstr "此項更動報告沒有內容"
-
-#: html/Ticket/Elements/ShowRequestor:70
-#. ($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 份優先處ç†ç”³è«‹å–®"
-
-#: NOT FOUND IN SOURCE
-msgid "Thu"
-msgstr "星期四"
-
-#: lib/RT/Date.pm:420
-msgid "Thu."
-msgstr "星期四"
-
-#: NOT FOUND IN SOURCE
-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
-#. ($Ticket->Id, $Ticket->Subject)
-msgid "Ticket #%1 Jumbo update: %2"
-msgstr "更新申請單 #%1 的全部資訊:%2"
-
-#: html/Approvals/Elements/ShowDependency:67
-#. ($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
-#. ($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
-#. ($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
-#. ($Ticket->Id, $_)
-msgid "Ticket %1: %2"
-msgstr "申請單 %1:%2"
-
-#: html/Admin/Elements/QueueTabs:74
-msgid "Ticket Custom Fields"
-msgstr "申請單的自訂欄ä½"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket Due"
-msgstr "表單處ç†æœŸé™"
-
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
-#. ($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:324
-msgid "Ticket Resolved"
-msgstr "申請單已解決"
-
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207
-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:1920
-msgid "Ticket content"
-msgstr "申請單內容"
-
-#: lib/RT/Tickets_Overlay.pm:1969
-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
-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 "找ä¸åˆ°ç”³è«‹å–®ç·¨è™Ÿ"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket killed"
-msgstr "申請單刪除完畢"
-
-#: html/Ticket/Display.html:55
-msgid "Ticket metadata"
-msgstr "申請單的æ述資訊"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket not found"
-msgstr "找ä¸åˆ°ç”³è«‹å–®"
-
-#: etc/initialdata:310
-msgid "Ticket status changed"
-msgstr "申請單ç¾æ³å·²æ”¹è®Š"
-
-#: NOT FOUND IN SOURCE
-msgid "Ticket watchers"
-msgstr "申請單視察員"
-
-#: lib/RT/Search/FromSQL.pm:82
-#. (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
-msgid "Tickets"
-msgstr "申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets %1 %2"
-msgstr "申請單 %1 %2"
-
-#: NOT FOUND IN SOURCE
-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 "é€å‡ºçš„申請單"
-
-#: html/Tools/Reports/CreatedByDates.html:86
-msgid "Tickets created after"
-msgstr ""
-
-#: html/Tools/Reports/CreatedByDates.html:88
-msgid "Tickets created before"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-msgid "Tickets from %1"
-msgstr "%1 的申請單"
-
-#: html/Tools/Reports/ResolvedByDates.html:87
-msgid "Tickets resolved after"
-msgstr ""
-
-#: html/Tools/Reports/ResolvedByDates.html:89
-msgid "Tickets resolved before"
-msgstr ""
-
-#: html/Approvals/Elements/ShowDependency:48
-msgid "Tickets which depend on this approval:"
-msgstr "批准之後,å¯æŽ¥çºŒè™•ç†ï¼š"
-
-#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72
-msgid "Time Estimated"
-msgstr "é è¨ˆæ™‚é–“"
-
-#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85
-msgid "Time Left"
-msgstr "剩餘時間"
-
-#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78
-msgid "Time Worked"
-msgstr "處ç†æ™‚é–“"
-
-#: lib/RT/Tickets_Overlay.pm:1891
-msgid "Time left"
-msgstr "剩餘時間"
-
-#: html/Elements/Footer:51
-msgid "Time to display"
-msgstr "顯示時間"
-
-#: lib/RT/Tickets_Overlay.pm:1866
-msgid "Time worked"
-msgstr "已處ç†æ™‚é–“"
-
-#: NOT FOUND IN SOURCE
-msgid "TimeLeft"
-msgstr "剩餘時間"
-
-#: lib/RT/Ticket_Overlay.pm:1167
-msgid "TimeWorked"
-msgstr "已處ç†æ™‚é–“"
-
-#: html/Search/Elements/EditFormat:74
-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"
-
-#: html/Elements/Footer:62
-#. ('<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/Ticket_Overlay.pm:1170
-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
-msgid "Tools"
-msgstr "工具"
-
-#: html/Search/Elements/Chart:130
-msgid "Total"
-msgstr "é "
-
-#: etc/initialdata:252
-msgid "Transaction"
-msgstr "æ›´å‹•"
-
-#: lib/RT/Transaction_Overlay.pm:805
-#. ($self->Data)
-msgid "Transaction %1 purged"
-msgstr "清除更動報告 %1"
-
-#: lib/RT/Transaction_Overlay.pm:183
-msgid "Transaction Created"
-msgstr "更動報告已新增"
-
-#: html/Admin/Elements/QueueTabs:78
-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
-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/Transaction_Overlay.pm:870
-msgid "Transactions are immutable"
-msgstr "ä¸å¯æ›´æ”¹æ›´å‹•å ±å‘Š"
-
-#: NOT FOUND IN SOURCE
-msgid "Transfer to"
-msgstr "移交給"
-
-#: NOT FOUND IN SOURCE
-msgid "Trying to delete a right: %1"
-msgstr "試圖刪除æŸé …權é™ï¼š%1"
-
-#: NOT FOUND IN SOURCE
-msgid "Tue"
-msgstr "星期二"
-
-#: lib/RT/Date.pm:418
-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
-msgid "Type"
-msgstr "類別"
-
-#: lib/RT/ScripCondition_Overlay.pm:128
-msgid "Unimplemented"
-msgstr "尚無實作"
-
-#: html/Admin/Users/Modify.html:89
-msgid "Unix login"
-msgstr "外部系統登入帳號"
-
-#: NOT FOUND IN SOURCE
-msgid "UnixUsername"
-msgstr "外部系統登入帳號"
-
-#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861
-#. ($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 ""
-
-#: html/Elements/SelectResultsPerPage:58
-msgid "Unlimited"
-msgstr "全數顯示"
-
-#: html/Search/Elements/SelectSearchesForObjects:64
-msgid "Unnamed search"
-msgstr "未命å的查詢"
-
-#: etc/initialdata:32
-msgid "Unprivileged"
-msgstr "éžå…§éƒ¨æˆå“¡"
-
-#: html/Admin/Elements/EditCustomFields:60
-msgid "Unselected Custom Fields"
-msgstr "未é¸å–的自訂欄ä½"
-
-#: html/Admin/CustomFields/Objects.html:61
-msgid "Unselected objects"
-msgstr "未é¸å–的物件"
-
-#: lib/RT/Transaction_Overlay.pm:659
-msgid "Untaken"
-msgstr "未被å—ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Untitled search"
-msgstr "未命å的查詢"
-
-#: NOT FOUND IN SOURCE
-msgid "Up"
-msgstr "上一é "
-
-#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75
-msgid "Update"
-msgstr "處ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "Update All"
-msgstr "全部更新"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ID"
-msgstr "更新編號"
-
-#: html/Ticket/Update.html:135
-msgid "Update Ticket"
-msgstr "更新申請單"
-
-#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72
-msgid "Update Type"
-msgstr "更新類別"
-
-#: NOT FOUND IN SOURCE
-msgid "Update all these tickets at once"
-msgstr "整批更新申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Update email"
-msgstr "æ›´æ–°é›»å­éƒµä»¶ä¿¡ç®±"
-
-#: html/Search/Bulk.html:200 html/Search/Results.html:78
-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
-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
-msgid "Update ticket"
-msgstr "更新申請單"
-
-#: NOT FOUND IN SOURCE
-msgid "Update ticket # %1"
-msgstr "更新申請單 # %1"
-
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
-#. ($Ticket->id)
-msgid "Update ticket #%1"
-msgstr "更新申請單 #%1"
-
-#: html/Ticket/Update.html:158
-#. ($TicketObj->id, $TicketObj->Subject)
-msgid "Update ticket #%1 (%2)"
-msgstr "更新申請單 #%1 (%2)"
-
-#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583
-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
-msgid "Updated"
-msgstr "å‰æ¬¡æ›´æ–°"
-
-#: html/Tools/Offline.html:93
-msgid "Upload"
-msgstr "上載"
-
-#: lib/RT/CustomField_Overlay.pm:84
-msgid "Upload multiple files"
-msgstr "上載多個檔案"
-
-#: lib/RT/CustomField_Overlay.pm:79
-msgid "Upload multiple images"
-msgstr "上載多份圖片"
-
-#: lib/RT/CustomField_Overlay.pm:85
-msgid "Upload one file"
-msgstr "上載一個檔案"
-
-#: lib/RT/CustomField_Overlay.pm:80
-msgid "Upload one image"
-msgstr "上載一份圖片"
-
-#: lib/RT/CustomField_Overlay.pm:86
-msgid "Upload up to %1 files"
-msgstr "上載最多 %1 個檔案"
-
-#: lib/RT/CustomField_Overlay.pm:81
-msgid "Upload up to %1 images"
-msgstr "上載最多 %1 份圖片"
-
-#: html/Tools/Offline.html:93
-msgid "Upload your changes"
-msgstr "上載您的更動"
-
-#: html/Admin/index.html:90
-msgid "Use other RT administrative tools"
-msgstr ""
-
-#: NOT FOUND IN SOURCE
-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:506
-#. ($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"
-
-#: etc/initialdata:132 etc/initialdata:206
-msgid "User Defined"
-msgstr "使用者自訂"
-
-#: html/Admin/Elements/EditScrip:93
-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 "員工編號"
-
-#: 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
-msgid "User Rights"
-msgstr "使用者權é™"
-
-#: NOT FOUND IN SOURCE
-msgid "User Setup"
-msgstr "使用者設定"
-
-#: NOT FOUND IN SOURCE
-msgid "User Shift"
-msgstr "å“¡å·¥ç­åˆ¥"
-
-#: NOT FOUND IN SOURCE
-msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
-msgstr "使用者試圖在 %2 物件 #%3 çš„è‡ªè¨‚æ¬„ä½ %1 上執行未知的更新æ“作"
-
-#: html/Admin/Users/Modify.html:301
-#. ($msg)
-msgid "User could not be created: %1"
-msgstr "無法新增使用者:%1"
-
-#: lib/RT/User_Overlay.pm:330
-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) 新增完畢"
-
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
-msgid "User defined groups"
-msgstr "使用者定義的群組"
-
-#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612
-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 "使用者ç§äººè³‡æ–™"
-
-#: html/Admin/Groups/index.html:103
-msgid "User-defined groups"
-msgstr "使用者自定群組"
-
-#: NOT FOUND IN SOURCE
-msgid "UserDefined"
-msgstr "使用者自定"
-
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
-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
-msgid "Users"
-msgstr "使用者"
-
-#: html/Admin/Users/index.html:85
-msgid "Users matching search criteria"
-msgstr "符åˆæŸ¥è©¢æ¢ä»¶çš„使用者"
-
-#: bin/rt-crontool:134
-#. ($transaction->id)
-msgid "Using transaction #%1..."
-msgstr "使用更動 #%1..."
-
-#: lib/RT/Tickets_Overlay_SQL.pm:528
-msgid "Valid Query"
-msgstr "åˆç†çš„查詢"
-
-#: html/Admin/CustomFields/Modify.html:80
-msgid "Validation"
-msgstr "é©—è­‰"
-
-#: NOT FOUND IN SOURCE
-msgid "ValueOfQueue"
-msgstr "é¸æ“‡è¡¨å–®"
-
-#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78
-msgid "Values"
-msgstr "欄ä½å€¼"
-
-#: NOT FOUND IN SOURCE
-msgid "View log"
-msgstr "檢視紀錄檔"
-
-#: lib/RT/Queue_Overlay.pm:107
-msgid "Watch"
-msgstr "視察"
-
-#: lib/RT/Queue_Overlay.pm:108
-msgid "WatchAsAdminCc"
-msgstr "以管ç†å“¡å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è¦–察"
-
-#: NOT FOUND IN SOURCE
-msgid "Watcher loaded"
-msgstr "æˆåŠŸè¼‰å…¥è¦–察員資訊"
-
-#: html/Admin/Elements/QueueTabs:63
-msgid "Watchers"
-msgstr "視察員"
-
-#: NOT FOUND IN SOURCE
-msgid "WebEncoding"
-msgstr "網é æ–‡å­—編碼方å¼"
-
-#: NOT FOUND IN SOURCE
-msgid "Wed"
-msgstr "星期三"
-
-#: lib/RT/Date.pm:419
-msgid "Wed."
-msgstr "星期三"
-
-#: html/Tools/MyDay.html:75
-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 "當申請單通éŽæ‰€æœ‰ç°½æ ¸å¾Œï¼Œå°‡æ­¤è¨Šæ¯å›žè¦†åˆ°åŽŸç”³è«‹å–®"
-
-#: etc/initialdata:485
-msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr "當申請單通éŽæŸé …簽核後,將此訊æ¯å›žè¦†åˆ°åŽŸç”³è«‹å–®"
-
-#: etc/initialdata:146
-msgid "When a ticket is created"
-msgstr "新增申請單時"
-
-#: etc/initialdata:418
-msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
-msgstr "簽核單新增之後,通知應å—ç†çš„承辦人åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº"
-
-#: etc/initialdata:151
-msgid "When anything happens"
-msgstr "當任何事情發生時"
-
-#: etc/initialdata:199
-msgid "Whenever a ticket is resolved"
-msgstr "當申請單解決時"
-
-#: etc/initialdata:185
-msgid "Whenever a ticket's owner changes"
-msgstr "當申請單更æ›æ‰¿è¾¦äººæ™‚"
-
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
-msgid "Whenever a ticket's priority changes"
-msgstr "當申請單的優先順åºæ”¹è®Šæ™‚"
-
-#: etc/initialdata:193
-msgid "Whenever a ticket's queue changes"
-msgstr "當申請單更æ›è¡¨å–®æ™‚"
-
-#: etc/initialdata:170
-msgid "Whenever a ticket's status changes"
-msgstr "當申請單更新ç¾æ³æ™‚"
-
-#: etc/initialdata:207
-msgid "Whenever a user-defined condition occurs"
-msgstr "當使用者自訂的情æ³ç™¼ç”Ÿæ™‚"
-
-#: etc/initialdata:164
-msgid "Whenever comments come in"
-msgstr "當評論é€é”時"
-
-#: etc/initialdata:157
-msgid "Whenever correspondence comes in"
-msgstr "當回覆é€é”時"
-
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88
-msgid "Work"
-msgstr "å…¬å¸"
-
-#: html/Search/Results.html:82
-msgid "Work offline"
-msgstr "離線工作"
-
-#: NOT FOUND IN SOURCE
-msgid "WorkPhone"
-msgstr "å…¬å¸é›»è©±"
-
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
-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 您是未經授權的使用者"
-
-#: NOT FOUND IN SOURCE
-msgid "Yes"
-msgstr "是"
-
-#: lib/RT/Ticket_Overlay.pm:3140
-msgid "You already own this ticket"
-msgstr "您已是這份申請單的承辦人"
-
-#: html/autohandler:214 html/autohandler:222
-msgid "You are not an authorized user"
-msgstr "您ä¸æ˜¯è¢«æŽˆæ¬Šçš„使用者"
-
-#: NOT FOUND IN SOURCE
-msgid "You can access it with the Download button on the right."
-msgstr "您å¯ä»¥æŒ‰å³æ–¹çš„「下載ã€éµä¾†å–得。"
-
-#: html/Prefs/Search.html:56
-msgid "You can also edit the predefined search itself"
-msgstr ""
-
-#: lib/RT/Ticket_Overlay.pm:3025
-msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "祇能é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿è¾¦æˆ–是沒有承辦人的申請單"
-
-#: lib/RT/Ticket_Overlay.pm:3021
-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"
-
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
-#. ($num, $queue)
-msgid "You found %1 tickets in queue %2"
-msgstr "您會在表單 %2 找到 %1 的申請單"
-
-#: html/NoAuth/Logout.html:52
-msgid "You have been logged out of RT."
-msgstr "您已登出 RT。"
-
-#: html/SelfService/Display.html:133
-msgid "You have no permission to create tickets in that queue."
-msgstr "您沒有在該表單新增申請單的權é™ã€‚"
-
-#: lib/RT/Ticket_Overlay.pm:2003
-msgid "You may not create requests in that queue."
-msgstr "您ä¸èƒ½åœ¨è©²è¡¨å–®ä¸­æ出申請。"
-
-#: NOT FOUND IN SOURCE
-msgid "You need to restart the Request Tracker service for saved changes to take effect."
-msgstr "您必須é‡æ–°å•Ÿå‹• Request Tracker æœå‹™ï¼Œå„²å­˜çš„更動纔會生效。"
-
-#: html/NoAuth/Logout.html:56
-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 寄出的郵件收件人標頭檔"
-
-#: etc/initialdata:502
-msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr "申請單已由 %1 批准。å¯èƒ½é‚„有其他待簽核的步驟。"
-
-#: etc/initialdata:540
-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 é§å›žã€‚"
-
-#: etc/initialdata:445
-msgid "Your request was rejected."
-msgstr "您的申請單已被é§å›žã€‚"
-
-#: html/autohandler:251
-msgid "Your username or password is incorrect"
-msgstr "您的帳號或密碼有誤"
-
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
-msgid "Zip"
-msgstr "郵éžå€è™Ÿ"
-
-#: NOT FOUND IN SOURCE
-msgid "[no subject]"
-msgstr "[沒有標題]"
-
-#: NOT FOUND IN SOURCE
-msgid "ago"
-msgstr "éŽæœŸ"
-
-#: NOT FOUND IN SOURCE
-msgid "alert"
-msgstr "急訊"
-
-#: lib/RT/System.pm:87
-msgid "allow creation of saved searches"
-msgstr "å…許建立é å­˜æŸ¥è©¢"
-
-#: lib/RT/System.pm:86
-msgid "allow loading of saved searches"
-msgstr "å…許載入é å­˜æŸ¥è©¢"
-
-#: NOT FOUND IN SOURCE
-msgid "approving"
-msgstr "待簽核"
-
-#: html/User/Elements/DelegateRights:80
-#. ($right->PrincipalObj->Object->SelfDescription)
-msgid "as granted to %1"
-msgstr "權é™åŒ %1"
-
-#: html/Search/Results.html:83
-msgid "chart"
-msgstr ""
-
-#: html/SelfService/Closed.html:49
-msgid "closed"
-msgstr "已解決"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
-msgid "contains"
-msgstr "包å«"
-
-#: NOT FOUND IN SOURCE
-msgid "content"
-msgstr "內容"
-
-#: NOT FOUND IN SOURCE
-msgid "content-type"
-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 "åš´é‡"
-
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346
-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 "已刪除"
-
-#: html/Search/Elements/PickBasics:61
-msgid "does not match"
-msgstr "ä¸ç¬¦åˆ"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
-msgid "doesn't contain"
-msgstr "ä¸åŒ…å«"
-
-#: NOT FOUND IN SOURCE
-msgid "email address"
-msgstr "é›»å­éƒµä»¶ä¿¡ç®±"
-
-#: NOT FOUND IN SOURCE
-msgid "emergency"
-msgstr "å±é›£"
-
-#: html/Elements/SelectEqualityOperator:59
-msgid "equal to"
-msgstr "等於"
-
-#: NOT FOUND IN SOURCE
-msgid "error"
-msgstr "錯誤"
-
-#: html/Search/Build.html:547
-msgid "error: can't move down"
-msgstr "錯誤:無法下移"
-
-#: html/Search/Build.html:569
-msgid "error: can't move left"
-msgstr "錯誤:無法左移"
-
-#: html/Search/Build.html:528
-msgid "error: can't move up"
-msgstr "錯誤:無法上移"
-
-#: html/Search/Build.html:612
-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
-msgid "error: nothing to move"
-msgstr "錯誤:沒有å¯ç§»å‹•çš„å°è±¡"
-
-#: html/Search/Build.html:630
-msgid "error: nothing to toggle"
-msgstr "錯誤:沒有å¯åˆ‡æ›çš„å°è±¡"
-
-#: NOT FOUND IN SOURCE
-msgid "false"
-msgstr "å‡"
-
-#: NOT FOUND IN SOURCE
-msgid "filename"
-msgstr "檔å"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
-msgid "greater than"
-msgstr "大於"
-
-#: lib/RT/Group_Overlay.pm:214
-#. ($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
-msgid "hours"
-msgstr "å°æ™‚"
-
-#: html/Search/Elements/PickBasics:48
-msgid "id"
-msgstr "編號"
-
-#: NOT FOUND IN SOURCE
-msgid "info"
-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
-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
-msgid "isn't"
-msgstr "ä¸æ˜¯"
-
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
-msgid "less than"
-msgstr "å°æ–¼"
-
-#: NOT FOUND IN SOURCE
-msgid "level Admin"
-msgstr "層主管"
-
-#: html/Search/Elements/PickBasics:60
-msgid "matches"
-msgstr "符åˆ"
-
-#: lib/RT/Date.pm:338
-msgid "min"
-msgstr "分"
-
-#: NOT FOUND IN SOURCE
-msgid "minutes"
-msgstr "分é˜"
-
-#: NOT FOUND IN SOURCE
-msgid "modifications\\n\\n"
-msgstr "更改\\n\\n"
-
-#: lib/RT/Date.pm:354
-msgid "months"
-msgstr "月"
-
-#: lib/RT/Queue_Overlay.pm:82
-msgid "new"
-msgstr "新建立"
-
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65
-msgid "no name"
-msgstr "沒有å稱"
-
-#: html/Admin/Elements/EditScrips:64
-msgid "no value"
-msgstr "沒有值"
-
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
-msgid "none"
-msgstr "ç„¡"
-
-#: html/Elements/SelectEqualityOperator:59
-msgid "not equal to"
-msgstr "ä¸ç­‰æ–¼"
-
-#: NOT FOUND IN SOURCE
-msgid "notice"
-msgstr "æ示"
-
-#: NOT FOUND IN SOURCE
-msgid "notlike"
-msgstr "ä¸ç¬¦åˆ"
-
-#: NOT FOUND IN SOURCE
-msgid "number"
-msgstr "號"
-
-#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83
-msgid "open"
-msgstr "é–‹å•Ÿ"
-
-#: NOT FOUND IN SOURCE
-msgid "opened"
-msgstr "已開啟"
-
-#: lib/RT/Group_Overlay.pm:219
-#. ($self->Name, $user->Name)
-msgid "personal group '%1' for user '%2'"
-msgstr "使用者「%2ã€çš„「%1ã€ä»£ç†äººç¾¤çµ„"
-
-#: lib/RT/Group_Overlay.pm:227
-#. ($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 "已處ç†"
-
-#: NOT FOUND IN SOURCE
-msgid "rtname"
-msgstr "伺æœå™¨å稱"
-
-#: lib/RT/Date.pm:334
-msgid "sec"
-msgstr "秒"
-
-#: lib/RT/System.pm:85
-msgid "show Configuration tab"
-msgstr "顯示設定é ç±¤"
-
-#: html/Search/Results.html:80
-msgid "spreadsheet"
-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
-msgid "summary rows"
-msgstr "加總列"
-
-#: lib/RT/Group_Overlay.pm:222
-#. ($self->Type)
-msgid "system %1"
-msgstr "系統 %1"
-
-#: lib/RT/Group_Overlay.pm:233
-#. ($self->Type)
-msgid "system group '%1'"
-msgstr "系統群組 '%1'"
-
-#: html/Elements/Error:64 html/SelfService/Error.html:63
-msgid "the calling component did not specify why"
-msgstr "呼å«å…ƒä»¶æœªæŒ‡æ˜ŽåŽŸå› "
-
-#: NOT FOUND IN SOURCE
-msgid "ticket #%1"
-msgstr "申請單 #%1"
-
-#: lib/RT/Group_Overlay.pm:230
-#. ($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 "到"
-
-#: NOT FOUND IN SOURCE
-msgid "true"
-msgstr "真"
-
-#: lib/RT/Group_Overlay.pm:236
-#. ($self->Id)
-msgid "undescribed group %1"
-msgstr "沒有æ述的群組 %1"
-
-#: NOT FOUND IN SOURCE
-msgid "unresolved"
-msgstr "未處ç†"
-
-#: lib/RT/Group_Overlay.pm:211
-#. ($user->Object->Name)
-msgid "user %1"
-msgstr "使用者 %1"
-
-#: NOT FOUND IN SOURCE
-msgid "warning"
-msgstr "警告"
-
-#: lib/RT/Date.pm:350
-msgid "weeks"
-msgstr "週"
-
-#: NOT FOUND IN SOURCE
-msgid "with template %1"
-msgstr "範本:%1"
-
-#: lib/RT/Date.pm:358
-msgid "years"
-msgstr "å¹´"
-
-msgid "Press 'Esc' to close this window."
-msgstr "按 'Esc' éµå¯é—œé–‰æœ¬è¦–窗。"
-
-msgid "HasMember"
-msgstr "æ“有æˆå“¡"
-
-msgid "LinkedTo"
-msgstr "連çµè‡³"
-
-msgid "Watcher"
-msgstr "視察員"
-
-msgid "(displaying new and open tickets for %1)"
-msgstr "(顯示 %1 å下新建立åŠé–‹å•Ÿä¸­çš„申請單)"
diff --git a/rt/lib/RT/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm
index 5e1999816..ec0e877b4 100644
--- a/rt/lib/RT/Interface/CLI.pm
+++ b/rt/lib/RT/Interface/CLI.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
use strict;
use RT;
@@ -54,12 +29,14 @@ package RT::Interface::CLI;
BEGIN {
- use base 'Exporter';
- use vars qw ($VERSION @EXPORT @EXPORT_OK %EXPORT_TAGS);
+ use Exporter ();
+ use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
# set the version for version checking
- $VERSION = do { my @r = (q$Revision: 1.1.1.10 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
-
+ $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
+
+ @ISA = qw(Exporter);
+
# your exported package globals go here,
# as well as any optionally exported functions
@EXPORT_OK = qw(&CleanEnv
@@ -99,6 +76,11 @@ BEGIN {
=head1 METHODS
+=begin testing
+
+ok(require RT::Interface::CLI);
+
+=end testing
=cut
@@ -200,9 +182,9 @@ sub GetMessageContent {
#Load the sourcefile, if it's been handed to us
if ($source) {
- open( SOURCE, '<', $source ) or die $!;
- @lines = (<SOURCE>) or die $!;
- close (SOURCE) or die $!;
+ open (SOURCE, "<$source");
+ @lines = (<SOURCE>);
+ close (SOURCE);
}
elsif ($args{'Content'}) {
@lines = split('\n',$args{'Content'});
@@ -214,21 +196,21 @@ sub GetMessageContent {
for (@lines) {
print $fh $_;
}
- close ($fh) or die $!;
+ close ($fh);
#Edit the file if we need to
if ($edit) {
unless ($ENV{'EDITOR'}) {
- $RT::Logger->crit('No $EDITOR variable defined');
+ $RT::Logger->crit('No $EDITOR variable defined'. "\n");
return undef;
}
system ($ENV{'EDITOR'}, $filename);
}
- open( READ, '<', $filename ) or die $!;
+ open (READ, "<$filename");
my @newlines = (<READ>);
- close (READ) or die $!;
+ close (READ);
unlink ($filename) unless (debug());
return(\@newlines);
@@ -243,7 +225,7 @@ sub debug {
my $val = shift;
my ($debug);
if ($val) {
- $RT::Logger->debug($val);
+ $RT::Logger->debug($val."\n");
if ($debug) {
print STDERR "$val\n";
}
@@ -256,6 +238,9 @@ sub debug {
# }}}
-RT::Base->_ImportOverlays();
+eval "require RT::Interface::CLI_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/CLI_Vendor.pm});
+eval "require RT::Interface::CLI_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/CLI_Local.pm});
1;
diff --git a/rt/lib/RT/Interface/Email.pm b/rt/lib/RT/Interface/Email.pm
index 401e970e8..7eec0502f 100755
--- a/rt/lib/RT/Interface/Email.pm
+++ b/rt/lib/RT/Interface/Email.pm
@@ -1,91 +1,63 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
package RT::Interface::Email;
use strict;
-use warnings;
-
-use Email::Address;
+use Mail::Address;
use MIME::Entity;
use RT::EmailParser;
-use File::Temp;
-use UNIVERSAL::require;
-use Mail::Mailer ();
-BEGIN {
- use base 'Exporter';
- use vars qw ( @EXPORT_OK);
+BEGIN {
+ use Exporter ();
+ use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
# set the version for version checking
- our $VERSION = 2.0;
-
+ $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
+
+ @ISA = qw(Exporter);
+
# your exported package globals go here,
# as well as any optionally exported functions
- @EXPORT_OK = qw(
- &CreateUser
- &GetMessageContent
- &CheckForLoops
- &CheckForSuspiciousSender
- &CheckForAutoGenerated
- &CheckForBounce
- &MailError
- &ParseCcAddressesFromHead
- &ParseSenderAddressFromHead
- &ParseErrorsToAddressFromHead
- &ParseAddressFromHeader
- &Gateway);
+ @EXPORT_OK = qw(
+ &CreateUser
+ &GetMessageContent
+ &CheckForLoops
+ &CheckForSuspiciousSender
+ &CheckForAutoGenerated
+ &MailError
+ &ParseCcAddressesFromHead
+ &ParseSenderAddressFromHead
+ &ParseErrorsToAddressFromHead
+ &ParseAddressFromHeader
+ &Gateway);
}
=head1 NAME
- RT::Interface::Email - helper functions for parsing email sent to RT
+ RT::Interface::CLI - helper functions for creating a commandline RT interface
=head1 SYNOPSIS
@@ -97,1627 +69,425 @@ BEGIN {
=head1 DESCRIPTION
+=begin testing
+ok(require RT::Interface::Email);
-=head1 METHODS
+=end testing
-=head2 CheckForLoops HEAD
-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.
+=head1 METHODS
=cut
-sub CheckForLoops {
- my $head = shift;
- # If this instance of RT sent it our, we don't want to take it in
+# {{{ sub CheckForLoops
+
+sub CheckForLoops {
+ my $head = shift;
+
+ #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->Config->Get('rtname') ) {
- return 1;
+ chomp ($RTLoop); #remove that newline
+ if ($RTLoop eq "$RT::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>.
-
-=cut
+# {{{ sub CheckForSuspiciousSender
sub CheckForSuspiciousSender {
my $head = shift;
#if it's from a postmaster or mailer daemon, it's likely a bounce.
-
+
#TODO: better algorithms needed here - there is no standards for
#bounces, so it's very difficult to separate them from anything
#else. At the other hand, the Return-To address is only ment to be
#used as an error channel, we might want to put up a separate
#Return-To address which is treated differently.
-
+
#TODO: search through the whole email and find the right Ticket ID.
- my ( $From, $junk ) = ParseSenderAddressFromHead($head);
-
- if ( ( $From =~ /^mailer-daemon\@/i )
- or ( $From =~ /^postmaster\@/i )
- or ( $From eq "" ))
- {
- return (1);
-
+ my ($From, $junk) = ParseSenderAddressFromHead($head);
+
+ if (($From =~ /^mailer-daemon/i) or
+ ($From =~ /^postmaster/i)){
+ 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;
-
- my $Precedence = $head->get("Precedence") || "";
- if ( $Precedence =~ /^(bulk|junk)/i ) {
- 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);
+
+ my $Precedence = $head->get("Precedence") || "" ;
+ if ($Precedence =~ /^(bulk|junk)/i) {
+ return (1);
}
-
- # First Class mailer uses this as a clue.
- my $FCJunk = $head->get("X-FC-Machinegenerated") || "";
- if ( $FCJunk =~ /^true/i ) {
- return (1);
+ else {
+ return (0);
}
-
- return (0);
}
+# }}}
-sub CheckForBounce {
- my $head = shift;
-
- my $ReturnPath = $head->get("Return-path") || "";
- return ( $ReturnPath =~ /<>/ );
-}
-
-
-=head2 MailError PARAM HASH
-
-Sends an error message. Takes a param hash:
-
-=over 4
-
-=item From - sender's address, by default is 'CorrespondAddress';
-
-=item To - recipient, by default is 'OwnerEmail';
-
-=item Bcc - optional Bcc recipients;
-
-=item Subject - subject of the message, default is 'There has been an error';
-
-=item Explanation - main content of the error, default value is 'Unexplained error';
-
-=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.
-
-=item Attach - optional text that attached to the error as 'message/rfc822' part.
-
-=item LogLevel - log level under which we should write explanation message into the
-log, by default we log it as critical.
-
-=back
-
-=cut
+# {{{ sub MailError
sub MailError {
- my %args = (
- To => RT->Config->Get('OwnerEmail'),
- Bcc => undef,
- From => RT->Config->Get('CorrespondAddress'),
- Subject => 'There has been an error',
- Explanation => 'Unexplained error',
- MIMEObj => undef,
- Attach => undef,
- LogLevel => 'crit',
- @_
- );
-
- $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_args = (
- Type => "multipart/mixed",
- From => $args{'From'},
- Bcc => $args{'Bcc'},
- To => $args{'To'},
- Subject => $args{'Subject'},
- 'X-RT-Loop-Prevention:' => RT->Config->Get('rtname'),
- );
-
- # only set precedence if the sysadmin wants us to
- if (defined(RT->Config->Get('DefaultErrorMailPrecedence'))) {
- $entity_args{'Precedence:'} = RT->Config->Get('DefaultErrorMailPrecedence');
- }
-
- my $entity = MIME::Entity->build(%entity_args);
- SetInReplyTo( Message => $entity, InReplyTo => $args{'MIMEObj'} );
-
- $entity->attach( Data => $args{'Explanation'} . "\n" );
-
- if ( $args{'MIMEObj'} ) {
- $args{'MIMEObj'}->sync_headers;
- $entity->add_part( $args{'MIMEObj'} );
- }
-
- if ( $args{'Attach'} ) {
- $entity->attach( Data => $args{'Attach'}, Type => 'message/rfc822' );
-
- }
-
- 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.
-
-If the C<X-RT-Squelch> header is set to any true value, the mail will
-not be sent. One use is to let extensions easily cancel outgoing mail.
-
-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;
+ my %args = (To => $RT::OwnerEmail,
+ Bcc => undef,
+ From => $RT::CorrespondAddress,
+ Subject => 'There has been an error',
+ Explanation => 'Unexplained error',
+ MIMEObj => undef,
+ LogLevel => 'crit',
+ @_);
+
+
+ $RT::Logger->log(level => $args{'LogLevel'},
+ message => $args{'Explanation'}
+ );
+ my $entity = MIME::Entity->build( Type =>"multipart/mixed",
+ From => $args{'From'},
+ Bcc => $args{'Bcc'},
+ To => $args{'To'},
+ Subject => $args{'Subject'},
+ 'X-RT-Loop-Prevention' => $RT::rtname,
+ );
+
+ $entity->attach( Data => $args{'Explanation'}."\n");
- # 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;
+ my $mimeobj = $args{'MIMEObj'};
+ if ($mimeobj) {
+ $mimeobj->sync_headers();
+ $entity->add_part($mimeobj);
}
-
- if ($args{'Entity'}->head->get('X-RT-Squelch')) {
- $RT::Logger->info( $msgid . " Squelch header 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' and not $Mail::Mailer::testfile::config{outfile}) {
- $Mail::Mailer::testfile::config{outfile} = File::Temp->new;
- $RT::Logger->info("Storing outgoing emails in $Mail::Mailer::testfile::config{outfile}");
- }
-
- # 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 >/dev/null" )
- 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 );
- die $msg;
- }
- };
- if ( $@ ) {
- $RT::Logger->crit( "$msgid: Could not send mail with command `$path $args`: " . $@ );
- if ( $TicketObj ) {
- _RecordSendEmailFailure( $TicketObj );
- }
- 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.");
- if ($TicketObj) {
- _RecordSendEmailFailure( $TicketObj );
- }
- 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." );
- if ( $TicketObj ) {
- _RecordSendEmailFailure( $TicketObj );
- }
- return 0;
- }
+
+ if ($RT::MailCommand eq 'sendmailpipe') {
+ open (MAIL, "|$RT::SendmailPath $RT::SendmailArguments") || return(0);
+ print MAIL $entity->as_string;
+ close(MAIL);
}
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." );
- if ( $TicketObj ) {
- _RecordSendEmailFailure( $TicketObj );
- }
- 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( $_ => Encode::encode_utf8( $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"));
+ $entity->send($RT::MailCommand, $RT::MailParams);
}
-
- my ($template, $msg) = PrepareEmailUsingTemplate(
- Template => $args{'Template'},
- Arguments => {
- Ticket => $ticket,
- Transaction => $txn,
- },
- );
-
- my $mail;
- if ( $template ) {
- $mail = $template->MIMEObj;
- } else {
- $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+$//;
-
- # 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);
-}
+# {{{ Create User
sub CreateUser {
- my ( $Username, $Address, $Name, $ErrorsTo, $entity ) = @_;
-
- my $NewUser = RT::User->new( $RT::SystemUser );
-
- my ( $Val, $Message ) = $NewUser->Create(
- Name => ( $Username || $Address ),
- EmailAddress => $Address,
- RealName => $Name,
- Password => undef,
- Privileged => 0,
- Comments => 'Autocreated on ticket submission',
- );
-
+ my ($Username, $Address, $Name, $ErrorsTo, $entity) = @_;
+ my $NewUser = RT::User->new($RT::SystemUser);
+
+ # This data is tainted by some Very Broken mailers.
+ # (Sometimes they send raw ISO 8859-1 data here. fear that.
+ require Encode;
+ $Username = Encode::encode(utf8 => $Username, Encode::FB_PERLQQ()) if defined $Username;
+ $Name = Encode::encode(utf8 => $Name, Encode::FB_PERLQQ()) if defined $Name;
+
+ my ($Val, $Message) =
+ $NewUser->Create(Name => ($Username || $Address),
+ EmailAddress => $Address,
+ RealName => $Name,
+ Password => undef,
+ Privileged => 0,
+ Comments => 'Autocreated on ticket submission'
+ );
+
unless ($Val) {
-
+
# Deal with the race condition of two account creations at once
+ #
if ($Username) {
$NewUser->LoadByName($Username);
}
-
- unless ( $NewUser->Id ) {
+
+ unless ($NewUser->Id) {
$NewUser->LoadByEmail($Address);
}
-
- unless ( $NewUser->Id ) {
- MailError(
- To => $ErrorsTo,
- Subject => "User could not be created",
- Explanation =>
- "User creation failed in mailgateway: $Message",
- MIMEObj => $entity,
- LogLevel => 'crit',
- );
+
+ unless ($NewUser->Id) {
+ MailError( To => $ErrorsTo,
+ Subject => "User could not be created",
+ Explanation => "User creation failed in mailgateway: $Message",
+ MIMEObj => $entity,
+ LogLevel => 'crit'
+ );
}
}
#Load the new user object
- my $CurrentUser = new RT::CurrentUser;
- $CurrentUser->LoadByEmail( $Address );
+ my $CurrentUser = RT::CurrentUser->new();
+ $CurrentUser->LoadByEmail($Address);
- unless ( $CurrentUser->id ) {
- $RT::Logger->warning(
- "Couldn't load user '$Address'." . "giving up" );
- MailError(
- To => $ErrorsTo,
- Subject => "User could not be loaded",
- Explanation =>
- "User '$Address' could not be loaded in the mail gateway",
- MIMEObj => $entity,
- LogLevel => 'crit'
- );
+ unless ($CurrentUser->id) {
+ $RT::Logger->warning("Couldn't load user '$Address'.". "giving up");
+ MailError( To => $ErrorsTo,
+ Subject => "User could not be loaded",
+ Explanation => "User '$Address' could not be loaded in the mail gateway",
+ MIMEObj => $entity,
+ LogLevel => 'crit'
+ );
}
return $CurrentUser;
}
+# }}}
+# {{{ ParseCcAddressesFromHead
+=head2 ParseCcAddressesFromHead HASHREF
-
-=head2 ParseCcAddressesFromHead HASH
-
-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
+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 configuration sub RT::IsRTAddress matches.
=cut
-
+
sub ParseCcAddressesFromHead {
- my %args = (
- Head => undef,
- QueueObj => undef,
- CurrentUser => undef,
- @_
- );
-
- my $current_address = lc $args{'CurrentUser'}->EmailAddress;
- my $user = $args{'CurrentUser'}->UserObj;
-
- return
- grep $_ ne $current_address && !RT::EmailParser->IsRTAddress( $_ ),
- map lc $user->CanonicalizeEmailAddress( $_->address ),
- map Email::Address->parse( $args{'Head'}->get( $_ ) ),
- qw(To Cc);
+ my %args = ( Head => undef,
+ QueueObj => undef,
+ CurrentUser => undef,
+ @_ );
+
+ my (@Addresses);
+
+ my @ToObjs = Mail::Address->parse($args{'Head'}->get('To'));
+ my @CcObjs = Mail::Address->parse($args{'Head'}->get('Cc'));
+
+ foreach my $AddrObj (@ToObjs, @CcObjs) {
+ my $Address = $AddrObj->address;
+ $Address = $args{'CurrentUser'}->UserObj->CanonicalizeEmailAddress($Address);
+ next if ($args{'CurrentUser'}->EmailAddress =~ /^$Address$/i);
+ next if ($args{'QueueObj'}->CorrespondAddress =~ /^$Address$/i);
+ next if ($args{'QueueObj'}->CommentAddress =~ /^$Address$/i);
+ next if (RT::EmailParser::IsRTAddress(undef, $Address));
+
+ push (@Addresses, $Address);
+ }
+ return (@Addresses);
}
+# }}}
-=head2 ParseSenderAddressFromHead HEAD
+# {{{ ParseSenderAdddressFromHead
-Takes a MIME::Header object. Returns a tuple: (user@host, friendly name)
+=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 $head = shift;
-
#Figure out who's sending this message.
- foreach my $header ('Reply-To', 'From', 'Sender') {
- 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);
+ my $From = $head->get('Reply-To') ||
+ $head->get('From') ||
+ $head->get('Sender');
+ return (ParseAddressFromHeader($From));
}
+# }}}
-=head2 ParseErrorsToAddressFromHead HEAD
+# {{{ ParseErrorsToAdddressFromHead
+
+=head2 ParseErrorsToAddressFromHead
Takes a MIME::Header object. Return a single value : user@host
-of the From (evaluated in order of Return-path:,Errors-To:,Reply-To:,
-From:, Sender)
+of the From (evaluated in order of Errors-To:,Reply-To:, From:, Sender)
=cut
sub ParseErrorsToAddressFromHead {
my $head = 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 = $head->get($header);
- if ($headerobj) {
- my ( $addr, $name ) = ParseAddressFromHeader($headerobj);
-
- # If it's got actual useful content...
- return ($addr) if ($addr);
- }
+ foreach my $header ('Errors-To' , 'Reply-To', 'From', 'Sender' ) {
+ # If there's a header of that name
+ my $headerobj = $head->get($header);
+ if ($headerobj) {
+ my ($addr, $name ) = ParseAddressFromHeader($headerobj);
+ # If it's got actual useful content...
+ return ($addr) if ($addr);
+ }
}
}
+# }}}
-
+# {{{ ParseAddressFromHeader
=head2 ParseAddressFromHeader ADDRESS
-Takes an address from C<$head->get('Line')> and returns a tuple: user@host, friendly name
+Takes an address from $head->get('Line') and returns a tuple: user@host, friendly name
=cut
-sub ParseAddressFromHeader {
- my $Addr = shift;
- # Some broken mailers send: ""Vincent, Jesse"" <jesse@fsck.com>. Hate
- $Addr =~ s/\"\"(.*?)\"\"/\"$1\"/g;
- my @Addresses = RT::EmailParser->ParseEmailAddress($Addr);
+sub ParseAddressFromHeader{
+ my $Addr = shift;
+
+ my @Addresses = Mail::Address->parse($Addr);
+
+ my $AddrObj = $Addresses[0];
- my ($AddrObj) = grep ref $_, @Addresses;
- unless ( $AddrObj ) {
- return ( undef, undef );
+ unless (ref($AddrObj)) {
+ return(undef,undef);
}
-
- my $Name = ( $AddrObj->name || $AddrObj->phrase || $AddrObj->comment || $AddrObj->address );
-
+
+ my $Name = ($AddrObj->phrase || $AddrObj->comment || $AddrObj->address);
+
#Lets take the from and load a user object.
my $Address = $AddrObj->address;
- return ( $Address, $Name );
-}
-
-=head2 DeleteRecipientsFromHead HEAD RECIPIENTS
-
-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 .">" ;
+ return ($Address, $Name);
}
+# }}}
-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 $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 ) {
- $id = $1;
- } else {
- 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
-
-
-Takes parameters:
-
- action
- queue
- message
+=head2 Gateway
This performs all the "guts" of the mail rt-mailgate program, and is
designed to be called from the web interface with a message, user
object, and so on.
-Can also take an optional 'ticket' parameter; this ticket id overrides
-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
- 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 = (
- action => 'correspond',
- queue => '1',
- ticket => undef,
- message => undef,
- %$argsref
- );
-
- my $SystemTicket;
- my $Right;
+ my %args = ( message => undef,
+ queue => 1,
+ action => 'correspond',
+ ticket => undef,
+ @_ );
# Validate the action
- my ( $status, @actions ) = IsCorrectAction( $args{'action'} );
- unless ($status) {
- return (
- -75,
- "Invalid 'action' parameter "
- . $actions[0]
- . " for queue "
- . $args{'queue'},
- undef
- );
+ unless ( $args{'action'} =~ /^(comment|correspond|action)$/ ) {
+
+ # Can't safely loc this. What object do we loc around?
+ return ( 0, "Invalid 'action' parameter", undef );
}
my $parser = RT::EmailParser->new();
- $parser->SmartParseMIMEEntityFromScalar(
- Message => $args{'message'},
- Decode => 0,
- Exact => 1,
- );
+ $parser->ParseMIMEEntityFromScalar( $args{'message'} );
my $Message = $parser->Entity();
- unless ($Message) {
- MailError(
- Subject => "RT Bounce: Unparseable message",
- Explanation => "RT couldn't process the message below",
- Attach => $args{'message'}
- );
-
- return ( 0,
- "Failed to parse this message. Something is likely badly wrong with the message"
- );
- }
-
- 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 $head = $Message->head;
- $skip_plugin{ $class }++;
+ my ( $CurrentUser, $AuthStat, $status, $error );
- 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 $ErrorsTo = ParseErrorsToAddressFromHead($head);
- my $head = $Message->head;
- my $ErrorsTo = ParseErrorsToAddressFromHead( $head );
-
- my $MessageId = $head->get('Message-ID')
- || "<no-message-id-". time . rand(2000) .'@'. RT->Config->Get('Organization') .'>';
+ my $MessageId = $head->get('Message-Id')
+ || "<no-message-id-" . time . rand(2000) . "\@.$RT::Organization>";
#Pull apart the subject line
my $Subject = $head->get('Subject') || '';
chomp $Subject;
-
- # {{{ Lets check for mail loops of various sorts.
- my ($should_store_machine_generated_message, $IsALoop, $result);
- ( $should_store_machine_generated_message, $ErrorsTo, $result, $IsALoop ) =
- _HandleMachineGeneratedMail(
- Message => $Message,
- ErrorsTo => $ErrorsTo,
- Subject => $Subject,
- MessageId => $MessageId
- );
-
- # Do not pass loop messages to MailPlugins, to make sure the loop
- # is broken, unless $RT::StoreLoops is set.
- if ($IsALoop && !$should_store_machine_generated_message) {
- return ( 0, $result, undef );
- }
- # }}}
- $args{'ticket'} ||= ParseTicketId( $Subject );
- $SystemTicket = RT::Ticket->new( $RT::SystemUser );
- $SystemTicket->Load( $args{'ticket'} ) if ( $args{'ticket'} ) ;
- if ( $SystemTicket->id ) {
- $Right = 'ReplyToTicket';
- } else {
- $Right = 'CreateTicket';
+ $args{'ticket'} ||= $parser->ParseTicketId($Subject);
+
+ my $SystemTicket;
+ if ($args{'ticket'} ) {
+ $SystemTicket = RT::Ticket->new($RT::SystemUser);
+ $SystemTicket->Load($args{'ticket'});
}
#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
- unless ( $SystemTicket->id || $SystemQueueObj->id ) {
- return ( -75, "RT couldn't find the queue: " . $args{'queue'}, undef );
- }
-
- my ($AuthStat, $CurrentUser, $error) = GetAuthenticationLevel(
- MailPlugins => \@mail_plugins,
- Actions => \@actions,
- Message => $Message,
- RawMessageRef => \$args{message},
- SystemTicket => $SystemTicket,
- SystemQueue => $SystemQueueObj,
- );
-
- # {{{ If authentication fails and no new user was created, get out.
- if ( !$CurrentUser || !$CurrentUser->id || $AuthStat == -1 ) {
-
- # If the plugins refused to create one, they lose.
- unless ( $AuthStat == -1 ) {
- _NoAuthorizedUserFound(
- Right => $Right,
- Message => $Message,
- Requestor => $ErrorsTo,
- Queue => $args{'queue'}
- );
-
- }
- return ( 0, "Could not load a valid user", undef );
- }
- # If we got a user, but they don't have the right to say things
- if ( $AuthStat == 0 ) {
+ # We can safely have no queue of we have a known-good ticket
+ unless ( $args{'ticket'} || $SystemQueueObj->id ) {
MailError(
- To => $ErrorsTo,
- Subject => "Permission Denied",
- Explanation =>
- "You do not have permission to communicate with RT",
- MIMEObj => $Message
- );
- return (
- 0,
- "$ErrorsTo tried to submit a message to "
- . $args{'Queue'}
- . " without permission.",
- undef
- );
- }
-
-
- unless ($should_store_machine_generated_message) {
- return ( 0, $result, undef );
+ To => $RT::OwnerEmail,
+ Subject => "RT Bounce: $Subject",
+ Explanation => "RT couldn't find the queue: " . $args{'queue'},
+ MIMEObj => $Message );
+ return ( 0, "RT couldn't find the queue: " . $args{'queue'}, undef );
}
- # if plugin's updated SystemTicket then update arguments
- $args{'ticket'} = $SystemTicket->Id if $SystemTicket && $SystemTicket->Id;
-
- my $Ticket = RT::Ticket->new($CurrentUser);
-
- if ( !$args{'ticket'} && grep /^(comment|correspond)$/, @actions )
- {
-
- my @Cc;
- my @Requestors = ( $CurrentUser->id );
-
- if (RT->Config->Get('ParseNewMessageForTicketCcs')) {
- @Cc = ParseCcAddressesFromHead(
- Head => $head,
- CurrentUser => $CurrentUser,
- QueueObj => $SystemQueueObj
- );
- }
-
- my ( $id, $Transaction, $ErrStr ) = $Ticket->Create(
- Queue => $SystemQueueObj->Id,
- Subject => $Subject,
- Requestor => \@Requestors,
- Cc => \@Cc,
- MIMEObj => $Message
- );
- if ( $id == 0 ) {
- MailError(
- To => $ErrorsTo,
- Subject => "Ticket creation failed: $Subject",
- Explanation => $ErrStr,
- MIMEObj => $Message
- );
- return ( 0, "Ticket creation failed: $ErrStr", $Ticket );
- }
-
- # strip comments&corresponds from the actions we don't need
- # to record them if we've created the ticket just now
- @actions = grep !/^(comment|correspond)$/, @actions;
- $args{'ticket'} = $id;
-
- } elsif ( $args{'ticket'} ) {
-
- $Ticket->Load( $args{'ticket'} );
- unless ( $Ticket->Id ) {
- my $error = "Could not find a ticket with id " . $args{'ticket'};
- MailError(
- To => $ErrorsTo,
- Subject => "Message not recorded: $Subject",
- Explanation => $error,
- MIMEObj => $Message
- );
-
- return ( 0, $error );
- }
- $args{'ticket'} = $Ticket->id;
- } else {
- return ( 1, "Success", $Ticket );
- }
-
- # }}}
-
- my $unsafe_actions = RT->Config->Get('UnsafeEmailCommands');
- foreach my $action (@actions) {
-
- # If the action is comment, add a comment.
- if ( $action =~ /^(?:comment|correspond)$/i ) {
- my $method = ucfirst lc $action;
- my ( $status, $msg ) = $Ticket->$method( MIMEObj => $Message );
- unless ($status) {
-
- #Warn the sender that we couldn't actually submit the comment.
- MailError(
- To => $ErrorsTo,
- Subject => "Message not recorded: $Subject",
- Explanation => $msg,
- MIMEObj => $Message
- );
- return ( 0, "Message not recorded: $msg", $Ticket );
- }
- } elsif ($unsafe_actions) {
- my ( $status, $msg ) = _RunUnsafeAction(
- Action => $action,
- ErrorsTo => $ErrorsTo,
- Message => $Message,
- Ticket => $Ticket,
- CurrentUser => $CurrentUser,
- );
- return ($status, $msg, $Ticket) unless $status == 1;
- }
- }
- return ( 1, "Success", $Ticket );
-}
-
-=head2 GetAuthenticationLevel
-
# Authentication Level
- # -1 - Get out. this user has been explicitly declined
+ # -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 = ();
-
+ push @RT::MailPlugins, "Auth::MailFrom" unless @RT::MailPlugins;
# Since this needs loading, no matter what
- foreach (@{ $args{MailPlugins} }) {
- my ($Code, $NewAuthStat);
+
+ for (@RT::MailPlugins) {
+ my $Code;
+ my $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;
+ else {
+ $_ = "RT::Interface::Email::$_" unless /^RT::Interface::Email::/;
+ eval "require $_;";
+ if ($@) {
+ die ("Couldn't load module $_: $@");
+ next;
+ }
+ no strict 'refs';
+ if ( !defined( $Code = *{ $_ . "::GetCurrentUser" }{CODE} ) ) {
+ die ("No GetCurrentUser code found in $_ module");
+ next;
+ }
}
- # strip actions we should skip
- @{$args{Actions}} = grep !$skip_action{$_}, @{$args{Actions}}
- if $AuthStat == -2;
- last unless @{$args{Actions}};
+ ( $CurrentUser, $NewAuthStat ) = $Code->( Message => $Message,
+ CurrentUser => $CurrentUser,
+ AuthLevel => $AuthStat,
+ Action => $args{'action'},
+ Ticket => $SystemTicket,
+ Queue => $SystemQueueObj );
+ # You get the highest level of authentication you were assigned.
last if $AuthStat == -1;
+ $AuthStat = $NewAuthStat if $NewAuthStat > $AuthStat;
}
- return $AuthStat if !wantarray;
-
- return ($AuthStat, $CurrentUser, $error);
-}
-
-sub _RunUnsafeAction {
- my %args = (
- Action => undef,
- ErrorsTo => undef,
- Message => undef,
- Ticket => undef,
- CurrentUser => undef,
- @_
- );
-
- if ( $args{'Action'} =~ /^take$/i ) {
- my ( $status, $msg ) = $args{'Ticket'}->SetOwner( $args{'CurrentUser'}->id );
- unless ($status) {
- MailError(
- To => $args{'ErrorsTo'},
- Subject => "Ticket not taken",
- Explanation => $msg,
- MIMEObj => $args{'Message'}
- );
- return ( 0, "Ticket not taken" );
- }
- } elsif ( $args{'Action'} =~ /^resolve$/i ) {
- my ( $status, $msg ) = $args{'Ticket'}->SetStatus('resolved');
- unless ($status) {
-
- #Warn the sender that we couldn't actually submit the comment.
- MailError(
- To => $args{'ErrorsTo'},
- Subject => "Ticket not resolved",
- Explanation => $msg,
- MIMEObj => $args{'Message'}
- );
- return ( 0, "Ticket not resolved" );
- }
- } else {
- return ( 0, "Not supported unsafe action $args{'Action'}", $args{'Ticket'} );
- }
- return ( 1, "Success" );
-}
-
-=head2 _NoAuthorizedUserFound
-
-Emails the RT Owner and the requestor when the auth plugins return "No auth user found"
-
-=cut
-
-sub _NoAuthorizedUserFound {
- my %args = (
- Right => undef,
- Message => undef,
- Requestor => undef,
- Queue => undef,
- @_
- );
-
- # Notify the RT Admin of the failure.
- MailError(
- 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
-for the creation of a new user for this email (@{[$args{Requestor}]}).
-
-You might need to grant 'Everyone' the right '@{[$args{Right}]}' for the
-queue @{[$args{'Queue'}]}.
+ # {{{ If authentication fails and no new user was created, get out.
+ if ( !$CurrentUser or !$CurrentUser->Id or $AuthStat == -1 ) {
-EOT
- MIMEObj => $args{'Message'},
- LogLevel => 'error'
- );
-
- # Also notify the requestor that his request has been dropped.
- if ($args{'Requestor'} ne RT->Config->Get('OwnerEmail')) {
- MailError(
- To => $args{'Requestor'},
- Subject => "Could not load a valid user",
- Explanation => <<EOT,
+ # If the plugins refused to create one, they lose.
+ MailError(
+ Subject => "Could not load a valid user",
+ Explanation => <<EOT,
RT could not load a valid user, and RT's configuration does not allow
for the creation of a new user for your email.
+Your RT administrator needs to grant 'Everyone' the right 'CreateTicket'
+for this queue.
+
EOT
- MIMEObj => $args{'Message'},
- LogLevel => 'error'
- );
+ MIMEObj => $Message,
+ LogLevel => 'error' )
+ unless $AuthStat == -1;
+ return ( 0, "Could not load a valid user", undef );
}
-}
-
-=head2 _HandleMachineGeneratedMail
-
-Takes named params:
- Message
- ErrorsTo
- Subject
-
-Checks the message to see if it's a bounce, if it looks like a loop, if it's autogenerated, etc.
-Returns a triple of ("Should we continue (boolean)", "New value for $ErrorsTo", "Status message",
-"This message appears to be a loop (boolean)" );
-
-=cut
-sub _HandleMachineGeneratedMail {
- my %args = ( Message => undef, ErrorsTo => undef, Subject => undef, MessageId => undef, @_ );
- my $head = $args{'Message'}->head;
- my $ErrorsTo = $args{'ErrorsTo'};
-
- my $IsBounce = CheckForBounce($head);
+ # }}}
+ # {{{ Lets check for mail loops of various sorts.
my $IsAutoGenerated = CheckForAutoGenerated($head);
my $IsSuspiciousSender = CheckForSuspiciousSender($head);
@@ -1726,89 +496,153 @@ 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 ) {
+ if ( $IsSuspiciousSender || $IsAutoGenerated || $IsALoop ) {
$SquelchReplies = 1;
- $ErrorsTo = $owner_mail;
+ $ErrorsTo = $RT::OwnerEmail;
}
+ # }}}
+
+ # {{{ Drop it if it's disallowed
+ if ( $AuthStat == 0 ) {
+ MailError(
+ To => $ErrorsTo,
+ Subject => "Permission Denied",
+ Explanation => "You do not have permission to communicate with RT",
+ MIMEObj => $Message );
+ }
+
+ # }}}
+ # {{{ Warn someone if it's a loop
+
# Warn someone if it's a loop, before we drop it on the ground
if ($IsALoop) {
- $RT::Logger->crit("RT Received mail (".$args{MessageId}.") from itself.");
+ $RT::Logger->crit("RT Recieved mail ($MessageId) from itself.");
#Should we mail it to RTOwner?
- if ( RT->Config->Get('LoopsToRTOwner') ) {
- MailError(
- To => $owner_mail,
- Subject => "RT Bounce: ".$args{'Subject'},
- Explanation => "RT thinks this message may be a bounce",
- MIMEObj => $args{Message}
- );
- }
+ if ($RT::LoopsToRTOwner) {
+ MailError( To => $RT::OwnerEmail,
+ Subject => "RT Bounce: $Subject",
+ Explanation => "RT thinks this message may be a bounce",
+ MIMEObj => $Message );
- #Do we actually want to store it?
- return ( 0, $ErrorsTo, "Message Bounced", $IsALoop )
- unless RT->Config->Get('StoreLoops');
+ #Do we actually want to store it?
+ return ( 0, "Message Bounced", undef ) unless ($RT::StoreLoops);
+ }
}
- # Squelch replies if necessary
+ # }}}
+
+ # {{{ Squelch replies if necessary
# Don't let the user stuff the RT-Squelch-Replies-To header.
if ( $head->get('RT-Squelch-Replies-To') ) {
- $head->add(
- 'RT-Relocated-Squelch-Replies-To',
- $head->get('RT-Squelch-Replies-To')
- );
+ $head->add( 'RT-Relocated-Squelch-Replies-To',
+ $head->get('RT-Squelch-Replies-To') );
$head->delete('RT-Squelch-Replies-To');
}
if ($SquelchReplies) {
+ ## TODO: This is a hack. It should be some other way to
+ ## indicate that the transaction should be "silent".
- # Squelch replies to the sender, and also leave a clue to
- # allow us to squelch ALL outbound messages. This way we
- # can punt the logic of "what to do when we get a bounce"
- # to the scrip. We might want to notify nobody. Or just
- # the RT Owner. Or maybe all Privileged watchers.
my ( $Sender, $junk ) = ParseSenderAddressFromHead($head);
- $head->add( 'RT-Squelch-Replies-To', $Sender );
- $head->add( 'RT-DetectedAutoGenerated', 'true' );
+ $head->add( 'RT-Squelch-Replies-To', $Sender );
}
- return ( 1, $ErrorsTo, "Handled machine detection", $IsALoop );
-}
-=head2 IsCorrectAction
+ # }}}
-Returns a list of valid actions we've found for this message
+ my $Ticket = RT::Ticket->new($CurrentUser);
-=cut
+ # {{{ If we don't have a ticket Id, we're creating a new ticket
+ if ( !$args{'ticket'} ) {
+
+ # {{{ Create a new ticket
-sub IsCorrectAction {
- my $action = shift;
- my @actions = grep $_, split /-/, $action;
- return ( 0, '(no value)' ) unless @actions;
- foreach ( @actions ) {
- return ( 0, $_ ) unless /^(?:comment|correspond|take|resolve)$/;
+ my @Cc;
+ my @Requestors = ( $CurrentUser->id );
+
+ if ($RT::ParseNewMessageForTicketCcs) {
+ @Cc = ParseCcAddressesFromHead( Head => $head,
+ CurrentUser => $CurrentUser,
+ QueueObj => $SystemQueueObj );
+ }
+
+ my ( $id, $Transaction, $ErrStr ) = $Ticket->Create(
+ Queue => $SystemQueueObj->Id,
+ Subject => $Subject,
+ Requestor => \@Requestors,
+ Cc => \@Cc,
+ MIMEObj => $Message );
+ if ( $id == 0 ) {
+ MailError( To => $ErrorsTo,
+ Subject => "Ticket creation failed",
+ Explanation => $ErrStr,
+ MIMEObj => $Message );
+ $RT::Logger->error("Create failed: $id / $Transaction / $ErrStr ");
+ return ( 0, "Ticket creation failed", $Ticket );
+ }
+
+ # }}}
}
- return ( 1, @actions );
-}
-sub _RecordSendEmailFailure {
- my $ticket = shift;
- if ($ticket) {
- $ticket->_RecordNote(
- NoteType => 'SystemError',
- Content => "Sending the previous mail has failed. Please contact your admin, they can find more details in the logs.",
- );
- return 1;
+ # }}}
+
+ # If the action is comment, add a comment.
+ elsif ( $args{'action'} =~ /^(comment|correspond)$/i ) {
+ $Ticket->Load($args{'ticket'});
+ unless ( $Ticket->Id ) {
+ my $message = "Could not find a ticket with id ".$args{'ticket'};
+ MailError( To => $ErrorsTo,
+ Subject => "Message not recorded",
+ Explanation => $message,
+ MIMEObj => $Message );
+
+ return ( 0, $message);
+ }
+
+ my ( $status, $msg );
+ if ( $args{'action'} =~ /^correspond$/ ) {
+ ( $status, $msg ) = $Ticket->Correspond( MIMEObj => $Message );
+ }
+ else {
+ ( $status, $msg ) = $Ticket->Comment( MIMEObj => $Message );
+ }
+ unless ($status) {
+
+ #Warn the sender that we couldn't actually submit the comment.
+ MailError( To => $ErrorsTo,
+ Subject => "Message not recorded",
+ Explanation => $msg,
+ MIMEObj => $Message );
+ return ( 0, "Message not recorded", $Ticket );
+ }
}
+
else {
- $RT::Logger->error( "Can't record send email failure as ticket is missing" );
- return;
+
+ #Return mail to the sender with an error
+ MailError( To => $ErrorsTo,
+ Subject => "RT Configuration error",
+ Explanation => "'"
+ . $args{'action'}
+ . "' not a recognized action."
+ . " Your RT administrator has misconfigured "
+ . "the mail aliases which invoke RT",
+ MIMEObj => $Message );
+ $RT::Logger->crit( $args{'action'} . " type unknown for $MessageId" );
+ return ( 0, "Configuration error: " . $args{'action'} . " not a recognized action", $Ticket );
+
}
+
+
+return ( 1, "Success", $Ticket );
}
-RT::Base->_ImportOverlays();
+eval "require RT::Interface::Email_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email_Vendor.pm});
+eval "require RT::Interface::Email_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email_Local.pm});
1;
diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm
index f56abb362..8dcacb14f 100644
--- a/rt/lib/RT/Interface/Web.pm
+++ b/rt/lib/RT/Interface/Web.pm
@@ -195,8 +195,6 @@ sub HandleRequest {
# Process session-related callbacks before any auth attempts
$HTML::Mason::Commands::m->callback( %$ARGS, CallbackName => 'Session', CallbackPage => '/autohandler' );
- MaybeRejectPrivateComponentRequest();
-
MaybeShowNoAuthPage($ARGS);
AttemptExternalAuth($ARGS) if RT->Config->Get('WebExternalAuthContinuous') or not _UserLoggedIn();
@@ -414,37 +412,6 @@ sub MaybeShowNoAuthPage {
$m->abort;
}
-=head2 MaybeRejectPrivateComponentRequest
-
-This function will reject calls to private components, like those under
-C</Elements>. If the requested path is a private component then we will
-abort with a C<403> error.
-
-=cut
-
-sub MaybeRejectPrivateComponentRequest {
- my $m = $HTML::Mason::Commands::m;
- my $path = $m->request_comp->path;
-
- # We do not check for dhandler here, because requesting our dhandlers
- # directly is okay. Mason will invoke the dhandler with a dhandler_arg of
- # 'dhandler'.
-
- if ($path =~ m{
- / # leading slash
- ( Elements |
- _elements | # mobile UI
- Widgets |
- autohandler | # requesting this directly is suspicious
- l ) # loc component
- ( $ | / ) # trailing slash or end of path
- }xi) {
- $m->abort(403);
- }
-
- return;
-}
-
=head2 ShowRequestedPage \%ARGS
This function, called exclusively by RT's autohandler, dispatches
@@ -829,15 +796,8 @@ sub SendStaticFile {
}
$type ||= "application/octet-stream";
}
-
- # CGI.pm version 3.51 and 3.52 bang charset=iso-8859-1 onto our JS
- # since we don't specify a charset
- if ( $type =~ m{application/javascript} &&
- $type !~ m{charset=([\w-]+)$} ) {
- $type .= "; charset=utf-8";
- }
$HTML::Mason::Commands::r->content_type($type);
- open( my $fh, '<', $file ) or die "couldn't open file: $!";
+ open my $fh, "<$file" or die "couldn't open file: $!";
binmode($fh);
{
local $/ = \16384;
@@ -881,13 +841,8 @@ sub StripContent {
# Check for plaintext sig
return '' if not $html and $content =~ /^(--)?\Q$sig\E$/;
- # Check for html-formatted sig; we don't use EscapeUTF8 here
- # because we want to precisely match the escaping that FCKEditor
- # uses. see also 311223f5, which fixed this for 4.0
- $sig =~ s/&/&amp;/g;
- $sig =~ s/</&lt;/g;
- $sig =~ s/>/&gt;/g;
-
+ # Check for html-formatted sig
+ RT::Interface::Web::EscapeUTF8( \$sig );
return ''
if $html
and $content =~ m{^(?:<p>)?(--)?\Q$sig\E(?:</p>)?$}s;
@@ -1379,13 +1334,22 @@ sub ProcessUpdateMessage {
my $bcc = $args{ARGSRef}->{'UpdateBcc'};
my $cc = $args{ARGSRef}->{'UpdateCc'};
+ my %txn_customfields;
+
+ foreach my $key ( keys %{ $args{ARGSRef} } ) {
+ if ( $key =~ /^(?:Object-RT::Transaction--)?CustomField-(\d+)/ ) {
+ $txn_customfields{$key} = $args{ARGSRef}->{$key};
+ }
+ }
+
my %message_args = (
CcMessageTo => $cc,
BccMessageTo => $bcc,
Sign => $args{ARGSRef}->{'Sign'},
Encrypt => $args{ARGSRef}->{'Encrypt'},
MIMEObj => $Message,
- TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'}
+ TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'},
+ CustomFields => \%txn_customfields,
);
my @temp_squelch;
@@ -1421,14 +1385,17 @@ sub ProcessUpdateMessage {
}
my @results;
+ # Do the update via the appropriate Ticket method
if ( $args{ARGSRef}->{'UpdateType'} =~ /^(private|public)$/ ) {
- my ( $Transaction, $Description, $Object ) = $args{TicketObj}->Comment(%message_args);
+ my ( $Transaction, $Description, $Object ) =
+ $args{TicketObj}->Comment(%message_args);
push( @results, $Description );
- $Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object;
+ #$Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object;
} elsif ( $args{ARGSRef}->{'UpdateType'} eq 'response' ) {
- my ( $Transaction, $Description, $Object ) = $args{TicketObj}->Correspond(%message_args);
+ my ( $Transaction, $Description, $Object ) =
+ $args{TicketObj}->Correspond(%message_args);
push( @results, $Description );
- $Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object;
+ #$Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object;
} else {
push( @results,
loc("Update type was neither correspondence nor comment.") . " " . loc("Update not recorded.") );
@@ -1547,8 +1514,6 @@ sub ParseDateToISO {
sub ProcessACLChanges {
my $ARGSref = shift;
- #XXX: why don't we get ARGSref like in other Process* subs?
-
my @results;
foreach my $arg ( keys %$ARGSref ) {
@@ -1763,6 +1728,8 @@ sub ProcessTicketCustomFieldUpdates {
$ARGSRef->{"Object-RT::Ticket-$1"} = delete $ARGSRef->{$arg};
} elsif ( $arg =~ /^CustomField-(\d+-.*)/ ) {
$ARGSRef->{"Object-RT::Ticket--$1"} = delete $ARGSRef->{$arg};
+ } elsif ( $arg =~ /^Object-RT::Transaction-(\d*)-CustomField/ ) {
+ delete $ARGSRef->{$arg}; # don't try to update transaction fields
}
}
@@ -1838,6 +1805,9 @@ sub _ProcessObjectCustomFieldUpdates {
# skip category argument
next if $arg eq 'Category';
+ # and TimeUnits
+ next if $arg eq 'Value-TimeUnits';
+
# since http won't pass in a form element with a null value, we need
# to fake it
if ( $arg eq 'Values-Magic' ) {
@@ -1916,6 +1886,9 @@ sub _ProcessObjectCustomFieldUpdates {
$values_hash{$val} = 1 if $val;
}
+ # For Date Cfs, @values is empty when there is no changes (no datas in form input)
+ return @results if ( $cf->Type eq 'Date' && ! @values );
+
$cf_values->RedoSearch;
while ( my $cf_value = $cf_values->Next ) {
next if $values_hash{ $cf_value->id };
@@ -2299,6 +2272,9 @@ sub _parse_saved_search {
return ( _load_container_object( $obj_type, $obj_id ), $search_id );
}
-RT::Base->_ImportOverlays();
+eval "require RT::Interface::Web_Vendor";
+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} );
1;
diff --git a/rt/lib/RT/Interface/Web_Vendor.pm b/rt/lib/RT/Interface/Web_Vendor.pm
new file mode 100644
index 000000000..1999096a7
--- /dev/null
+++ b/rt/lib/RT/Interface/Web_Vendor.pm
@@ -0,0 +1,201 @@
+# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+# Copyright (c) 2008 Freeside Internet Services, Inc.
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+=head1 NAME
+
+RT::Interface::Web_Vendor
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+Freeside vendor overlay for RT::Interface::Web.
+
+=begin testing
+
+use_ok(RT::Interface::Web_Vendor);
+
+=end testing
+
+=cut
+
+#package RT::Interface::Web;
+#use strict;
+
+package HTML::Mason::Commands;
+use strict;
+
+=head2 ProcessTicketCustomers
+
+=cut
+
+sub ProcessTicketCustomers {
+ my %args = (
+ TicketObj => undef,
+ ARGSRef => undef,
+ Debug => 0,
+ @_
+ );
+ my @results = ();
+
+ my $Ticket = $args{'TicketObj'};
+ my $ARGSRef = $args{'ARGSRef'};
+ my $Debug = $args{'Debug'};
+ my $me = 'ProcessTicketCustomers';
+
+ ### false laziness w/RT::Interface::Web::ProcessTicketLinks
+ # Delete links that are gone gone gone.
+ foreach my $arg ( keys %$ARGSRef ) {
+ if ( $arg =~ /DeleteLink-(.*?)-(DependsOn|MemberOf|RefersTo)-(.*)$/ ) {
+ my $base = $1;
+ my $type = $2;
+ my $target = $3;
+
+ push @results,
+ "Trying to delete: Base: $base Target: $target Type $type";
+ my ( $val, $msg ) = $Ticket->DeleteLink( Base => $base,
+ Type => $type,
+ Target => $target );
+
+ push @results, $msg;
+
+ }
+
+ }
+ ###
+
+ ###
+ #find new customers
+ ###
+
+ my @custnums = map { /^Ticket-AddCustomer-(\d+)$/; $1 }
+ grep { /^Ticket-AddCustomer-(\d+)$/ && $ARGSRef->{$_} }
+ keys %$ARGSRef;
+
+ #my @delete_custnums =
+ # map { /^Ticket-AddCustomer-(\d+)$/; $1 }
+ # grep { /^Ticket-AddCustomer-(\d+)$/ && $ARGSRef->{$_} }
+ # keys %$ARGSRef;
+
+ ###
+ #figure out if we're going to auto-link requestors, and find them if so
+ ###
+
+ my $num_cur_cust = $Ticket->Customers->Count;
+ my $num_new_cust = scalar(@custnums);
+ warn "$me: $num_cur_cust current customers / $num_new_cust new customers\n"
+ if $Debug;
+
+ #if we're linking the first ticket to one customer
+ my $link_requestors = ( $num_cur_cust == 0 && $num_new_cust == 1 );
+ warn "$me: adding a single customer to a previously customerless".
+ " ticket, so linking customers to requestor too\n"
+ if $Debug && $link_requestors;
+
+ my @Requestors = ();
+ if ( $link_requestors ) {
+
+ #find any requestors without customers
+ @Requestors =
+ grep { ! $_->Customers->Count }
+ @{ $Ticket->Requestors->UserMembersObj->ItemsArrayRef };
+
+ warn "$me: found ". scalar(@Requestors). " requestors without".
+ " customers; linking them\n"
+ if $Debug;
+
+ }
+
+ ###
+ #link ticket (and requestors) to customers
+ ###
+
+ foreach my $custnum ( @custnums ) {
+
+ my @link = ( 'Type' => 'MemberOf',
+ 'Target' => "freeside://freeside/cust_main/$custnum",
+ );
+
+ my( $val, $msg ) = $Ticket->AddLink(@link);
+ push @results, $msg;
+
+ #add customer links to requestors
+ foreach my $Requestor ( @Requestors ) {
+ my( $val, $msg ) = $Requestor->AddLink(@link);
+ push @results, $msg;
+ warn "$me: linking requestor to custnum $custnum: $msg\n"
+ if $Debug > 1;
+ }
+
+ }
+
+ return @results;
+
+}
+
+#false laziness w/above... eventually it should go away in favor of this
+sub ProcessObjectCustomers {
+ my %args = (
+ Object => undef,
+ ARGSRef => undef,
+ @_
+ );
+ my @results = ();
+
+ my $Object = $args{'Object'};
+ my $ARGSRef = $args{'ARGSRef'};
+
+ ### false laziness w/RT::Interface::Web::ProcessTicketLinks
+ # Delete links that are gone gone gone.
+ foreach my $arg ( keys %$ARGSRef ) {
+ if ( $arg =~ /DeleteLink-(.*?)-(DependsOn|MemberOf|RefersTo)-(.*)$/ ) {
+ my $base = $1;
+ my $type = $2;
+ my $target = $3;
+
+ push @results,
+ "Trying to delete: Base: $base Target: $target Type $type";
+ my ( $val, $msg ) = $Object->DeleteLink( Base => $base,
+ Type => $type,
+ Target => $target );
+
+ push @results, $msg;
+
+ }
+
+ }
+ ###
+
+ #my @delete_custnums =
+ # map { /^Object-AddCustomer-(\d+)$/; $1 }
+ # grep { /^Object-AddCustomer-(\d+)$/ && $ARGSRef->{$_} }
+ # keys %$ARGSRef;
+
+ my @custnums = map { /^Object-AddCustomer-(\d+)$/; $1 }
+ grep { /^Object-AddCustomer-(\d+)$/ && $ARGSRef->{$_} }
+ keys %$ARGSRef;
+
+ foreach my $custnum ( @custnums ) {
+ my( $val, $msg ) =
+ $Object->AddLink( 'Type' => 'MemberOf',
+ 'Target' => "freeside://freeside/cust_main/$custnum",
+ );
+ push @results, $msg;
+ }
+
+ return @results;
+
+}
+
+1;
+
diff --git a/rt/lib/RT/Link.pm b/rt/lib/RT/Link.pm
index 1aff5ef64..962c378a8 100644
--- a/rt/lib/RT/Link.pm
+++ b/rt/lib/RT/Link.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -123,7 +98,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -132,14 +107,14 @@ Returns the current value of id.
=cut
-=head2 Base
+=item Base
Returns the current value of Base.
(In the database, Base is stored as varchar(240).)
-=head2 SetBase VALUE
+=item SetBase VALUE
Set Base to VALUE.
@@ -150,14 +125,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Target
+=item Target
Returns the current value of Target.
(In the database, Target is stored as varchar(240).)
-=head2 SetTarget VALUE
+=item SetTarget VALUE
Set Target to VALUE.
@@ -168,14 +143,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Type
+=item Type
Returns the current value of Type.
(In the database, Type is stored as varchar(20).)
-=head2 SetType VALUE
+=item SetType VALUE
Set Type to VALUE.
@@ -186,14 +161,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 LocalTarget
+=item LocalTarget
Returns the current value of LocalTarget.
(In the database, LocalTarget is stored as int(11).)
-=head2 SetLocalTarget VALUE
+=item SetLocalTarget VALUE
Set LocalTarget to VALUE.
@@ -204,14 +179,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 LocalBase
+=item LocalBase
Returns the current value of LocalBase.
(In the database, LocalBase is stored as int(11).)
-=head2 SetLocalBase VALUE
+=item SetLocalBase VALUE
Set LocalBase to VALUE.
@@ -222,7 +197,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -231,7 +206,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -240,7 +215,7 @@ Returns the current value of LastUpdated.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -249,7 +224,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -259,34 +234,51 @@ Returns the current value of Created.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Base =>
- {read => 1, write => 1, sql_type => 12, length => 240, is_blob => 0, is_numeric => 0, type => 'varchar(240)', default => ''},
+ {read => 1, write => 1, type => 'varchar(240)', default => ''},
Target =>
- {read => 1, write => 1, sql_type => 12, length => 240, is_blob => 0, is_numeric => 0, type => 'varchar(240)', default => ''},
+ {read => 1, write => 1, type => 'varchar(240)', default => ''},
Type =>
- {read => 1, write => 1, sql_type => 12, length => 20, is_blob => 0, is_numeric => 0, type => 'varchar(20)', default => ''},
+ {read => 1, write => 1, type => 'varchar(20)', default => ''},
LocalTarget =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
LocalBase =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
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, 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, 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Link_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Link_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Link_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Link_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Link_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Link_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -296,7 +288,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Links.pm b/rt/lib/RT/Links.pm
index d8b602587..7a1773af9 100644
--- a/rt/lib/RT/Links.pm
+++ b/rt/lib/RT/Links.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Link item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Link->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Links_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Links_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Links_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Links_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Links_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Links_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Principal_Overlay.pm b/rt/lib/RT/Principal_Overlay.pm
index 88e721ee3..f46525269 100644
--- a/rt/lib/RT/Principal_Overlay.pm
+++ b/rt/lib/RT/Principal_Overlay.pm
@@ -163,6 +163,8 @@ sub GrantRight {
my $type = $self->_GetPrincipalTypeForACL();
+ RT->System->QueueCacheNeedsUpdate(1) if $args{'Right'} eq 'SeeQueue';
+
# If it's a user, we really want to grant the right to their
# user equivalence group
return $ace->Create(
@@ -210,15 +212,17 @@ sub RevokeRight {
PrincipalType => $type,
PrincipalId => $self->Id
);
+
+ RT->System->QueueCacheNeedsUpdate(1) if $args{'Right'} eq 'SeeQueue';
return ($status, $msg) unless $status;
return $ace->Delete;
}
# }}}
-# {{{ sub CleanupInvalidDelegations
+# {{{ sub _CleanupInvalidDelegations
-=head2 sub CleanupInvalidDelegations { InsideTransaction => undef }
+=head2 sub _CleanupInvalidDelegations { InsideTransaction => undef }
Revokes all ACE entries delegated by this principal which are
inconsistent with this principal's current delegation rights. Does
@@ -240,19 +244,15 @@ and logs an internal error if the deletion fails (should not happen).
# This is currently just a stub for the methods of the same name in
# RT::User and RT::Group.
-# backcompat for 3.8.8 and before
-*_CleanupInvalidDelegations = \&CleanupInvalidDelegations;
-
-sub CleanupInvalidDelegations {
+sub _CleanupInvalidDelegations {
my $self = shift;
unless ( $self->Id ) {
$RT::Logger->warning("Principal not loaded.");
return (undef);
}
- return ($self->Object->CleanupInvalidDelegations(@_));
+ return ($self->Object->_CleanupInvalidDelegations(@_));
}
-
# }}}
# {{{ sub HasRight
diff --git a/rt/lib/RT/Queue.pm b/rt/lib/RT/Queue.pm
index c0a0229cd..b362c9f0d 100755
--- a/rt/lib/RT/Queue.pm
+++ b/rt/lib/RT/Queue.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -132,7 +107,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -141,14 +116,14 @@ Returns the current value of id.
=cut
-=head2 Name
+=item Name
Returns the current value of Name.
(In the database, Name is stored as varchar(200).)
-=head2 SetName VALUE
+=item SetName VALUE
Set Name to VALUE.
@@ -159,14 +134,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Description
+=item Description
Returns the current value of Description.
(In the database, Description is stored as varchar(255).)
-=head2 SetDescription VALUE
+=item SetDescription VALUE
Set Description to VALUE.
@@ -177,14 +152,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 CorrespondAddress
+=item CorrespondAddress
Returns the current value of CorrespondAddress.
(In the database, CorrespondAddress is stored as varchar(120).)
-=head2 SetCorrespondAddress VALUE
+=item SetCorrespondAddress VALUE
Set CorrespondAddress to VALUE.
@@ -195,14 +170,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 CommentAddress
+=item CommentAddress
Returns the current value of CommentAddress.
(In the database, CommentAddress is stored as varchar(120).)
-=head2 SetCommentAddress VALUE
+=item SetCommentAddress VALUE
Set CommentAddress to VALUE.
@@ -213,14 +188,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 InitialPriority
+=item InitialPriority
Returns the current value of InitialPriority.
(In the database, InitialPriority is stored as int(11).)
-=head2 SetInitialPriority VALUE
+=item SetInitialPriority VALUE
Set InitialPriority to VALUE.
@@ -231,14 +206,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 FinalPriority
+=item FinalPriority
Returns the current value of FinalPriority.
(In the database, FinalPriority is stored as int(11).)
-=head2 SetFinalPriority VALUE
+=item SetFinalPriority VALUE
Set FinalPriority to VALUE.
@@ -249,14 +224,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 DefaultDueIn
+=item DefaultDueIn
Returns the current value of DefaultDueIn.
(In the database, DefaultDueIn is stored as int(11).)
-=head2 SetDefaultDueIn VALUE
+=item SetDefaultDueIn VALUE
Set DefaultDueIn to VALUE.
@@ -267,7 +242,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -276,7 +251,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -285,7 +260,7 @@ Returns the current value of Created.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -294,7 +269,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -303,14 +278,14 @@ Returns the current value of LastUpdated.
=cut
-=head2 Disabled
+=item Disabled
Returns the current value of Disabled.
(In the database, Disabled is stored as smallint(6).)
-=head2 SetDisabled VALUE
+=item SetDisabled VALUE
Set Disabled to VALUE.
@@ -322,40 +297,57 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Name =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Description =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
CorrespondAddress =>
- {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''},
+ {read => 1, write => 1, type => 'varchar(120)', default => ''},
CommentAddress =>
- {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''},
+ {read => 1, write => 1, type => 'varchar(120)', default => ''},
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, 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, type => 'int(11)', default => '0'},
DefaultDueIn =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
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, 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, 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, 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, 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, type => 'smallint(6)', default => '0'},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Queue_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Queue_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Queue_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Queue_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Queue_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Queue_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -365,7 +357,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Queue_Local.pm b/rt/lib/RT/Queue_Local.pm
new file mode 100644
index 000000000..6ebe2190a
--- /dev/null
+++ b/rt/lib/RT/Queue_Local.pm
@@ -0,0 +1,72 @@
+package RT::Queue;
+
+use strict;
+use warnings;
+
+# Adjust various saved settings that might have the old queue name in them.
+# $changes{'AttributeName'} = sub (attribute, old queue name, new queue name)
+# where the sub changes any reference to the old name to the new name
+# returning a positive value on success,
+# or (0, error string) if it fails somehow
+# or -1 if the old name isn't found
+
+my %changes = (
+ 'SavedSearch' => sub {
+ my ($attr, $old, $new) = @_;
+ # Deal with queue names containing single quotes.
+ $old =~ s/'/\\'/g;
+ $new =~ s/'/\\'/g;
+ my $string = $attr->SubValue('Query');
+ # Deal with queue names containing regex metacharacters.
+ if ( $string =~ s/Queue\W+\K'\Q$old\E'/'$new'/ ) {
+ return $attr->SetSubValues(Query => $string);
+ }
+ -1;
+ },
+ 'Pref-QuickSearch' => sub {
+ my ($attr, $old, $new) = @_;
+ my $x = $attr->SubValue($old);
+ return -1 if !defined($x);
+ my @err = $attr->DeleteSubValue($old);
+ return @err if !$err[0];
+ return $attr->SetSubValues($new => $x);
+ },
+);
+
+sub SetName {
+ my $self = shift;
+ my $new = shift;
+
+ # We may potentially change anything at all.
+ unless ( $self->CurrentUser->HasRight(
+ Right => 'SuperUser', Object => 'RT::System' )
+ ) {
+ return ( 0, $self->loc("SuperUser access required to rename queues") );
+ }
+
+ $RT::Handle->BeginTransaction();
+ my $old = $self->Name;
+ my ($err, $msg) = $self->SUPER::SetName($new);
+ unless ($err) {
+ $RT::Handle->Rollback;
+ return (0, "Unable to rename queue to '$new': $msg");
+ }
+ foreach my $attrname (keys %changes) {
+ my $Attributes = RT::Attributes->new($self->CurrentUser);
+ $Attributes->UnLimit;
+ foreach my $attr ( $Attributes->Named($attrname) ) {
+ ($err, $msg) = &{ $changes{$attrname} }($attr, $old, $new);
+ unless ($err) {
+ $RT::Handle->Rollback;
+ return (0, "Unable to change attribute $attrname - ".
+ $attr->Description. ": $msg");
+ }
+ }
+ }
+ RT->System->QueueCacheNeedsUpdate(1);
+ $RT::Handle->Commit;
+ return 1, "Name changed from '$old' to '$new'";
+}
+
+
+1;
diff --git a/rt/lib/RT/Queue_Overlay.pm b/rt/lib/RT/Queue_Overlay.pm
index c7ab7f354..5245af43f 100644
--- a/rt/lib/RT/Queue_Overlay.pm
+++ b/rt/lib/RT/Queue_Overlay.pm
@@ -381,6 +381,8 @@ sub Create {
unless $status;
}
+ RT->System->QueueCacheNeedsUpdate(1);
+
return ( $id, $self->loc("Queue created") );
}
@@ -421,6 +423,8 @@ sub SetDisabled {
$RT::Handle->Commit();
+ RT->System->QueueCacheNeedsUpdate(1);
+
if ( $val == 1 ) {
return (1, $self->loc("Queue disabled"));
} else {
diff --git a/rt/lib/RT/Queues.pm b/rt/lib/RT/Queues.pm
index e634a967c..60aec9086 100755
--- a/rt/lib/RT/Queues.pm
+++ b/rt/lib/RT/Queues.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Queue item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Queue->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Queues_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Queues_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Queues_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Queues_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Queues_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Queues_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Record.pm b/rt/lib/RT/Record.pm
index 3c8575390..ce46a90a6 100755
--- a/rt/lib/RT/Record.pm
+++ b/rt/lib/RT/Record.pm
@@ -67,6 +67,7 @@ use strict;
use warnings;
use RT::Date;
+use RT::I18N;
use RT::User;
use RT::Attributes;
use Encode qw();
@@ -803,6 +804,7 @@ sub _DecodeLOB {
elsif ( $ContentEncoding && $ContentEncoding ne 'none' ) {
return ( $self->loc( "Unknown ContentEncoding [_1]", $ContentEncoding ) );
}
+
if ( RT::I18N::IsTextualContentType($ContentType) ) {
$Content = Encode::decode_utf8($Content) unless Encode::is_utf8($Content);
}
@@ -1171,8 +1173,37 @@ sub DependsOn {
# }}}
+# {{{ Customers
+
+=head2 Customers
+
+ This returns an RT::Links object which references all the customers that this object is a member of.
+
+=cut
+
+sub Customers {
+ my( $self, %opt ) = @_;
+ my $Debug = $opt{'Debug'};
+
+ unless ( $self->{'Customers'} ) {
+
+ $self->{'Customers'} = $self->MemberOf->Clone;
+
+ $self->{'Customers'}->Limit(
+ FIELD => 'Target',
+ OPERATOR => 'STARTSWITH',
+ VALUE => 'freeside://freeside/cust_main/',
+ );
+ }
+
+ warn "->Customers method called on $self; returning ".
+ ref($self->{'Customers'}). ' object'
+ if $Debug;
+ return $self->{'Customers'};
+}
+# }}}
# {{{ sub _Links
@@ -1436,6 +1467,7 @@ sub _NewTransaction {
MIMEObj => undef,
ActivateScrips => 1,
CommitScrips => 1,
+ CustomFields => {},
@_
);
@@ -1469,6 +1501,7 @@ sub _NewTransaction {
MIMEObj => $args{'MIMEObj'},
ActivateScrips => $args{'ActivateScrips'},
CommitScrips => $args{'CommitScrips'},
+ CustomFields => $args{'CustomFields'},
);
# Rationalize the object since we may have done things to it during the caching.
@@ -1713,6 +1746,25 @@ sub _AddCustomFieldValue {
}
my $new_content = $new_value->Content;
+
+ # For date, we need to display them in "human" format in result message
+ if ($cf->Type eq 'Date') {
+ my $DateObj = new RT::Date( $self->CurrentUser );
+ $DateObj->Set(
+ Format => 'ISO',
+ Value => $new_content,
+ );
+ $new_content = $DateObj->AsString;
+
+ if ( defined $old_content && length $old_content ) {
+ $DateObj->Set(
+ Format => 'ISO',
+ Value => $old_content,
+ );
+ $old_content = $DateObj->AsString;
+ }
+ }
+
unless ( defined $old_content && length $old_content ) {
return ( $new_value_id, $self->loc( "[_1] [_2] added", $cf->Name, $new_content ));
}
@@ -1801,11 +1853,21 @@ sub DeleteCustomFieldValue {
return ( 0, $self->loc( "Couldn't create a transaction: [_1]", $Msg ) );
}
+ my $old_value = $TransactionObj->OldValue;
+ # For date, we need to display them in "human" format in result message
+ if ( $cf->Type eq 'Date' ) {
+ my $DateObj = new RT::Date( $self->CurrentUser );
+ $DateObj->Set(
+ Format => 'ISO',
+ Value => $old_value,
+ );
+ $old_value = $DateObj->AsString;
+ }
return (
$TransactionId,
$self->loc(
"[_1] is no longer a value for custom field [_2]",
- $TransactionObj->OldValue, $cf->Name
+ $old_value, $cf->Name
)
);
}
@@ -1926,6 +1988,9 @@ sub WikiBase {
return RT->Config->Get('WebPath'). "/index.html?q=";
}
-RT::Base->_ImportOverlays();
+eval "require RT::Record_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Record_Vendor.pm});
+eval "require RT::Record_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Record_Local.pm});
1;
diff --git a/rt/lib/RT/SavedSearches_Local.pm b/rt/lib/RT/SavedSearches_Local.pm
new file mode 100644
index 000000000..7159bc912
--- /dev/null
+++ b/rt/lib/RT/SavedSearches_Local.pm
@@ -0,0 +1,19 @@
+# backport from RT4 RT::SharedSettings
+
+package RT::SavedSearches;
+
+use strict;
+no warnings 'redefine';
+
+sub CountAll {
+ my $self = shift;
+ return $self->Count;
+}
+
+sub GotoPage {
+ my $self = shift;
+ $self->{idx} = shift;
+}
+
+1;
+
diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm
index b430a77e9..a69dde04e 100755
--- a/rt/lib/RT/Scrip.pm
+++ b/rt/lib/RT/Scrip.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -90,7 +65,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -145,7 +120,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -154,14 +129,14 @@ Returns the current value of id.
=cut
-=head2 Description
+=item Description
Returns the current value of Description.
(In the database, Description is stored as varchar(255).)
-=head2 SetDescription VALUE
+=item SetDescription VALUE
Set Description to VALUE.
@@ -172,14 +147,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ScripCondition
+=item ScripCondition
Returns the current value of ScripCondition.
(In the database, ScripCondition is stored as int(11).)
-=head2 SetScripCondition VALUE
+=item SetScripCondition VALUE
Set ScripCondition to VALUE.
@@ -190,7 +165,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ScripConditionObj
+=item ScripConditionObj
Returns the ScripCondition Object which has the id returned by ScripCondition
@@ -204,14 +179,14 @@ sub ScripConditionObj {
return($ScripCondition);
}
-=head2 ScripAction
+=item ScripAction
Returns the current value of ScripAction.
(In the database, ScripAction is stored as int(11).)
-=head2 SetScripAction VALUE
+=item SetScripAction VALUE
Set ScripAction to VALUE.
@@ -222,7 +197,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ScripActionObj
+=item ScripActionObj
Returns the ScripAction Object which has the id returned by ScripAction
@@ -236,14 +211,14 @@ sub ScripActionObj {
return($ScripAction);
}
-=head2 ConditionRules
+=item ConditionRules
Returns the current value of ConditionRules.
(In the database, ConditionRules is stored as text.)
-=head2 SetConditionRules VALUE
+=item SetConditionRules VALUE
Set ConditionRules to VALUE.
@@ -254,14 +229,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ActionRules
+=item ActionRules
Returns the current value of ActionRules.
(In the database, ActionRules is stored as text.)
-=head2 SetActionRules VALUE
+=item SetActionRules VALUE
Set ActionRules to VALUE.
@@ -272,14 +247,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 CustomIsApplicableCode
+=item CustomIsApplicableCode
Returns the current value of CustomIsApplicableCode.
(In the database, CustomIsApplicableCode is stored as text.)
-=head2 SetCustomIsApplicableCode VALUE
+=item SetCustomIsApplicableCode VALUE
Set CustomIsApplicableCode to VALUE.
@@ -290,14 +265,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 CustomPrepareCode
+=item CustomPrepareCode
Returns the current value of CustomPrepareCode.
(In the database, CustomPrepareCode is stored as text.)
-=head2 SetCustomPrepareCode VALUE
+=item SetCustomPrepareCode VALUE
Set CustomPrepareCode to VALUE.
@@ -308,14 +283,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 CustomCommitCode
+=item CustomCommitCode
Returns the current value of CustomCommitCode.
(In the database, CustomCommitCode is stored as text.)
-=head2 SetCustomCommitCode VALUE
+=item SetCustomCommitCode VALUE
Set CustomCommitCode to VALUE.
@@ -326,14 +301,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Stage
+=item Stage
Returns the current value of Stage.
(In the database, Stage is stored as varchar(32).)
-=head2 SetStage VALUE
+=item SetStage VALUE
Set Stage to VALUE.
@@ -344,14 +319,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Queue
+=item Queue
Returns the current value of Queue.
(In the database, Queue is stored as int(11).)
-=head2 SetQueue VALUE
+=item SetQueue VALUE
Set Queue to VALUE.
@@ -362,7 +337,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 QueueObj
+=item QueueObj
Returns the Queue Object which has the id returned by Queue
@@ -376,14 +351,14 @@ sub QueueObj {
return($Queue);
}
-=head2 Template
+=item Template
Returns the current value of Template.
(In the database, Template is stored as int(11).)
-=head2 SetTemplate VALUE
+=item SetTemplate VALUE
Set Template to VALUE.
@@ -394,7 +369,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 TemplateObj
+=item TemplateObj
Returns the Template Object which has the id returned by Template
@@ -408,7 +383,7 @@ sub TemplateObj {
return($Template);
}
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -417,7 +392,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -426,7 +401,7 @@ Returns the current value of Created.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -435,7 +410,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -445,46 +420,63 @@ Returns the current value of LastUpdated.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Description =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
ScripCondition =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
ScripAction =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
ConditionRules =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''},
+ {read => 1, write => 1, type => 'text', default => ''},
ActionRules =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''},
+ {read => 1, write => 1, type => 'text', default => ''},
CustomIsApplicableCode =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''},
+ {read => 1, write => 1, type => 'text', default => ''},
CustomPrepareCode =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''},
+ {read => 1, write => 1, type => 'text', default => ''},
CustomCommitCode =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''},
+ {read => 1, write => 1, type => 'text', default => ''},
Stage =>
- {read => 1, write => 1, sql_type => 12, length => 32, is_blob => 0, is_numeric => 0, type => 'varchar(32)', default => ''},
+ {read => 1, write => 1, type => 'varchar(32)', default => ''},
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, type => 'int(11)', default => '0'},
Template =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
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, 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, 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Scrip_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Scrip_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Scrip_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -494,7 +486,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/ScripAction.pm b/rt/lib/RT/ScripAction.pm
index 21a8a0ea1..26824df5d 100755
--- a/rt/lib/RT/ScripAction.pm
+++ b/rt/lib/RT/ScripAction.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -120,7 +95,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -129,14 +104,14 @@ Returns the current value of id.
=cut
-=head2 Name
+=item Name
Returns the current value of Name.
(In the database, Name is stored as varchar(200).)
-=head2 SetName VALUE
+=item SetName VALUE
Set Name to VALUE.
@@ -147,14 +122,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Description
+=item Description
Returns the current value of Description.
(In the database, Description is stored as varchar(255).)
-=head2 SetDescription VALUE
+=item SetDescription VALUE
Set Description to VALUE.
@@ -165,14 +140,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ExecModule
+=item ExecModule
Returns the current value of ExecModule.
(In the database, ExecModule is stored as varchar(60).)
-=head2 SetExecModule VALUE
+=item SetExecModule VALUE
Set ExecModule to VALUE.
@@ -183,14 +158,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Argument
+=item Argument
Returns the current value of Argument.
(In the database, Argument is stored as varchar(255).)
-=head2 SetArgument VALUE
+=item SetArgument VALUE
Set Argument to VALUE.
@@ -201,7 +176,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -210,7 +185,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -219,7 +194,7 @@ Returns the current value of Created.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -228,7 +203,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -238,32 +213,49 @@ Returns the current value of LastUpdated.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Name =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Description =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
ExecModule =>
- {read => 1, write => 1, sql_type => 12, length => 60, is_blob => 0, is_numeric => 0, type => 'varchar(60)', default => ''},
+ {read => 1, write => 1, type => 'varchar(60)', default => ''},
Argument =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', 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, 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, 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::ScripAction_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripAction_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripAction_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripAction_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripAction_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripAction_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -273,7 +265,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/ScripActions.pm b/rt/lib/RT/ScripActions.pm
index d2f987c1b..614ff374f 100755
--- a/rt/lib/RT/ScripActions.pm
+++ b/rt/lib/RT/ScripActions.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::ScripAction item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::ScripAction->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::ScripActions_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripActions_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripActions_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripActions_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripActions_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripActions_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/ScripCondition.pm b/rt/lib/RT/ScripCondition.pm
index 48ea27a00..fe0aa2d5a 100755
--- a/rt/lib/RT/ScripCondition.pm
+++ b/rt/lib/RT/ScripCondition.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -123,7 +98,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -132,14 +107,14 @@ Returns the current value of id.
=cut
-=head2 Name
+=item Name
Returns the current value of Name.
(In the database, Name is stored as varchar(200).)
-=head2 SetName VALUE
+=item SetName VALUE
Set Name to VALUE.
@@ -150,14 +125,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Description
+=item Description
Returns the current value of Description.
(In the database, Description is stored as varchar(255).)
-=head2 SetDescription VALUE
+=item SetDescription VALUE
Set Description to VALUE.
@@ -168,14 +143,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ExecModule
+=item ExecModule
Returns the current value of ExecModule.
(In the database, ExecModule is stored as varchar(60).)
-=head2 SetExecModule VALUE
+=item SetExecModule VALUE
Set ExecModule to VALUE.
@@ -186,14 +161,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Argument
+=item Argument
Returns the current value of Argument.
(In the database, Argument is stored as varchar(255).)
-=head2 SetArgument VALUE
+=item SetArgument VALUE
Set Argument to VALUE.
@@ -204,14 +179,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ApplicableTransTypes
+=item ApplicableTransTypes
Returns the current value of ApplicableTransTypes.
(In the database, ApplicableTransTypes is stored as varchar(60).)
-=head2 SetApplicableTransTypes VALUE
+=item SetApplicableTransTypes VALUE
Set ApplicableTransTypes to VALUE.
@@ -222,7 +197,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -231,7 +206,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -240,7 +215,7 @@ Returns the current value of Created.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -249,7 +224,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -259,34 +234,51 @@ Returns the current value of LastUpdated.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Name =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Description =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
ExecModule =>
- {read => 1, write => 1, sql_type => 12, length => 60, is_blob => 0, is_numeric => 0, type => 'varchar(60)', default => ''},
+ {read => 1, write => 1, type => 'varchar(60)', default => ''},
Argument =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
ApplicableTransTypes =>
- {read => 1, write => 1, sql_type => 12, length => 60, is_blob => 0, is_numeric => 0, type => 'varchar(60)', default => ''},
+ {read => 1, write => 1, type => 'varchar(60)', 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, 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, 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::ScripCondition_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripCondition_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripCondition_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripCondition_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripCondition_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripCondition_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -296,7 +288,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/ScripConditions.pm b/rt/lib/RT/ScripConditions.pm
index 76777cbef..34f788d9c 100755
--- a/rt/lib/RT/ScripConditions.pm
+++ b/rt/lib/RT/ScripConditions.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::ScripCondition item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::ScripCondition->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::ScripConditions_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripConditions_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripConditions_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripConditions_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::ScripConditions_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/ScripConditions_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm
index 3c89f84f2..e91f8d64d 100644
--- a/rt/lib/RT/Scrip_Overlay.pm
+++ b/rt/lib/RT/Scrip_Overlay.pm
@@ -103,6 +103,8 @@ sub Create {
CustomPrepareCode => undef,
CustomCommitCode => undef,
CustomIsApplicableCode => undef,
+ ConditionRules => undef,
+ ActionRules => undef,
@_
);
@@ -162,6 +164,8 @@ sub Create {
CustomPrepareCode => $args{'CustomPrepareCode'},
CustomCommitCode => $args{'CustomCommitCode'},
CustomIsApplicableCode => $args{'CustomIsApplicableCode'},
+ ConditionRules => $args{'ConditionRules'},
+ ActionRules => $args{'ActionRules'},
);
if ( $id ) {
return ( $id, $self->loc('Scrip Created') );
diff --git a/rt/lib/RT/Scrips.pm b/rt/lib/RT/Scrips.pm
index 7e632171b..a39443136 100755
--- a/rt/lib/RT/Scrips.pm
+++ b/rt/lib/RT/Scrips.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Scrip item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Scrip->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Scrips_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Scrips_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Scrips_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Scrips_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Scrips_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Scrips_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Search/Googleish.pm b/rt/lib/RT/Search/Googleish.pm
index 317480014..4232b434b 100644
--- a/rt/lib/RT/Search/Googleish.pm
+++ b/rt/lib/RT/Search/Googleish.pm
@@ -176,13 +176,15 @@ sub QueryToSQL {
push @queue_clauses, "Queue = '$quoted_queue'";
}
+ if ( ! @status_clauses
+ and ! RT->Config->Get('SimpleSearchIncludeResolved') ) {
+ # implicitly exclude resolved status
+ @status_clauses = map "Status = '$_'", RT::Queue->ActiveStatusArray();
+ }
+
push @tql_clauses, join( " OR ", sort @id_clauses );
push @tql_clauses, join( " OR ", sort @owner_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 @status_clauses );
push @tql_clauses, join( " OR ", sort @user_clauses );
push @tql_clauses, join( " OR ", sort @queue_clauses );
@tql_clauses = grep { $_ ? $_ = "( $_ )" : undef } @tql_clauses;
@@ -202,6 +204,9 @@ sub Prepare {
}
# }}}
-RT::Base->_ImportOverlays();
+eval "require RT::Search::Googleish_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Googleish_Vendor.pm});
+eval "require RT::Search::Googleish_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Googleish_Local.pm});
1;
diff --git a/rt/lib/RT/SearchBuilder.pm b/rt/lib/RT/SearchBuilder.pm
index e4a17f464..da542ea4e 100644
--- a/rt/lib/RT/SearchBuilder.pm
+++ b/rt/lib/RT/SearchBuilder.pm
@@ -65,7 +65,7 @@
package RT::SearchBuilder;
use RT::Base;
-use DBIx::SearchBuilder "1.40";
+use DBIx::SearchBuilder "1.50";
use strict;
use warnings;
@@ -85,17 +85,6 @@ sub _Init {
$self->SUPER::_Init( 'Handle' => $RT::Handle);
}
-sub OrderByCols {
- my $self = shift;
- my @sort;
- for my $s (@_) {
- next if defined $s->{FIELD} and $s->{FIELD} =~ /\W/;
- $s->{FIELD} = $s->{FUNCTION} if $s->{FUNCTION};
- push @sort, $s;
- }
- return $self->SUPER::OrderByCols( @sort );
-}
-
=head2 LimitToEnabled
Only find items that haven't been disabled
@@ -285,47 +274,14 @@ This Limit sub calls SUPER::Limit, but defaults "CASESENSITIVE" to 1, thus
making sure that by default lots of things don't do extra work trying to
match lower(colname) agaist lc($val);
-We also force VALUE to C<NULL> when the OPERATOR is C<IS> or C<IS NOT>.
-This ensures that we don't pass invalid SQL to the database or allow SQL
-injection attacks when we pass through user specified values.
-
=cut
sub Limit {
my $self = shift;
- my %ARGS = (
- CASESENSITIVE => 1,
- OPERATOR => '=',
- @_,
- );
-
- # We use the same regex here that DBIx::SearchBuilder uses to exclude
- # values from quoting
- if ( $ARGS{'OPERATOR'} =~ /IS/i ) {
- # Don't pass anything but NULL for IS and IS NOT
- $ARGS{'VALUE'} = 'NULL';
- }
+ my %args = ( CASESENSITIVE => 1,
+ @_ );
- if ($ARGS{FUNCTION}) {
- ($ARGS{ALIAS}, $ARGS{FIELD}) = split /\./, delete $ARGS{FUNCTION}, 2;
- $self->SUPER::Limit(%ARGS);
- } elsif ($ARGS{FIELD} =~ /\W/
- or $ARGS{OPERATOR} !~ /^(=|<|>|!=|<>|<=|>=
- |(NOT\s*)?LIKE
- |(NOT\s*)?(STARTS|ENDS)WITH
- |(NOT\s*)?MATCHES
- |IS(\s*NOT)?
- |IN)$/ix) {
- $RT::Logger->crit("Possible SQL injection attack: $ARGS{FIELD} $ARGS{OPERATOR}");
- $self->SUPER::Limit(
- %ARGS,
- FIELD => 'id',
- OPERATOR => '<',
- VALUE => '0',
- );
- } else {
- $self->SUPER::Limit(%ARGS);
- }
+ return $self->SUPER::Limit(%args);
}
=head2 ItemsOrderBy
@@ -389,6 +345,9 @@ sub _DoCount {
return $self->SUPER::_DoCount(@_);
}
-RT::Base->_ImportOverlays();
+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/System.pm b/rt/lib/RT/System.pm
index 7a5bff000..8e5f96368 100644
--- a/rt/lib/RT/System.pm
+++ b/rt/lib/RT/System.pm
@@ -189,6 +189,31 @@ sub SubjectTag {
return grep !$seen{lc $_}++, values %$map;
}
-RT::Base->_ImportOverlays();
+=head2 QueueCacheNeedsUpdate ( 1 )
+
+Attribute to decide when SelectQueue needs to flush the list of queues
+ and retrieve new ones. Set when queues are created, enabled/disabled
+ and on certain acl changes. Should also better understand group management.
+
+If passed a true value, will update the attribute to be the current time.
+
+=cut
+
+sub QueueCacheNeedsUpdate {
+ my $self = shift;
+ my $update = shift;
+
+ if ($update) {
+ return $self->SetAttribute(Name => 'QueueCacheNeedsUpdate', Content => time);
+ } else {
+ my $cache = $self->FirstAttribute('QueueCacheNeedsUpdate');
+ return (defined $cache ? $cache->Content : 0 );
+ }
+}
+
+eval "require RT::System_Vendor";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/System_Vendor.pm});
+eval "require RT::System_Local";
+die $@ if ($@ && $@ !~ qr{^Can't locate RT/System_Local.pm});
1;
diff --git a/rt/lib/RT/Template.pm b/rt/lib/RT/Template.pm
index b77820d1f..f73ea3ed6 100755
--- a/rt/lib/RT/Template.pm
+++ b/rt/lib/RT/Template.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -87,7 +62,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -130,7 +105,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -139,14 +114,14 @@ Returns the current value of id.
=cut
-=head2 Queue
+=item Queue
Returns the current value of Queue.
(In the database, Queue is stored as int(11).)
-=head2 SetQueue VALUE
+=item SetQueue VALUE
Set Queue to VALUE.
@@ -157,7 +132,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 QueueObj
+=item QueueObj
Returns the Queue Object which has the id returned by Queue
@@ -171,14 +146,14 @@ sub QueueObj {
return($Queue);
}
-=head2 Name
+=item Name
Returns the current value of Name.
(In the database, Name is stored as varchar(200).)
-=head2 SetName VALUE
+=item SetName VALUE
Set Name to VALUE.
@@ -189,14 +164,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Description
+=item Description
Returns the current value of Description.
(In the database, Description is stored as varchar(255).)
-=head2 SetDescription VALUE
+=item SetDescription VALUE
Set Description to VALUE.
@@ -207,14 +182,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Type
+=item Type
Returns the current value of Type.
(In the database, Type is stored as varchar(16).)
-=head2 SetType VALUE
+=item SetType VALUE
Set Type to VALUE.
@@ -225,14 +200,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Language
+=item Language
Returns the current value of Language.
(In the database, Language is stored as varchar(16).)
-=head2 SetLanguage VALUE
+=item SetLanguage VALUE
Set Language to VALUE.
@@ -243,14 +218,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 TranslationOf
+=item TranslationOf
Returns the current value of TranslationOf.
(In the database, TranslationOf is stored as int(11).)
-=head2 SetTranslationOf VALUE
+=item SetTranslationOf VALUE
Set TranslationOf to VALUE.
@@ -261,14 +236,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Content
+=item Content
Returns the current value of Content.
(In the database, Content is stored as blob.)
-=head2 SetContent VALUE
+=item SetContent VALUE
Set Content to VALUE.
@@ -279,7 +254,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -288,7 +263,7 @@ Returns the current value of LastUpdated.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -297,7 +272,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -306,7 +281,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -316,38 +291,55 @@ Returns the current value of Created.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
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, type => 'int(11)', default => '0'},
Name =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Description =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
Type =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
Language =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
TranslationOf =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
Content =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''},
+ {read => 1, write => 1, type => 'blob', default => ''},
LastUpdated =>
- {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
+ {read => 1, auto => 1, 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, type => 'int(11)', default => '0'},
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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Template_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Template_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Template_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Template_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Template_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Template_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -357,7 +349,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Templates.pm b/rt/lib/RT/Templates.pm
index 97b37c5ed..37db84086 100755
--- a/rt/lib/RT/Templates.pm
+++ b/rt/lib/RT/Templates.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Template item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Template->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Templates_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Templates_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Templates_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Templates_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Templates_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Templates_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Test.pm b/rt/lib/RT/Test.pm
index e1990d00d..9954ec729 100644
--- a/rt/lib/RT/Test.pm
+++ b/rt/lib/RT/Test.pm
@@ -75,7 +75,7 @@ wrap 'HTTP::Request::Common::form_data',
};
-our @EXPORT = qw(is_empty parse_mail);
+our @EXPORT = qw(is_empty);
our ($port, $dbname);
our @SERVERS;
@@ -217,7 +217,7 @@ sub bootstrap_config {
$tmp{'config'}{'RT'} = File::Spec->catfile(
"$tmp{'directory'}", 'RT_SiteConfig.pm'
);
- open( my $config, '>', $tmp{'config'}{'RT'} )
+ open my $config, '>', $tmp{'config'}{'RT'}
or die "Couldn't open $tmp{'config'}{'RT'}: $!";
print $config qq{
@@ -246,7 +246,7 @@ Set( \$RTAddressRegexp , qr/^bad_re_that_doesnt_match\$/);
Set( \$MailCommand, sub {
my \$MIME = shift;
- open( my \$handle, '>>', '$mail_catcher' )
+ open my \$handle, '>>', '$mail_catcher'
or die "Unable to open '$mail_catcher' for appending: \$!";
\$MIME->print(\$handle);
@@ -272,7 +272,7 @@ sub bootstrap_logging {
$tmp{'log'}{'RT'} = File::Spec->catfile(
"$tmp{'directory'}", 'rt.debug.log'
);
- open( my $fh, '>', $tmp{'log'}{'RT'} )
+ open my $fh, '>', $tmp{'log'}{'RT'}
or die "Couldn't open $tmp{'config'}{'RT'}: $!";
# make world writable so apache under different user
# can write into it
@@ -303,7 +303,7 @@ sub set_config_wrapper {
SCALAR => '$',
);
my $sigil = $sigils{$type} || $sigils{'SCALAR'};
- open( my $fh, '>>', $tmp{'config'}{'RT'} )
+ open my $fh, '>>', $tmp{'config'}{'RT'}
or die "Couldn't open config file: $!";
require Data::Dumper;
my $dump = Data::Dumper::Dumper([@_[2 .. $#_]]);
@@ -774,7 +774,7 @@ sub open_mailgate_ok {
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 - $!");
+ Test::More::ok(open(my $mail, "|$RT::BinPath/rt-mailgate --url $baseurl --queue $queue --action $action"), "Opened the mailgate - $!");
return $mail;
}
@@ -1059,6 +1059,9 @@ sub start_standalone_server {
$RT::Handle->dbh( undef );
RT->ConnectToDatabase;
+ # the attribute cache holds on to a stale dbh
+ delete $RT::System->{attributes};
+
return ($ret, RT::Test::Web->new);
}
@@ -1069,7 +1072,7 @@ sub start_apache_server {
my %info = $self->apache_server_info( variant => $variant );
Test::More::diag(do {
- open( my $fh, '<', $tmp{'config'}{'RT'} ) or die $!;
+ open my $fh, '<', $tmp{'config'}{'RT'};
local $/;
<$fh>
});
@@ -1115,7 +1118,7 @@ sub start_apache_server {
}
Test::More::BAIL_OUT("Couldn't start apache server, no pid file")
unless -e $opt{'pid_file'};
- open( my $pid_fh, '<', $opt{'pid_file'} )
+ open my $pid_fh, '<', $opt{'pid_file'}
or Test::More::BAIL_OUT("Couldn't open pid file: $!");
my $pid = <$pid_fh>;
chomp $pid;
@@ -1227,7 +1230,7 @@ sub file_content {
Test::More::diag "reading content of '$path'" if $ENV{'TEST_VERBOSE'};
- open( my $fh, "<:raw", $path )
+ open my $fh, "<:raw", $path
or do {
warn "couldn't open file '$path': $!" unless $args{noexist};
return ''
@@ -1286,7 +1289,7 @@ sub process_in_file {
($out_fh, $out_conf) = tempfile();
} else {
$out_conf = $args{'out'};
- open( $out_fh, '>', $out_conf )
+ open $out_fh, '>', $out_conf
or die "couldn't open '$out_conf': $!";
}
print $out_fh $text;
@@ -1295,14 +1298,6 @@ sub process_in_file {
return ($out_fh, $out_conf);
}
-sub parse_mail {
- my $mail = shift;
- require RT::EmailParser;
- my $parser = RT::EmailParser->new;
- $parser->ParseMIMEEntityFromScalar( $mail );
- return $parser->Entity;
-}
-
END {
my $Test = RT::Test->builder;
return if $Test->{Original_Pid} != $$;
diff --git a/rt/lib/RT/Ticket.pm b/rt/lib/RT/Ticket.pm
index edf38f0e6..2f075a20c 100755
--- a/rt/lib/RT/Ticket.pm
+++ b/rt/lib/RT/Ticket.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -87,7 +62,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -141,7 +116,7 @@ sub Create {
Resolved => '',
Disabled => '0',
- @_);
+ @_);
$self->SUPER::Create(
EffectiveId => $args{'EffectiveId'},
Queue => $args{'Queue'},
@@ -169,7 +144,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -178,14 +153,14 @@ Returns the current value of id.
=cut
-=head2 EffectiveId
+=item EffectiveId
Returns the current value of EffectiveId.
(In the database, EffectiveId is stored as int(11).)
-=head2 SetEffectiveId VALUE
+=item SetEffectiveId VALUE
Set EffectiveId to VALUE.
@@ -196,14 +171,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Queue
+=item Queue
Returns the current value of Queue.
(In the database, Queue is stored as int(11).)
-=head2 SetQueue VALUE
+=item SetQueue VALUE
Set Queue to VALUE.
@@ -214,7 +189,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 QueueObj
+=item QueueObj
Returns the Queue Object which has the id returned by Queue
@@ -222,22 +197,20 @@ 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
+=item Type
Returns the current value of Type.
(In the database, Type is stored as varchar(16).)
-=head2 SetType VALUE
+=item SetType VALUE
Set Type to VALUE.
@@ -248,14 +221,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 IssueStatement
+=item IssueStatement
Returns the current value of IssueStatement.
(In the database, IssueStatement is stored as int(11).)
-=head2 SetIssueStatement VALUE
+=item SetIssueStatement VALUE
Set IssueStatement to VALUE.
@@ -266,14 +239,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Resolution
+=item Resolution
Returns the current value of Resolution.
(In the database, Resolution is stored as int(11).)
-=head2 SetResolution VALUE
+=item SetResolution VALUE
Set Resolution to VALUE.
@@ -284,14 +257,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Owner
+=item Owner
Returns the current value of Owner.
(In the database, Owner is stored as int(11).)
-=head2 SetOwner VALUE
+=item SetOwner VALUE
Set Owner to VALUE.
@@ -302,14 +275,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Subject
+=item Subject
Returns the current value of Subject.
(In the database, Subject is stored as varchar(200).)
-=head2 SetSubject VALUE
+=item SetSubject VALUE
Set Subject to VALUE.
@@ -320,14 +293,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 InitialPriority
+=item InitialPriority
Returns the current value of InitialPriority.
(In the database, InitialPriority is stored as int(11).)
-=head2 SetInitialPriority VALUE
+=item SetInitialPriority VALUE
Set InitialPriority to VALUE.
@@ -338,14 +311,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 FinalPriority
+=item FinalPriority
Returns the current value of FinalPriority.
(In the database, FinalPriority is stored as int(11).)
-=head2 SetFinalPriority VALUE
+=item SetFinalPriority VALUE
Set FinalPriority to VALUE.
@@ -356,14 +329,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Priority
+=item Priority
Returns the current value of Priority.
(In the database, Priority is stored as int(11).)
-=head2 SetPriority VALUE
+=item SetPriority VALUE
Set Priority to VALUE.
@@ -374,14 +347,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 TimeEstimated
+=item TimeEstimated
Returns the current value of TimeEstimated.
(In the database, TimeEstimated is stored as int(11).)
-=head2 SetTimeEstimated VALUE
+=item SetTimeEstimated VALUE
Set TimeEstimated to VALUE.
@@ -392,14 +365,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 TimeWorked
+=item TimeWorked
Returns the current value of TimeWorked.
(In the database, TimeWorked is stored as int(11).)
-=head2 SetTimeWorked VALUE
+=item SetTimeWorked VALUE
Set TimeWorked to VALUE.
@@ -410,14 +383,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Status
+=item Status
Returns the current value of Status.
(In the database, Status is stored as varchar(10).)
-=head2 SetStatus VALUE
+=item SetStatus VALUE
Set Status to VALUE.
@@ -428,14 +401,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 TimeLeft
+=item TimeLeft
Returns the current value of TimeLeft.
(In the database, TimeLeft is stored as int(11).)
-=head2 SetTimeLeft VALUE
+=item SetTimeLeft VALUE
Set TimeLeft to VALUE.
@@ -446,14 +419,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Told
+=item Told
Returns the current value of Told.
(In the database, Told is stored as datetime.)
-=head2 SetTold VALUE
+=item SetTold VALUE
Set Told to VALUE.
@@ -464,14 +437,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Starts
+=item Starts
Returns the current value of Starts.
(In the database, Starts is stored as datetime.)
-=head2 SetStarts VALUE
+=item SetStarts VALUE
Set Starts to VALUE.
@@ -482,14 +455,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Started
+=item Started
Returns the current value of Started.
(In the database, Started is stored as datetime.)
-=head2 SetStarted VALUE
+=item SetStarted VALUE
Set Started to VALUE.
@@ -500,14 +473,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Due
+=item Due
Returns the current value of Due.
(In the database, Due is stored as datetime.)
-=head2 SetDue VALUE
+=item SetDue VALUE
Set Due to VALUE.
@@ -518,14 +491,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Resolved
+=item Resolved
Returns the current value of Resolved.
(In the database, Resolved is stored as datetime.)
-=head2 SetResolved VALUE
+=item SetResolved VALUE
Set Resolved to VALUE.
@@ -536,7 +509,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -545,7 +518,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -554,7 +527,7 @@ Returns the current value of LastUpdated.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -563,7 +536,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -572,14 +545,14 @@ Returns the current value of Created.
=cut
-=head2 Disabled
+=item Disabled
Returns the current value of Disabled.
(In the database, Disabled is stored as smallint(6).)
-=head2 SetDisabled VALUE
+=item SetDisabled VALUE
Set Disabled to VALUE.
@@ -591,64 +564,81 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, type => 'smallint(6)', default => '0'},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Ticket_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Ticket_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Ticket_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Ticket_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Ticket_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Ticket_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -658,7 +648,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/TicketCustomFieldValue.pm b/rt/lib/RT/TicketCustomFieldValue.pm
deleted file mode 100644
index 717647266..000000000
--- a/rt/lib/RT/TicketCustomFieldValue.pm
+++ /dev/null
@@ -1,308 +0,0 @@
-# {{{ BEGIN BPS TAGGED BLOCK
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You 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
-# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
-# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
-#
-# !! DO NOT EDIT THIS FILE !!
-#
-
-use strict;
-
-
-=head1 NAME
-
-RT::TicketCustomFieldValue
-
-
-=head1 SYNOPSIS
-
-=head1 DESCRIPTION
-
-=head1 METHODS
-
-=cut
-
-package RT::TicketCustomFieldValue;
-use RT::Record;
-use RT::CustomField;
-use RT::Ticket;
-
-
-use vars qw( @ISA );
-@ISA= qw( RT::Record );
-
-sub _Init {
- my $self = shift;
-
- $self->Table('TicketCustomFieldValues');
- $self->SUPER::_Init(@_);
-}
-
-
-
-
-
-=head2 Create PARAMHASH
-
-Create takes a hash of values and creates a row in the database:
-
- int(11) 'Ticket'.
- int(11) 'CustomField'.
- varchar(255) 'Content'.
-
-=cut
-
-
-
-
-sub Create {
- my $self = shift;
- my %args = (
- Ticket => '0',
- CustomField => '0',
- Content => '',
-
- @_);
- $self->SUPER::Create(
- Ticket => $args{'Ticket'},
- CustomField => $args{'CustomField'},
- Content => $args{'Content'},
-);
-
-}
-
-
-
-=head2 id
-
-Returns the current value of id.
-(In the database, id is stored as int(11).)
-
-
-=cut
-
-
-=head2 Ticket
-
-Returns the current value of Ticket.
-(In the database, Ticket is stored as int(11).)
-
-
-
-=head2 SetTicket VALUE
-
-
-Set Ticket to VALUE.
-Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, Ticket will be stored as a int(11).)
-
-
-=cut
-
-
-=head2 TicketObj
-
-Returns the Ticket Object which has the id returned by Ticket
-
-
-=cut
-
-sub TicketObj {
- my $self = shift;
- my $Ticket = RT::Ticket->new($self->CurrentUser);
- $Ticket->Load($self->__Value('Ticket'));
- return($Ticket);
-}
-
-=head2 CustomField
-
-Returns the current value of CustomField.
-(In the database, CustomField is stored as int(11).)
-
-
-
-=head2 SetCustomField VALUE
-
-
-Set CustomField to VALUE.
-Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, CustomField will be stored as a int(11).)
-
-
-=cut
-
-
-=head2 CustomFieldObj
-
-Returns the CustomField Object which has the id returned by CustomField
-
-
-=cut
-
-sub CustomFieldObj {
- my $self = shift;
- my $CustomField = RT::CustomField->new($self->CurrentUser);
- $CustomField->Load($self->__Value('CustomField'));
- return($CustomField);
-}
-
-=head2 Content
-
-Returns the current value of Content.
-(In the database, Content is stored as varchar(255).)
-
-
-
-=head2 SetContent VALUE
-
-
-Set Content to VALUE.
-Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, Content will be stored as a varchar(255).)
-
-
-=cut
-
-
-=head2 Creator
-
-Returns the current value of Creator.
-(In the database, Creator is stored as int(11).)
-
-
-=cut
-
-
-=head2 Created
-
-Returns the current value of Created.
-(In the database, Created is stored as datetime.)
-
-
-=cut
-
-
-=head2 LastUpdatedBy
-
-Returns the current value of LastUpdatedBy.
-(In the database, LastUpdatedBy is stored as int(11).)
-
-
-=cut
-
-
-=head2 LastUpdated
-
-Returns the current value of LastUpdated.
-(In the database, LastUpdated is stored as datetime.)
-
-
-=cut
-
-
-
-sub _CoreAccessible {
- {
-
- id =>
- {read => 1, type => 'int(11)', default => ''},
- Ticket =>
- {read => 1, write => 1, type => 'int(11)', default => '0'},
- CustomField =>
- {read => 1, write => 1, type => 'int(11)', default => '0'},
- Content =>
- {read => 1, write => 1, type => 'varchar(255)', default => ''},
- Creator =>
- {read => 1, auto => 1, type => 'int(11)', default => '0'},
- Created =>
- {read => 1, auto => 1, type => 'datetime', default => ''},
- LastUpdatedBy =>
- {read => 1, auto => 1, type => 'int(11)', default => '0'},
- LastUpdated =>
- {read => 1, auto => 1, type => 'datetime', default => ''},
-
- }
-};
-
-
- eval "require RT::TicketCustomFieldValue_Overlay";
- if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValue_Overlay.pm}) {
- die $@;
- };
-
- eval "require RT::TicketCustomFieldValue_Vendor";
- if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValue_Vendor.pm}) {
- die $@;
- };
-
- eval "require RT::TicketCustomFieldValue_Local";
- if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValue_Local.pm}) {
- die $@;
- };
-
-
-
-
-=head1 SEE ALSO
-
-This class allows "overlay" methods to be placed
-into the following files _Overlay is for a System overlay by the original author,
-_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations.
-
-These overlay files can contain new subs or subs to replace existing subs in this module.
-
-If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
-
- no warnings qw(redefine);
-
-so that perl does not kick and scream when you redefine a subroutine or variable in your overlay.
-
-RT::TicketCustomFieldValue_Overlay, RT::TicketCustomFieldValue_Vendor, RT::TicketCustomFieldValue_Local
-
-=cut
-
-
-1;
diff --git a/rt/lib/RT/TicketCustomFieldValue_Overlay.pm b/rt/lib/RT/TicketCustomFieldValue_Overlay.pm
deleted file mode 100644
index 270c5939a..000000000
--- a/rt/lib/RT/TicketCustomFieldValue_Overlay.pm
+++ /dev/null
@@ -1,74 +0,0 @@
-# {{{ BEGIN BPS TAGGED BLOCK
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You 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 strict;
-no warnings qw(redefine);
-
-
-
-=head2 LoadByTicketContentAndCustomField { Ticket => TICKET, CustomField => CUSTOMFIELD, Content => CONTENT }
-
-Loads a custom field value by Ticket, Content and which CustomField it's tied to
-
-=cut
-
-
-sub LoadByTicketContentAndCustomField {
- my $self = shift;
- my %args = ( Ticket => undef,
- CustomField => undef,
- Content => undef,
- @_
- );
-
-
- $self->LoadByCols( Content => $args{'Content'},
- CustomField => $args{'CustomField'},
- Ticket => $args{'Ticket'});
-
-
-}
-
-1;
diff --git a/rt/lib/RT/TicketCustomFieldValues.pm b/rt/lib/RT/TicketCustomFieldValues.pm
deleted file mode 100644
index 2174afef3..000000000
--- a/rt/lib/RT/TicketCustomFieldValues.pm
+++ /dev/null
@@ -1,137 +0,0 @@
-# {{{ BEGIN BPS TAGGED BLOCK
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You 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
-# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
-# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
-#
-# !! DO NOT EDIT THIS FILE !!
-#
-
-use strict;
-
-
-=head1 NAME
-
- RT::TicketCustomFieldValues -- Class Description
-
-=head1 SYNOPSIS
-
- use RT::TicketCustomFieldValues
-
-=head1 DESCRIPTION
-
-
-=head1 METHODS
-
-=cut
-
-package RT::TicketCustomFieldValues;
-
-use RT::SearchBuilder;
-use RT::TicketCustomFieldValue;
-
-use vars qw( @ISA );
-@ISA= qw(RT::SearchBuilder);
-
-
-sub _Init {
- my $self = shift;
- $self->{'table'} = 'TicketCustomFieldValues';
- $self->{'primary_key'} = 'id';
-
-
- return ( $self->SUPER::_Init(@_) );
-}
-
-
-=head2 NewItem
-
-Returns an empty new RT::TicketCustomFieldValue item
-
-=cut
-
-sub NewItem {
- my $self = shift;
- return(RT::TicketCustomFieldValue->new($self->CurrentUser));
-}
-
- eval "require RT::TicketCustomFieldValues_Overlay";
- if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValues_Overlay.pm}) {
- die $@;
- };
-
- eval "require RT::TicketCustomFieldValues_Vendor";
- if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValues_Vendor.pm}) {
- die $@;
- };
-
- eval "require RT::TicketCustomFieldValues_Local";
- if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValues_Local.pm}) {
- die $@;
- };
-
-
-
-
-=head1 SEE ALSO
-
-This class allows "overlay" methods to be placed
-into the following files _Overlay is for a System overlay by the original author,
-_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations.
-
-These overlay files can contain new subs or subs to replace existing subs in this module.
-
-If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
-
- no warnings qw(redefine);
-
-so that perl does not kick and scream when you redefine a subroutine or variable in your overlay.
-
-RT::TicketCustomFieldValues_Overlay, RT::TicketCustomFieldValues_Vendor, RT::TicketCustomFieldValues_Local
-
-=cut
-
-
-1;
diff --git a/rt/lib/RT/TicketCustomFieldValues_Overlay.pm b/rt/lib/RT/TicketCustomFieldValues_Overlay.pm
deleted file mode 100644
index 8cbaca574..000000000
--- a/rt/lib/RT/TicketCustomFieldValues_Overlay.pm
+++ /dev/null
@@ -1,108 +0,0 @@
-# {{{ BEGIN BPS TAGGED BLOCK
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You 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 strict;
-no warnings qw(redefine);
-
-# {{{ sub LimitToCustomField
-
-=head2 LimitToCustomField FIELD
-
-Limits the returned set to values for the custom field with Id FIELD
-
-=cut
-
-sub LimitToCustomField {
- my $self = shift;
- my $cf = shift;
- return ($self->Limit( FIELD => 'CustomField',
- VALUE => $cf,
- OPERATOR => '='));
-
-}
-
-# }}}
-
-# {{{ sub LimitToTicket
-
-=head2 LimitToTicket TICKETID
-
-Limits the returned set to values for the ticket with Id TICKETID
-
-=cut
-
-sub LimitToTicket {
- my $self = shift;
- my $ticket = shift;
- return ($self->Limit( FIELD => 'Ticket',
- VALUE => $ticket,
- OPERATOR => '='));
-
-}
-
-# }}}
-
-
-=sub HasEntry VALUE
-
-Returns true if this CustomFieldValues collection has an entry with content that eq VALUE
-
-=cut
-
-
-sub HasEntry {
- my $self = shift;
- my $value = shift;
-
- #TODO: this could cache and optimize a fair bit.
- foreach my $item (@{$self->ItemsArrayRef}) {
- return(1) if ($item->Content eq $value);
- }
- return undef;
-
-}
-
-1;
-
diff --git a/rt/lib/RT/Ticket_Overlay.pm b/rt/lib/RT/Ticket_Overlay.pm
index 8dd88c927..3ab31d3c2 100644
--- a/rt/lib/RT/Ticket_Overlay.pm
+++ b/rt/lib/RT/Ticket_Overlay.pm
@@ -81,6 +81,7 @@ use RT::Transactions;
use RT::Reminders;
use RT::URI::fsck_com_rt;
use RT::URI;
+use RT::URI::freeside;
use MIME::Entity;
@@ -617,11 +618,16 @@ sub Create {
next;
}
}
-
+
+ #don't show transactions for reminders
+ my $silent = ( !$args{'_RecordTransaction'}
+ || $self->Type eq 'reminder'
+ );
+
my ( $wval, $wmsg ) = $self->_AddLink(
Type => $LINKTYPEMAP{$type}->{'Type'},
$LINKTYPEMAP{$type}->{'Mode'} => $link,
- Silent => !$args{'_RecordTransaction'},
+ Silent => $silent,
'Silent'. ( $LINKTYPEMAP{$type}->{'Mode'} eq 'Base'? 'Target': 'Base' )
=> 1,
);
@@ -631,6 +637,69 @@ sub Create {
}
# }}}
+
+ # {{{ Deal with auto-customer association
+
+ #unless we already have (a) customer(s)...
+ unless ( $self->Customers->Count ) {
+
+ #first find any requestors with emails but *without* customer targets
+ my @NoCust_Requestors =
+ grep { $_->EmailAddress && ! $_->Customers->Count }
+ @{ $self->_Requestors->UserMembersObj->ItemsArrayRef };
+
+ for my $Requestor (@NoCust_Requestors) {
+
+ #perhaps the stuff in here should be in a User method??
+ my @Customers =
+ &RT::URI::freeside::email_search( email=>$Requestor->EmailAddress );
+
+ foreach my $custnum ( map $_->{'custnum'}, @Customers ) {
+
+ ## false laziness w/RT/Interface/Web_Vendor.pm
+ my @link = ( 'Type' => 'MemberOf',
+ 'Target' => "freeside://freeside/cust_main/$custnum",
+ );
+
+ my( $val, $msg ) = $Requestor->_AddLink(@link);
+ #XXX should do something with $msg# push @non_fatal_errors, $msg;
+
+ }
+
+ }
+
+ #find any requestors with customer targets
+
+ my %cust_target = ();
+
+ my @Requestors =
+ grep { $_->Customers->Count }
+ @{ $self->_Requestors->UserMembersObj->ItemsArrayRef };
+
+ foreach my $Requestor ( @Requestors ) {
+ foreach my $cust_link ( @{ $Requestor->Customers->ItemsArrayRef } ) {
+ $cust_target{ $cust_link->Target } = 1;
+ }
+ }
+
+ #and then auto-associate this ticket with those customers
+
+ foreach my $cust_target ( keys %cust_target ) {
+
+ my @link = ( 'Type' => 'MemberOf',
+ #'Target' => "freeside://freeside/cust_main/$custnum",
+ 'Target' => $cust_target,
+ );
+
+ my( $val, $msg ) = $self->_AddLink(@link);
+ push @non_fatal_errors, $msg;
+
+ }
+
+ }
+
+ # }}}
+
# 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 ) {
@@ -646,7 +715,6 @@ sub Create {
} else {
$Owner = $DeferOwner;
$self->__Set(Field => 'Owner', Value => $Owner->id);
-
}
$self->OwnerGroup->_AddMember(
PrincipalId => $Owner->PrincipalId,
@@ -654,7 +722,8 @@ sub Create {
);
}
- if ( $args{'_RecordTransaction'} ) {
+ #don't make a transaction or fire off any scrips for reminders either
+ if ( $args{'_RecordTransaction'} && $self->Type ne 'reminder' ) {
# {{{ Add a transaction for the create
my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction(
@@ -666,7 +735,8 @@ sub Create {
if ( $self->Id && $Trans ) {
- $TransObj->UpdateCustomFields(ARGSRef => \%args);
+ #$TransObj->UpdateCustomFields(ARGSRef => \%args);
+ $TransObj->UpdateCustomFields(%args);
$RT::Logger->info( "Ticket " . $self->Id . " created in queue '" . $QueueObj->Name . "' by " . $self->CurrentUser->Name );
$ErrStr = $self->loc( "Ticket [_1] created in queue '[_2]'", $self->Id, $QueueObj->Name );
@@ -944,14 +1014,15 @@ sub Import {
$self->OwnerGroup->_AddMember( PrincipalId => $Owner->PrincipalId );
- foreach my $watcher ( @{ $args{'Cc'} } ) {
+ my $watcher;
+ foreach $watcher ( @{ $args{'Cc'} } ) {
$self->_AddWatcher( Type => 'Cc', Email => $watcher, Silent => 1 );
}
- foreach my $watcher ( @{ $args{'AdminCc'} } ) {
+ foreach $watcher ( @{ $args{'AdminCc'} } ) {
$self->_AddWatcher( Type => 'AdminCc', Email => $watcher,
Silent => 1 );
}
- foreach my $watcher ( @{ $args{'Requestor'} } ) {
+ foreach $watcher ( @{ $args{'Requestor'} } ) {
$self->_AddWatcher( Type => 'Requestor', Email => $watcher,
Silent => 1 );
}
@@ -1427,6 +1498,25 @@ sub Requestors {
# }}}
+# {{{ sub _Requestors
+
+=head2 _Requestors
+
+Private non-ACLed variant of Reqeustors so that we can look them up for the
+purposes of customer auto-association during create.
+
+=cut
+
+sub _Requestors {
+ my $self = shift;
+
+ my $group = RT::Group->new($RT::SystemUser);
+ $group->LoadTicketRoleGroup(Type => 'Requestor', Ticket => $self->Id);
+ return ($group);
+}
+
+# }}}
+
# {{{ sub Cc
=head2 Cc
@@ -2134,6 +2224,7 @@ sub _RecordNote {
NoteType => 'Correspond',
TimeTaken => 0,
CommitScrips => 1,
+ CustomFields => {},
@_
);
@@ -2190,6 +2281,7 @@ sub _RecordNote {
TimeTaken => $args{'TimeTaken'},
MIMEObj => $args{'MIMEObj'},
CommitScrips => $args{'CommitScrips'},
+ CustomFields => $args{'CustomFields'},
);
unless ($Trans) {
@@ -2224,6 +2316,16 @@ sub _Links {
return $links;
}
+ # without this you will also get RT::User(s) instead of tickets!
+ if ($field == 'Base' and $type == 'MemberOf') {
+ my $rtname = RT->Config->Get('rtname');
+ $links->Limit(
+ FIELD => 'Base',
+ OPERATOR => 'STARTSWITH',
+ VALUE => "fsck.com-rt://$rtname/ticket/",
+ );
+ }
+
# Maybe this ticket is a merge ticket
my $limit_on = 'Local'. $field;
# at least to myself
diff --git a/rt/lib/RT/Tickets.pm b/rt/lib/RT/Tickets.pm
index b3a84ae8d..b6b349144 100755
--- a/rt/lib/RT/Tickets.pm
+++ b/rt/lib/RT/Tickets.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Ticket item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Ticket->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Tickets_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Tickets_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Tickets_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Tickets_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Tickets_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Tickets_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Tickets_Overlay.pm b/rt/lib/RT/Tickets_Overlay.pm
index d3a3599d2..ffbbc8539 100644
--- a/rt/lib/RT/Tickets_Overlay.pm
+++ b/rt/lib/RT/Tickets_Overlay.pm
@@ -145,13 +145,9 @@ our %FIELD_METADATA = (
WatcherGroup => [ 'MEMBERSHIPFIELD', ], #loc_left_pair
HasAttribute => [ 'HASATTRIBUTE', 1 ],
HasNoAttribute => [ 'HASATTRIBUTE', 0 ],
-);
-
-our %SEARCHABLE_SUBFIELDS = (
- User => [qw(
- EmailAddress Name RealName Nickname Organization Address1 Address2
- WorkPhone HomePhone MobilePhone PagerPhone id
- )],
+ Agentnum => [ 'FREESIDEFIELD', ],
+ Classnum => [ 'FREESIDEFIELD', ],
+ Tagnum => [ 'FREESIDEFIELD', 'cust_tag' ],
);
# Mapping of Field Type to Function
@@ -168,6 +164,7 @@ our %dispatch = (
MEMBERSHIPFIELD => \&_WatcherMembershipLimit,
CUSTOMFIELD => \&_CustomFieldLimit,
HASATTRIBUTE => \&_HasAttributeLimit,
+ FREESIDEFIELD => \&_FreesideFieldLimit,
);
our %can_bundle = ();# WATCHERFIELD => "yes", );
@@ -526,6 +523,14 @@ sub _DateLimit {
die "Incorrect Meta Data for $field"
unless ( defined $meta->[1] );
+ $sb->_DateFieldLimit( $meta->[1], $op, $value, @rest );
+}
+
+# Factor this out for use by custom fields
+
+sub _DateFieldLimit {
+ my ( $sb, $field, $op, $value, @rest ) = @_;
+
my $date = RT::Date->new( $sb->CurrentUser );
$date->Set( Format => 'unknown', Value => $value );
@@ -534,23 +539,44 @@ sub _DateLimit {
# if we're specifying =, that means we want everything on a
# particular single day. in the database, we need to check for >
# and < the edges of that day.
-
- $date->SetToMidnight( Timezone => 'server' );
- my $daystart = $date->ISO;
- $date->AddDay;
- my $dayend = $date->ISO;
+ #
+ # Except if the value is 'this month' or 'last month', check
+ # > and < the edges of the month.
+
+ my ($daystart, $dayend);
+ if ( lc($value) eq 'this month' ) {
+ $date->SetToNow;
+ $date->SetToStart('month', Timezone => 'server');
+ $daystart = $date->ISO;
+ $date->AddMonth(Timezone => 'server');
+ $dayend = $date->ISO;
+ }
+ elsif ( lc($value) eq 'last month' ) {
+ $date->SetToNow;
+ $date->SetToStart('month', Timezone => 'server');
+ $dayend = $date->ISO;
+ $date->AddDays(-1);
+ $date->SetToStart('month', Timezone => 'server');
+ $daystart = $date->ISO;
+ }
+ else {
+ $date->SetToMidnight( Timezone => 'server' );
+ $daystart = $date->ISO;
+ $date->AddDay;
+ $dayend = $date->ISO;
+ }
$sb->_OpenParen;
$sb->_SQLLimit(
- FIELD => $meta->[1],
+ FIELD => $field,
OPERATOR => ">=",
VALUE => $daystart,
@rest,
);
$sb->_SQLLimit(
- FIELD => $meta->[1],
+ FIELD => $field,
OPERATOR => "<",
VALUE => $dayend,
@rest,
@@ -562,7 +588,7 @@ sub _DateLimit {
}
else {
$sb->_SQLLimit(
- FIELD => $meta->[1],
+ FIELD => $field,
OPERATOR => $op,
VALUE => $date->ISO,
@rest,
@@ -811,13 +837,6 @@ sub _WatcherLimit {
my $type = $meta->[1] || '';
my $class = $meta->[2] || 'Ticket';
- # Bail if the subfield is not allowed
- if ( $rest{SUBKEY}
- and not grep { $_ eq $rest{SUBKEY} } @{$SEARCHABLE_SUBFIELDS{'User'}})
- {
- die "Invalid watcher subfield: '$rest{SUBKEY}'";
- }
-
# 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
@@ -1216,7 +1235,7 @@ Try and turn a CF descriptor into (cfid, cfname) object pair.
sub _CustomFieldDecipher {
my ($self, $string) = @_;
- my ($queue, $field, $column) = ($string =~ /^(?:(.+?)\.)?{(.+)}(?:\.(Content|LargeContent))?$/);
+ my ($queue, $field, $column) = ($string =~ /^(?:(.+?)\.)?{(.+)}(?:\.(.+))?$/);
$field ||= ($string =~ /^{(.*?)}$/)[0] || $string;
my $cf;
@@ -1437,6 +1456,15 @@ sub _CustomFieldLimit {
%rest
);
}
+ elsif ( $cf->Type eq 'Date' ) {
+ $self->_DateFieldLimit(
+ 'Content',
+ $op,
+ $value,
+ ALIAS => $TicketCFs,
+ %rest
+ );
+ }
elsif ( $op eq '=' || $op eq '!=' || $op eq '<>' ) {
unless ( length( Encode::encode_utf8($value) ) > 255 ) {
$self->_SQLLimit(
@@ -1614,7 +1642,6 @@ sub _HasAttributeLimit {
);
}
-
# End Helper Functions
# End of SQL Stuff -------------------------------------------------
@@ -1740,25 +1767,45 @@ sub OrderByCols {
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,
- FIELD => undef,
- ALIAS => '',
- FUNCTION => "CASE WHEN $f=$uid THEN 1 ELSE 0 END",
- ORDER => $order
- };
+ push @res, { %$row, ALIAS => '', FIELD => "CASE WHEN $f=$uid THEN 1 ELSE 0 END", ORDER => $order } ;
} else {
- push @res, {
- %$row,
- FIELD => undef,
- FUNCTION => "Owner=$uid",
- ORDER => $order
- };
+ push @res, { %$row, FIELD => "Owner=$uid", ORDER => $order } ;
}
}
push @res, { %$row, FIELD => "Priority", ORDER => $order } ;
- }
+
+ } elsif ( $field eq 'Customer' ) { #Freeside
+ if ( $subkey eq 'Number' ) {
+ my ($linkalias, $custnum_sql) = $self->JoinToCustLinks;
+ push @res, { %$row,
+ ALIAS => '',
+ FIELD => $custnum_sql,
+ };
+ }
+ else {
+ my $custalias = $self->JoinToCustomer;
+ my $field;
+ if ( $subkey eq 'Name' ) {
+ $field = "COALESCE( $custalias.company,
+ $custalias.last || ', ' || $custalias.first
+ )";
+ }
+ elsif ( $subkey eq 'Class' ) {
+ $field = "$custalias.classnum";
+ }
+ elsif ( $subkey eq 'Agent' ) {
+ $field = "$custalias.agentnum";
+ }
+ else {
+ # no other cases exist yet, but for obviousness:
+ $field = $subkey;
+ }
+ push @res, { %$row, ALIAS => '', FIELD => $field };
+ }
+
+ } #Freeside
+
else {
push @res, $row;
}
@@ -1766,6 +1813,100 @@ sub OrderByCols {
return $self->SUPER::OrderByCols(@res);
}
+#Freeside
+
+sub JoinToCustLinks {
+ # Set up join to links (id = localbase),
+ # limit link type to 'MemberOf',
+ # and target value to any Freeside custnum URI.
+ # Return the linkalias for further join/limit action,
+ # and an sql expression to retrieve the custnum.
+ my $self = shift;
+ my $linkalias = $self->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => 'main',
+ FIELD1 => 'id',
+ TABLE2 => 'Links',
+ FIELD2 => 'LocalBase',
+ );
+
+ $self->SUPER::Limit(
+ LEFTJOIN => $linkalias,
+ FIELD => 'Type',
+ OPERATOR => '=',
+ VALUE => 'MemberOf',
+ );
+ $self->SUPER::Limit(
+ LEFTJOIN => $linkalias,
+ FIELD => 'Target',
+ OPERATOR => 'STARTSWITH',
+ VALUE => 'freeside://freeside/cust_main/',
+ );
+ my $custnum_sql = "CAST(SUBSTR($linkalias.Target,31) AS ";
+ if ( RT->Config->Get('DatabaseType') eq 'mysql' ) {
+ $custnum_sql .= 'SIGNED INTEGER)';
+ }
+ else {
+ $custnum_sql .= 'INTEGER)';
+ }
+ return ($linkalias, $custnum_sql);
+}
+
+sub JoinToCustomer {
+ my $self = shift;
+ my ($linkalias, $custnum_sql) = $self->JoinToCustLinks;
+
+ my $custalias = $self->Join(
+ TYPE => 'LEFT',
+ EXPRESSION => $custnum_sql,
+ TABLE2 => 'cust_main',
+ FIELD2 => 'custnum',
+ );
+ return $custalias;
+}
+
+sub _FreesideFieldLimit {
+ my ( $self, $field, $op, $value, %rest ) = @_;
+ my $alias = $self->JoinToCustomer;
+ my $is_negative = 0;
+ if ( $op eq '!=' || $op =~ /\bNOT\b/i ) {
+ # if the op is negative, do the join as though
+ # the op were positive, then accept only records
+ # where the right-side join key is null.
+ $is_negative = 1;
+ $op = '=' if $op eq '!=';
+ $op =~ s/\bNOT\b//;
+ }
+ my $meta = $FIELD_METADATA{$field};
+ if ( $meta->[1] ) {
+ $alias = $self->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => $alias,
+ FIELD1 => 'custnum',
+ TABLE2 => $meta->[1],
+ FIELD2 => 'custnum',
+ );
+ }
+
+ $self->SUPER::Limit(
+ LEFTJOIN => $alias,
+ FIELD => lc($field),
+ OPERATOR => $op,
+ VALUE => $value,
+ ENTRYAGGREGATOR => 'AND',
+ );
+ $self->_SQLLimit(
+ %rest,
+ ALIAS => $alias,
+ FIELD => lc($field),
+ OPERATOR => $is_negative ? 'IS' : 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 0,
+ );
+}
+
+#Freeside
+
# }}}
# {{{ Limit the result set based on content
@@ -3159,9 +3300,9 @@ is a description of the purpose of that TicketRestriction
sub DescribeRestrictions {
my $self = shift;
- my %listing;
+ my ( $row, %listing );
- foreach my $row ( keys %{ $self->{'TicketRestrictions'} } ) {
+ foreach $row ( keys %{ $self->{'TicketRestrictions'} } ) {
$listing{$row} = $self->{'TicketRestrictions'}{$row}{'DESCRIPTION'};
}
return (%listing);
@@ -3236,8 +3377,9 @@ sub DeleteRestriction {
sub _RestrictionsToClauses {
my $self = shift;
+ my $row;
my %clause;
- foreach my $row ( keys %{ $self->{'TicketRestrictions'} } ) {
+ foreach $row ( keys %{ $self->{'TicketRestrictions'} } ) {
my $restriction = $self->{'TicketRestrictions'}{$row};
# We need to reimplement the subclause aggregation that SearchBuilder does.
diff --git a/rt/lib/RT/Transaction.pm b/rt/lib/RT/Transaction.pm
index bc2b5cdbe..ca491a6c7 100755
--- a/rt/lib/RT/Transaction.pm
+++ b/rt/lib/RT/Transaction.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -70,6 +45,7 @@ RT::Transaction
package RT::Transaction;
use RT::Record;
+use RT::Ticket;
use vars qw( @ISA );
@@ -86,21 +62,18 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
- varchar(64) 'ObjectType'.
- int(11) 'ObjectId'.
+ int(11) 'EffectiveTicket'.
+ int(11) 'Ticket'.
int(11) 'TimeTaken'.
varchar(20) 'Type'.
varchar(40) 'Field'.
varchar(255) 'OldValue'.
varchar(255) 'NewValue'.
- varchar(255) 'ReferenceType'.
- int(11) 'OldReference'.
- int(11) 'NewReference'.
- varchar(255) 'Data'.
+ varchar(100) 'Data'.
=cut
@@ -110,30 +83,24 @@ Create takes a hash of values and creates a row in the database:
sub Create {
my $self = shift;
my %args = (
- ObjectType => '',
- ObjectId => '0',
+ EffectiveTicket => '0',
+ Ticket => '0',
TimeTaken => '0',
Type => '',
Field => '',
OldValue => '',
NewValue => '',
- ReferenceType => '',
- OldReference => '',
- NewReference => '',
Data => '',
@_);
$self->SUPER::Create(
- ObjectType => $args{'ObjectType'},
- ObjectId => $args{'ObjectId'},
+ EffectiveTicket => $args{'EffectiveTicket'},
+ Ticket => $args{'Ticket'},
TimeTaken => $args{'TimeTaken'},
Type => $args{'Type'},
Field => $args{'Field'},
OldValue => $args{'OldValue'},
NewValue => $args{'NewValue'},
- ReferenceType => $args{'ReferenceType'},
- OldReference => $args{'OldReference'},
- NewReference => $args{'NewReference'},
Data => $args{'Data'},
);
@@ -141,7 +108,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -150,50 +117,64 @@ Returns the current value of id.
=cut
-=head2 ObjectType
+=item EffectiveTicket
-Returns the current value of ObjectType.
-(In the database, ObjectType is stored as varchar(64).)
+Returns the current value of EffectiveTicket.
+(In the database, EffectiveTicket is stored as int(11).)
-=head2 SetObjectType VALUE
+=item SetEffectiveTicket VALUE
-Set ObjectType to VALUE.
+Set EffectiveTicket to VALUE.
Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, ObjectType will be stored as a varchar(64).)
+(In the database, EffectiveTicket will be stored as a int(11).)
=cut
-=head2 ObjectId
+=item Ticket
-Returns the current value of ObjectId.
-(In the database, ObjectId is stored as int(11).)
+Returns the current value of Ticket.
+(In the database, Ticket is stored as int(11).)
-=head2 SetObjectId VALUE
+=item SetTicket VALUE
-Set ObjectId to VALUE.
+Set Ticket to VALUE.
Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, ObjectId will be stored as a int(11).)
+(In the database, Ticket will be stored as a int(11).)
=cut
-=head2 TimeTaken
+=item TicketObj
+
+Returns the Ticket Object which has the id returned by Ticket
+
+
+=cut
+
+sub TicketObj {
+ my $self = shift;
+ my $Ticket = RT::Ticket->new($self->CurrentUser);
+ $Ticket->Load($self->__Value('Ticket'));
+ return($Ticket);
+}
+
+=item TimeTaken
Returns the current value of TimeTaken.
(In the database, TimeTaken is stored as int(11).)
-=head2 SetTimeTaken VALUE
+=item SetTimeTaken VALUE
Set TimeTaken to VALUE.
@@ -204,14 +185,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Type
+=item Type
Returns the current value of Type.
(In the database, Type is stored as varchar(20).)
-=head2 SetType VALUE
+=item SetType VALUE
Set Type to VALUE.
@@ -222,14 +203,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Field
+=item Field
Returns the current value of Field.
(In the database, Field is stored as varchar(40).)
-=head2 SetField VALUE
+=item SetField VALUE
Set Field to VALUE.
@@ -240,14 +221,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 OldValue
+=item OldValue
Returns the current value of OldValue.
(In the database, OldValue is stored as varchar(255).)
-=head2 SetOldValue VALUE
+=item SetOldValue VALUE
Set OldValue to VALUE.
@@ -258,14 +239,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 NewValue
+=item NewValue
Returns the current value of NewValue.
(In the database, NewValue is stored as varchar(255).)
-=head2 SetNewValue VALUE
+=item SetNewValue VALUE
Set NewValue to VALUE.
@@ -276,79 +257,25 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ReferenceType
-
-Returns the current value of ReferenceType.
-(In the database, ReferenceType is stored as varchar(255).)
-
-
-
-=head2 SetReferenceType VALUE
-
-
-Set ReferenceType to VALUE.
-Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, ReferenceType will be stored as a varchar(255).)
-
-
-=cut
-
-
-=head2 OldReference
-
-Returns the current value of OldReference.
-(In the database, OldReference is stored as int(11).)
-
-
-
-=head2 SetOldReference VALUE
-
-
-Set OldReference to VALUE.
-Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, OldReference will be stored as a int(11).)
-
-
-=cut
-
-
-=head2 NewReference
-
-Returns the current value of NewReference.
-(In the database, NewReference is stored as int(11).)
-
-
-
-=head2 SetNewReference VALUE
-
-
-Set NewReference to VALUE.
-Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, NewReference will be stored as a int(11).)
-
-
-=cut
-
-
-=head2 Data
+=item Data
Returns the current value of Data.
-(In the database, Data is stored as varchar(255).)
+(In the database, Data is stored as varchar(100).)
-=head2 SetData VALUE
+=item SetData VALUE
Set Data to VALUE.
Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
-(In the database, Data will be stored as a varchar(255).)
+(In the database, Data will be stored as a varchar(100).)
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -357,7 +284,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -367,42 +294,53 @@ Returns the current value of Created.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
- ObjectType =>
- {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''},
- ObjectId =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, type => 'int(11)', default => ''},
+ EffectiveTicket =>
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
+ Ticket =>
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
TimeTaken =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'},
+ {read => 1, write => 1, type => 'int(11)', default => '0'},
Type =>
- {read => 1, write => 1, sql_type => 12, length => 20, is_blob => 0, is_numeric => 0, type => 'varchar(20)', default => ''},
+ {read => 1, write => 1, type => 'varchar(20)', default => ''},
Field =>
- {read => 1, write => 1, sql_type => 12, length => 40, is_blob => 0, is_numeric => 0, type => 'varchar(40)', default => ''},
+ {read => 1, write => 1, type => 'varchar(40)', default => ''},
OldValue =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
NewValue =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
- ReferenceType =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
- OldReference =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
- NewReference =>
- {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, write => 1, type => 'varchar(255)', default => ''},
Data =>
- {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''},
+ {read => 1, write => 1, type => 'varchar(100)', 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Transaction_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Transaction_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Transaction_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Transaction_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Transaction_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Transaction_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -412,7 +350,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Transaction_Overlay.pm b/rt/lib/RT/Transaction_Overlay.pm
index b8ea9389c..89c5273e1 100644
--- a/rt/lib/RT/Transaction_Overlay.pm
+++ b/rt/lib/RT/Transaction_Overlay.pm
@@ -110,12 +110,13 @@ sub Create {
NewValue => undef,
MIMEObj => undef,
ActivateScrips => 1,
- CommitScrips => 1,
- ObjectType => 'RT::Ticket',
- ObjectId => 0,
- ReferenceType => undef,
- OldReference => undef,
- NewReference => undef,
+ CommitScrips => 1,
+ ObjectType => 'RT::Ticket',
+ ObjectId => 0,
+ ReferenceType => undef,
+ OldReference => undef,
+ NewReference => undef,
+ CustomFields => {},
@_
);
@@ -130,17 +131,17 @@ sub Create {
#lets create our transaction
my %params = (
- Type => $args{'Type'},
- Data => $args{'Data'},
- Field => $args{'Field'},
- OldValue => $args{'OldValue'},
- NewValue => $args{'NewValue'},
- Created => $args{'Created'},
- ObjectType => $args{'ObjectType'},
- ObjectId => $args{'ObjectId'},
+ Type => $args{'Type'},
+ Data => $args{'Data'},
+ Field => $args{'Field'},
+ OldValue => $args{'OldValue'},
+ NewValue => $args{'NewValue'},
+ Created => $args{'Created'},
+ ObjectType => $args{'ObjectType'},
+ ObjectId => $args{'ObjectId'},
ReferenceType => $args{'ReferenceType'},
- OldReference => $args{'OldReference'},
- NewReference => $args{'NewReference'},
+ OldReference => $args{'OldReference'},
+ NewReference => $args{'NewReference'},
);
# Parameters passed in during an import that we probably don't want to touch, otherwise
@@ -158,6 +159,10 @@ sub Create {
}
}
+ # Set up any custom fields passed at creation. Has to happen
+ # before scrips.
+
+ $self->UpdateCustomFields(%{ $args{'CustomFields'} });
#Provide a way to turn off scrips if we need to
$RT::Logger->debug('About to think about scrips for transaction #' .$self->Id);
@@ -302,7 +307,7 @@ textual part (as defined in RT::I18N::IsTextualContentType). Otherwise,
returns undef.
Takes a paramhash. If the $args{'Quote'} parameter is set, wraps this message
-at $args{'Wrap'}. $args{'Wrap'} defaults to 70.
+at $args{'Wrap'}. $args{'Wrap'} defaults to $RT::MessageBoxWidth - 2 or 70.
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
@@ -318,6 +323,7 @@ sub Content {
Type => $PreferredContentType || '',
Quote => 0,
Wrap => 70,
+ Wrap => ( $RT::MessageBoxWidth || 72 ) - 2,
@_
);
@@ -364,7 +370,7 @@ sub Content {
$max = length if length > $max;
}
- if ( $max > 76 ) {
+ if ( $max > $args{'Wrap'}+6 ) { # 76 ) {
require Text::Wrapper;
my $wrapper = new Text::Wrapper(
columns => $args{'Wrap'},
@@ -1162,6 +1168,7 @@ sub UpdateCustomFields {
unless ( $arg =~
/^(?:Object-RT::Transaction--)?CustomField-(\d+)/ );
next if $arg =~ /-Magic$/;
+ next if $arg =~ /-TimeUnits$/;
my $cfid = $1;
my $values = $args->{$arg};
foreach
diff --git a/rt/lib/RT/Transactions.pm b/rt/lib/RT/Transactions.pm
index 0b977c623..23a475ac6 100755
--- a/rt/lib/RT/Transactions.pm
+++ b/rt/lib/RT/Transactions.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::Transaction item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::Transaction->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Transactions_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Transactions_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Transactions_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Transactions_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Transactions_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Transactions_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/URI/freeside.pm b/rt/lib/RT/URI/freeside.pm
new file mode 100644
index 000000000..33845dda6
--- /dev/null
+++ b/rt/lib/RT/URI/freeside.pm
@@ -0,0 +1,331 @@
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com>
+# Based on the original RT::URI::base and RT::URI::fsck_com_rt.
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Unless otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
+package RT::URI::freeside;
+
+use base qw( RT::URI::base );
+use strict;
+use vars qw( $IntegrationType $URL );
+use Carp qw( cluck );
+
+
+=head1 NAME
+
+RT::URI::freeside
+
+=head1 DESCRIPTION
+
+URI handler for Freeside URIs. See http://www.freeside.biz/ for more
+information on Freeside.
+
+
+=head1 Public subroutines
+
+=over 4
+
+=item FreesideGetConfig CONFKEY
+
+Subroutine that returns the freeside's configuration value(s) for CONFKEY
+as a scalar or list.
+
+=cut
+
+sub FreesideGetConfig { return undef; }
+
+
+=item FreesideURL
+
+Returns the URL for freeside's web interface.
+
+=cut
+
+sub FreesideURL { return $URL; }
+
+
+=item FreesideVersion
+
+Returns a string describing the freeside version being used.
+
+=cut
+
+sub FreesideVersion { return undef; }
+
+
+=item smart_search
+
+A wrapper for the FS::cust_main::smart_search subroutine.
+
+=cut
+
+sub smart_search { return undef; }
+
+
+=item email_search
+
+A wrapper for the FS::cust_main::email_search subroutine.
+
+=cut
+
+sub email_search { return undef; }
+
+
+=item small_custview
+
+A wrapper for the FS::CGI::small_custview subroutine.
+
+=cut
+
+sub small_custview { return 'Freeside integration error!</A>'; }
+
+
+=back
+
+=head1 Private methods
+
+=over 4
+
+=item _FreesideGetRecord
+
+Method returns a hashref of the freeside record referenced in the URI.
+Must be called after ParseURI.
+
+=cut
+
+sub _FreesideGetRecord { return undef; }
+
+
+=item _FreesideURIPrefix
+
+Method that returns the URI prefix for freeside URIs.
+
+=cut
+
+sub _FreesideURIPrefix {
+
+ my $self = shift;
+ return($self->Scheme . '://freeside');
+
+}
+
+=item _FreesideURILabel
+
+Method that returns a short string describing the customer referenced
+in the URI.
+
+=cut
+
+sub _FreesideURILabel {
+
+ my $self = shift;
+
+ #$RT::Logger->debug("Called _FreesideURILabel()");
+
+ return unless (exists($self->{'fstable'}) and
+ exists($self->{'fspkey'}));
+
+ my $label;
+ my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
+
+ #if ($table ne 'cust_main') {
+ # warn "FS::${table} not currently supported";
+ # return;
+ #}
+
+ my $rec = $self->_FreesideGetRecord();
+
+ if (ref($rec) eq 'HASH' && $table eq 'cust_main') {
+ my $name = $rec->{'last'} . ', ' . $rec->{'first'};
+ $name = $rec->{'company'} . " ($name)" if $rec->{'company'};
+ $label = "$pkey: $name";
+ } elsif ( $table eq 'cust_svc' && ref($rec) && $rec->{'_object'} ) {
+ #Internal only
+ my($l,$v) = $rec->{'_object'}->label;
+ $label = "$l: $v";
+ } else {
+ $label = "$pkey: $table";
+ }
+
+ if ($label and !$@) {
+ return($label);
+ } else {
+ return;
+ }
+
+}
+
+=item _FreesideURILabelLong
+
+Method that returns a longer string describing the customer referenced
+in the URI.
+
+=cut
+
+sub _FreesideURILabelLong {
+
+ my $self = shift;
+
+ return $self->_FreesideURILabel();
+
+}
+
+=back
+
+=head1 Public methods
+
+=over 4
+
+=cut
+
+sub ParseURI {
+ my $self = shift;
+ my $uri = shift;
+ my ($table, $pkey);
+
+ my $uriprefix = $self->_FreesideURIPrefix;
+ if ($uri =~ /^$uriprefix\/(\w+)\/(\d*)$/) {
+
+ $table = $1;
+ $pkey = $2;
+
+ unless ( $pkey ) {
+ #way too noisy, using this prefix is normal usage# cluck "bad URL $uri";
+ return(undef);
+ }
+
+ $self->{'scheme'} = $self->Scheme;
+
+ } else {
+ return(undef);
+ }
+
+ $self->{'uri'} = "${uriprefix}/${table}/${pkey}";
+ $self->{'fstable'} = $table;
+ $self->{'fspkey'} = $pkey;
+
+
+ my $url = $self->FreesideURL();
+
+ if ($url ne '') {
+ $self->{'href'} = "${url}/view/${table}.cgi?${pkey}";
+ } else {
+ $self->{'href'} = $self->{'uri'};
+ }
+
+ $self->{'uri'};
+
+}
+
+sub Scheme {
+ my $self = shift;
+ return('freeside');
+
+}
+
+sub HREF {
+ my $self = shift;
+ return($self->{'href'} || $self->{'uri'});
+}
+
+sub IsLocal {
+ my $self = shift;
+ return undef;
+}
+
+=item AsString
+
+Return a "pretty" string representing the URI object.
+
+This is meant to be used like this:
+
+ % $re = $uri->Resolver;
+ <A HREF="<% $re->HREF %>"><% $re->AsString %></A>
+
+=cut
+
+sub AsString {
+ my $self = shift;
+ my $prettystring;
+ if ($prettystring = $self->_FreesideURILabel) {
+ return $prettystring;
+ } else {
+ return $self->URI;
+ }
+}
+
+=item AsStringLong
+
+Return a longer (HTML) string representing the URI object.
+
+=cut
+
+sub AsStringLong {
+ my $self = shift;
+ my $prettystring;
+ if ($prettystring = $self->_FreesideURILabelLong || $self->_FreesideURILabel){
+ return $prettystring;
+ } else {
+ return $self->URI;
+ }
+}
+
+$IntegrationType ||= 'Internal';
+eval "require RT::URI::freeside::${RT::URI::freeside::IntegrationType}";
+warn $@ if $@;
+if ($@ &&
+ $@ !~ qr(^Can't locate RT/URI/freeside/${RT::URI::freeside::IntegrationType}.pm)) {
+ die $@;
+};
+
+=item AgentName
+
+Return the name of the customer's agent.
+
+=cut
+
+sub AgentName { undef }
+
+=item CustomerClass
+
+Return the name of the customer's class.
+
+=cut
+
+sub CustomerClass { undef }
+
+=item CustomerTags
+
+Return the list of tags attached to the customer. Each tag is returned
+as a hashref with keys "name", "desc", and "color".
+
+=cut
+
+sub CustomerTags { ( ) }
+
+=back
+
+=cut
+
+1;
diff --git a/rt/lib/RT/URI/freeside/Internal.pm b/rt/lib/RT/URI/freeside/Internal.pm
new file mode 100644
index 000000000..6d3adc2ef
--- /dev/null
+++ b/rt/lib/RT/URI/freeside/Internal.pm
@@ -0,0 +1,170 @@
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com>
+# Based on the original RT::URI::base and RT::URI::fsck_com_rt.
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Unless otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
+#
+use strict;
+no warnings qw(redefine);
+
+#use vars qw($conf);
+
+use FS;
+use FS::UID qw(dbh);
+use FS::CGI qw(popurl);
+use FS::UI::Web::small_custview qw(small_custview);
+use FS::Conf;
+use FS::Record qw(qsearchs qsearch dbdef);
+use FS::cust_main;
+use FS::cust_svc;
+
+=head1 NAME
+
+RT::URI::freeside::Internal
+
+=head1 DESCRIPTION
+
+Overlay for the RT::URI::freeside URI handler implementing the Internal integration type.
+
+See L<RT::URI::freeside> for public/private interface documentation.
+
+=cut
+
+
+
+sub _FreesideGetRecord {
+
+ my $self = shift;
+ my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
+
+ $RT::Logger->debug("Called _FreesideGetRecord()");
+
+ #eval "use FS::$table;";
+
+ my $dbdef = dbdef;
+ unless ($dbdef) {
+ $RT::Logger->error("Using Internal freeside integration type, ".
+ "but it doesn't look like we're running under ".
+ "freeside's Mason handler.");
+ return;
+ }
+
+ my $pkeyfield = $dbdef->table($table)->primary_key;
+ unless ($pkeyfield) {
+ $RT::Logger->error("No primary key for freeside table '$table'");
+ return;
+ }
+
+ my $fsrec = qsearchs($table, { $pkeyfield => $pkey });
+ unless ($fsrec) {
+ $RT::Logger->error("Record with '$pkeyfield' == '$pkey' does " .
+ "not exist in table $table");
+ return;
+ }
+
+ return { $fsrec->hash, '_object' => $fsrec };
+
+}
+
+sub FreesideVersion {
+
+ return $FS::VERSION;
+
+}
+
+sub FreesideGetConfig {
+
+ #$conf = new FS::Conf unless ref($conf);
+ my $conf = new FS::Conf;
+
+ return scalar($conf->config(@_));
+
+}
+
+sub smart_search { #Subroutine
+
+ return map { { $_->hash } } &FS::cust_main::Search::smart_search(@_);
+
+}
+
+sub email_search { #Subroutine
+
+ return map { { $_->hash } } &FS::cust_main::Search::email_search(@_);
+
+}
+
+sub small_custview {
+
+ return &FS::UI::Web::small_custview::small_custview(@_);
+
+}
+
+sub _FreesideURILabelLong {
+
+ my $self = shift;
+
+ my $table = $self->{'fstable'};
+
+ if ( $table eq 'cust_main' ) {
+
+ my $rec = $self->_FreesideGetRecord();
+ return small_custview( $rec->{'_object'},
+ scalar(FS::Conf->new->config('countrydefault')),
+ 1 #nobalance
+ );
+
+ } else {
+
+ return $self->_FreesideURILabel();
+
+ }
+
+}
+
+sub AgentName {
+ my $self = shift;
+ my $rec = $self->_FreesideGetRecord() or return;
+ my $agent = $rec->{'_object'}->agent or return;
+ return $agent->agentnum . ': ' . $agent->agent;
+}
+
+sub CustomerClass {
+ my $self = shift;
+ my $rec = $self->_FreesideGetRecord() or return;
+ my $cust_class = $rec->{'_object'}->cust_class or return;
+ return $cust_class->classname;
+}
+
+sub CustomerTags {
+ my $self = shift;
+ my $rec = $self->_FreesideGetRecord() or return;
+ my @part_tag = $rec->{'_object'}->part_tag;
+ return map {
+ { 'name' => $_->tagname,
+ 'desc' => $_->tagdesc,
+ 'color' => $_->tagcolor }
+ } @part_tag;
+}
+
+1;
diff --git a/rt/lib/RT/URI/freeside/XMLRPC.pm b/rt/lib/RT/URI/freeside/XMLRPC.pm
new file mode 100644
index 000000000..916c20d7b
--- /dev/null
+++ b/rt/lib/RT/URI/freeside/XMLRPC.pm
@@ -0,0 +1,122 @@
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com>
+# Based on the original RT::URI::base and RT::URI::fsck_com_rt.
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Unless otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
+
+use strict;
+no warnings qw(redefine);
+
+use vars qw($XMLRPC_URL $_FS_VERSION);
+
+use Frontier::Client;
+
+=head1 NAME
+
+RT::URI::freeside::XMLRPC
+
+=head1 DESCRIPTION
+
+Overlay for the RT::URI::freeside URI handler implementing the XMLRPC integration type.
+
+See L<RT::URI::freeside> for public/private interface documentation.
+
+=cut
+
+
+sub _XMLRPCRequest { #Subroutine
+
+ my $method = shift;
+ my @args = @_;
+
+ my $result;
+ eval {
+ my $server = new Frontier::Client ( url => $XMLRPC_URL );
+ $result = $server->call($method, @args);
+ };
+
+ if (not $@ and ref($result) eq 'ARRAY') {
+ return (scalar(@$result) == 1) ? @$result[0] : @$result;
+ } else {
+ $RT::Logger->debug("Freeside XMLRPC: " . $result || $@);
+ return ();
+ }
+
+}
+
+sub _FreesideGetRecord {
+
+ my $self = shift;
+ my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
+ my $record;
+
+ $RT::Logger->debug("Called XMLRPC::_FreesideGetRecord()");
+
+ #FIXME: Need a better way to get primary keys.
+ # Maybe create a method for it and cache them like version?
+ my %table_pkeys = (
+ cust_main => 'custnum',
+ );
+
+ my $method = 'Record.qsearchs';
+ my @args = ($table, { $table_pkeys{$table} => $pkey });
+ my ($record) = &_XMLRPCRequest($method, @args);
+
+ return $record;
+
+}
+
+
+sub FreesideGetConfig {
+
+ return _XMLRPCRequest('Conf.config', @_);
+
+}
+
+
+sub FreesideVersion {
+
+ return $_FS_VERSION if ($_FS_VERSION =~ /^\d+\.\d+\.\d+/);
+
+ $RT::Logger->debug("Requesting freeside version...");
+ ($_FS_VERSION) = &_XMLRPCRequest('version');
+ $RT::Logger->debug("Cached freeside version: ${_FS_VERSION}");
+
+ return $_FS_VERSION;
+
+}
+
+sub smart_search { #Subroutine
+
+ return _XMLRPCRequest('cust_main.smart_search', @_);
+
+}
+
+sub small_custview {
+
+ return _XMLRPCRequest('Web.UI.small_custview.small_custview', @_);
+
+}
+
+1;
diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm
index b7ebd5bf2..cbc10f5b4 100755
--- a/rt/lib/RT/User.pm
+++ b/rt/lib/RT/User.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -86,7 +61,7 @@ sub _Init {
-=head2 Create PARAMHASH
+=item Create PARAMHASH
Create takes a hash of values and creates a row in the database:
@@ -195,7 +170,7 @@ sub Create {
-=head2 id
+=item id
Returns the current value of id.
(In the database, id is stored as int(11).)
@@ -204,14 +179,14 @@ Returns the current value of id.
=cut
-=head2 Name
+=item Name
Returns the current value of Name.
(In the database, Name is stored as varchar(200).)
-=head2 SetName VALUE
+=item SetName VALUE
Set Name to VALUE.
@@ -222,14 +197,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Password
+=item Password
Returns the current value of Password.
(In the database, Password is stored as varchar(40).)
-=head2 SetPassword VALUE
+=item SetPassword VALUE
Set Password to VALUE.
@@ -240,14 +215,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Comments
+=item Comments
Returns the current value of Comments.
(In the database, Comments is stored as blob.)
-=head2 SetComments VALUE
+=item SetComments VALUE
Set Comments to VALUE.
@@ -258,14 +233,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Signature
+=item Signature
Returns the current value of Signature.
(In the database, Signature is stored as blob.)
-=head2 SetSignature VALUE
+=item SetSignature VALUE
Set Signature to VALUE.
@@ -276,14 +251,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 EmailAddress
+=item EmailAddress
Returns the current value of EmailAddress.
(In the database, EmailAddress is stored as varchar(120).)
-=head2 SetEmailAddress VALUE
+=item SetEmailAddress VALUE
Set EmailAddress to VALUE.
@@ -294,14 +269,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 FreeformContactInfo
+=item FreeformContactInfo
Returns the current value of FreeformContactInfo.
(In the database, FreeformContactInfo is stored as blob.)
-=head2 SetFreeformContactInfo VALUE
+=item SetFreeformContactInfo VALUE
Set FreeformContactInfo to VALUE.
@@ -312,14 +287,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Organization
+=item Organization
Returns the current value of Organization.
(In the database, Organization is stored as varchar(200).)
-=head2 SetOrganization VALUE
+=item SetOrganization VALUE
Set Organization to VALUE.
@@ -330,14 +305,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 RealName
+=item RealName
Returns the current value of RealName.
(In the database, RealName is stored as varchar(120).)
-=head2 SetRealName VALUE
+=item SetRealName VALUE
Set RealName to VALUE.
@@ -348,14 +323,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 NickName
+=item NickName
Returns the current value of NickName.
(In the database, NickName is stored as varchar(16).)
-=head2 SetNickName VALUE
+=item SetNickName VALUE
Set NickName to VALUE.
@@ -366,14 +341,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Lang
+=item Lang
Returns the current value of Lang.
(In the database, Lang is stored as varchar(16).)
-=head2 SetLang VALUE
+=item SetLang VALUE
Set Lang to VALUE.
@@ -384,14 +359,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 EmailEncoding
+=item EmailEncoding
Returns the current value of EmailEncoding.
(In the database, EmailEncoding is stored as varchar(16).)
-=head2 SetEmailEncoding VALUE
+=item SetEmailEncoding VALUE
Set EmailEncoding to VALUE.
@@ -402,14 +377,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 WebEncoding
+=item WebEncoding
Returns the current value of WebEncoding.
(In the database, WebEncoding is stored as varchar(16).)
-=head2 SetWebEncoding VALUE
+=item SetWebEncoding VALUE
Set WebEncoding to VALUE.
@@ -420,14 +395,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ExternalContactInfoId
+=item ExternalContactInfoId
Returns the current value of ExternalContactInfoId.
(In the database, ExternalContactInfoId is stored as varchar(100).)
-=head2 SetExternalContactInfoId VALUE
+=item SetExternalContactInfoId VALUE
Set ExternalContactInfoId to VALUE.
@@ -438,14 +413,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ContactInfoSystem
+=item ContactInfoSystem
Returns the current value of ContactInfoSystem.
(In the database, ContactInfoSystem is stored as varchar(30).)
-=head2 SetContactInfoSystem VALUE
+=item SetContactInfoSystem VALUE
Set ContactInfoSystem to VALUE.
@@ -456,14 +431,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 ExternalAuthId
+=item ExternalAuthId
Returns the current value of ExternalAuthId.
(In the database, ExternalAuthId is stored as varchar(100).)
-=head2 SetExternalAuthId VALUE
+=item SetExternalAuthId VALUE
Set ExternalAuthId to VALUE.
@@ -474,14 +449,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 AuthSystem
+=item AuthSystem
Returns the current value of AuthSystem.
(In the database, AuthSystem is stored as varchar(30).)
-=head2 SetAuthSystem VALUE
+=item SetAuthSystem VALUE
Set AuthSystem to VALUE.
@@ -492,14 +467,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Gecos
+=item Gecos
Returns the current value of Gecos.
(In the database, Gecos is stored as varchar(16).)
-=head2 SetGecos VALUE
+=item SetGecos VALUE
Set Gecos to VALUE.
@@ -510,14 +485,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 HomePhone
+=item HomePhone
Returns the current value of HomePhone.
(In the database, HomePhone is stored as varchar(30).)
-=head2 SetHomePhone VALUE
+=item SetHomePhone VALUE
Set HomePhone to VALUE.
@@ -528,14 +503,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 WorkPhone
+=item WorkPhone
Returns the current value of WorkPhone.
(In the database, WorkPhone is stored as varchar(30).)
-=head2 SetWorkPhone VALUE
+=item SetWorkPhone VALUE
Set WorkPhone to VALUE.
@@ -546,14 +521,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 MobilePhone
+=item MobilePhone
Returns the current value of MobilePhone.
(In the database, MobilePhone is stored as varchar(30).)
-=head2 SetMobilePhone VALUE
+=item SetMobilePhone VALUE
Set MobilePhone to VALUE.
@@ -564,14 +539,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 PagerPhone
+=item PagerPhone
Returns the current value of PagerPhone.
(In the database, PagerPhone is stored as varchar(30).)
-=head2 SetPagerPhone VALUE
+=item SetPagerPhone VALUE
Set PagerPhone to VALUE.
@@ -582,14 +557,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Address1
+=item Address1
Returns the current value of Address1.
(In the database, Address1 is stored as varchar(200).)
-=head2 SetAddress1 VALUE
+=item SetAddress1 VALUE
Set Address1 to VALUE.
@@ -600,14 +575,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Address2
+=item Address2
Returns the current value of Address2.
(In the database, Address2 is stored as varchar(200).)
-=head2 SetAddress2 VALUE
+=item SetAddress2 VALUE
Set Address2 to VALUE.
@@ -618,14 +593,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 City
+=item City
Returns the current value of City.
(In the database, City is stored as varchar(100).)
-=head2 SetCity VALUE
+=item SetCity VALUE
Set City to VALUE.
@@ -636,14 +611,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 State
+=item State
Returns the current value of State.
(In the database, State is stored as varchar(100).)
-=head2 SetState VALUE
+=item SetState VALUE
Set State to VALUE.
@@ -654,14 +629,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Zip
+=item Zip
Returns the current value of Zip.
(In the database, Zip is stored as varchar(16).)
-=head2 SetZip VALUE
+=item SetZip VALUE
Set Zip to VALUE.
@@ -672,14 +647,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Country
+=item Country
Returns the current value of Country.
(In the database, Country is stored as varchar(50).)
-=head2 SetCountry VALUE
+=item SetCountry VALUE
Set Country to VALUE.
@@ -690,14 +665,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Timezone
+=item Timezone
Returns the current value of Timezone.
(In the database, Timezone is stored as varchar(50).)
-=head2 SetTimezone VALUE
+=item SetTimezone VALUE
Set Timezone to VALUE.
@@ -708,14 +683,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 PGPKey
+=item PGPKey
Returns the current value of PGPKey.
(In the database, PGPKey is stored as text.)
-=head2 SetPGPKey VALUE
+=item SetPGPKey VALUE
Set PGPKey to VALUE.
@@ -726,7 +701,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
=cut
-=head2 Creator
+=item Creator
Returns the current value of Creator.
(In the database, Creator is stored as int(11).)
@@ -735,7 +710,7 @@ Returns the current value of Creator.
=cut
-=head2 Created
+=item Created
Returns the current value of Created.
(In the database, Created is stored as datetime.)
@@ -744,7 +719,7 @@ Returns the current value of Created.
=cut
-=head2 LastUpdatedBy
+=item LastUpdatedBy
Returns the current value of LastUpdatedBy.
(In the database, LastUpdatedBy is stored as int(11).)
@@ -753,7 +728,7 @@ Returns the current value of LastUpdatedBy.
=cut
-=head2 LastUpdated
+=item LastUpdated
Returns the current value of LastUpdated.
(In the database, LastUpdated is stored as datetime.)
@@ -763,82 +738,99 @@ Returns the current value of LastUpdated.
-sub _CoreAccessible {
+sub _ClassAccessible {
{
id =>
- {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''},
+ {read => 1, type => 'int(11)', default => ''},
Name =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Password =>
- {read => 1, write => 1, sql_type => 12, length => 40, is_blob => 0, is_numeric => 0, type => 'varchar(40)', default => ''},
+ {read => 1, write => 1, type => 'varchar(40)', default => ''},
Comments =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''},
+ {read => 1, write => 1, type => 'blob', default => ''},
Signature =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''},
+ {read => 1, write => 1, type => 'blob', default => ''},
EmailAddress =>
- {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''},
+ {read => 1, write => 1, type => 'varchar(120)', default => ''},
FreeformContactInfo =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''},
+ {read => 1, write => 1, type => 'blob', default => ''},
Organization =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
RealName =>
- {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''},
+ {read => 1, write => 1, type => 'varchar(120)', default => ''},
NickName =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
Lang =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
EmailEncoding =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
WebEncoding =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
ExternalContactInfoId =>
- {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''},
+ {read => 1, write => 1, type => 'varchar(100)', default => ''},
ContactInfoSystem =>
- {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''},
+ {read => 1, write => 1, type => 'varchar(30)', default => ''},
ExternalAuthId =>
- {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''},
+ {read => 1, write => 1, type => 'varchar(100)', default => ''},
AuthSystem =>
- {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''},
+ {read => 1, write => 1, type => 'varchar(30)', default => ''},
Gecos =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
HomePhone =>
- {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''},
+ {read => 1, write => 1, type => 'varchar(30)', default => ''},
WorkPhone =>
- {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''},
+ {read => 1, write => 1, type => 'varchar(30)', default => ''},
MobilePhone =>
- {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''},
+ {read => 1, write => 1, type => 'varchar(30)', default => ''},
PagerPhone =>
- {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''},
+ {read => 1, write => 1, type => 'varchar(30)', default => ''},
Address1 =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
Address2 =>
- {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''},
+ {read => 1, write => 1, type => 'varchar(200)', default => ''},
City =>
- {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''},
+ {read => 1, write => 1, type => 'varchar(100)', default => ''},
State =>
- {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''},
+ {read => 1, write => 1, type => 'varchar(100)', default => ''},
Zip =>
- {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''},
+ {read => 1, write => 1, type => 'varchar(16)', default => ''},
Country =>
- {read => 1, write => 1, sql_type => 12, length => 50, is_blob => 0, is_numeric => 0, type => 'varchar(50)', default => ''},
+ {read => 1, write => 1, type => 'varchar(50)', default => ''},
Timezone =>
- {read => 1, write => 1, sql_type => 12, length => 50, is_blob => 0, is_numeric => 0, type => 'varchar(50)', default => ''},
+ {read => 1, write => 1, type => 'varchar(50)', default => ''},
PGPKey =>
- {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''},
+ {read => 1, write => 1, type => 'text', 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, 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, 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, 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, type => 'datetime', default => ''},
}
};
-RT::Base->_ImportOverlays();
+
+ eval "require RT::User_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/User_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::User_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/User_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::User_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/User_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -848,7 +840,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/User_Overlay.pm b/rt/lib/RT/User_Overlay.pm
index b86a92490..17e9645de 100644
--- a/rt/lib/RT/User_Overlay.pm
+++ b/rt/lib/RT/User_Overlay.pm
@@ -1349,6 +1349,268 @@ sub OwnGroups {
return $groups;
}
+# }}}
+
+# {{{ Links
+
+#much false laziness w/Ticket_Overlay.pm. now with RT 3.8!
+
+# A helper table for links mapping to make it easier
+# to build and parse links between tickets
+
+use vars '%LINKDIRMAP';
+
+%LINKDIRMAP = (
+ MemberOf => { Base => 'MemberOf',
+ Target => 'HasMember', },
+ RefersTo => { Base => 'RefersTo',
+ Target => 'ReferredToBy', },
+ DependsOn => { Base => 'DependsOn',
+ Target => 'DependedOnBy', },
+ MergedInto => { Base => 'MergedInto',
+ Target => 'MergedInto', },
+
+);
+
+sub LINKDIRMAP { return \%LINKDIRMAP }
+
+#sub _Links {
+# my $self = shift;
+#
+# #TODO: Field isn't the right thing here. but I ahave no idea what mnemonic ---
+# #tobias meant by $f
+# my $field = shift;
+# my $type = shift || "";
+#
+# unless ( $self->{"$field$type"} ) {
+# $self->{"$field$type"} = new RT::Links( $self->CurrentUser );
+# if ( $self->CurrentUserHasRight('ShowTicket') ) {
+# # Maybe this ticket is a merged ticket
+# my $Tickets = new RT::Tickets( $self->CurrentUser );
+# # at least to myself
+# $self->{"$field$type"}->Limit( FIELD => $field,
+# VALUE => $self->URI,
+# ENTRYAGGREGATOR => 'OR' );
+# $Tickets->Limit( FIELD => 'EffectiveId',
+# VALUE => $self->EffectiveId );
+# while (my $Ticket = $Tickets->Next) {
+# $self->{"$field$type"}->Limit( FIELD => $field,
+# VALUE => $Ticket->URI,
+# ENTRYAGGREGATOR => 'OR' );
+# }
+# $self->{"$field$type"}->Limit( FIELD => 'Type',
+# VALUE => $type )
+# if ($type);
+# }
+# }
+# return ( $self->{"$field$type"} );
+#}
+
+=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
+
+=cut
+
+sub DeleteLink {
+ my $self = shift;
+ my %args = (
+ Base => undef,
+ Target => undef,
+ Type => undef,
+ @_
+ );
+
+ unless ( $args{'Target'} || $args{'Base'} ) {
+ $RT::Logger->error("Base or Target must be specified\n");
+ return ( 0, $self->loc('Either base or target must be specified') );
+ }
+
+ #check acls
+ my $right = 0;
+ $right++ if $self->CurrentUserHasRight('AdminUsers');
+ if ( !$right && $RT::StrictLinkACL ) {
+ return ( 0, $self->loc("Permission Denied") );
+ }
+
+# # If the other URI is an RT::Ticket, we want to make sure the user
+# # can modify it too...
+# my ($status, $msg, $other_ticket) = $self->__GetTicketFromURI( URI => $args{'Target'} || $args{'Base'} );
+# return (0, $msg) unless $status;
+# if ( !$other_ticket || $other_ticket->CurrentUserHasRight('ModifyTicket') ) {
+# $right++;
+# }
+# if ( ( !$RT::StrictLinkACL && $right == 0 ) ||
+# ( $RT::StrictLinkACL && $right < 2 ) )
+# {
+# return ( 0, $self->loc("Permission Denied") );
+# }
+
+ my ($val, $Msg) = $self->SUPER::_DeleteLink(%args);
+
+ if ( !$val ) {
+ $RT::Logger->debug("Couldn't find that link\n");
+ return ( 0, $Msg );
+ }
+
+ my ($direction, $remote_link);
+
+ if ( $args{'Base'} ) {
+ $remote_link = $args{'Base'};
+ $direction = 'Target';
+ }
+ elsif ( $args{'Target'} ) {
+ $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 ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction(
+ Type => 'DeleteLink',
+ 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 );
+ }
+}
+
+sub AddLink {
+ my $self = shift;
+ my %args = ( Target => '',
+ Base => '',
+ Type => '',
+ Silent => undef,
+ @_ );
+
+ unless ( $args{'Target'} || $args{'Base'} ) {
+ $RT::Logger->error("Base or Target must be specified\n");
+ return ( 0, $self->loc('Either base or target must be specified') );
+ }
+
+ my $right = 0;
+ $right++ if $self->CurrentUserHasRight('AdminUsers');
+ if ( !$right && $RT::StrictLinkACL ) {
+ return ( 0, $self->loc("Permission Denied") );
+ }
+
+# # If the other URI is an RT::Ticket, we want to make sure the user
+# # can modify it too...
+# my ($status, $msg, $other_ticket) = $self->__GetTicketFromURI( URI => $args{'Target'} || $args{'Base'} );
+# return (0, $msg) unless $status;
+# if ( !$other_ticket || $other_ticket->CurrentUserHasRight('ModifyTicket') ) {
+# $right++;
+# }
+# if ( ( !$RT::StrictLinkACL && $right == 0 ) ||
+# ( $RT::StrictLinkACL && $right < 2 ) )
+# {
+# return ( 0, $self->loc("Permission Denied") );
+# }
+
+ return $self->_AddLink(%args);
+}
+
+#sub __GetTicketFromURI {
+# my $self = shift;
+# my %args = ( URI => '', @_ );
+#
+# # If the other URI is an RT::Ticket, we want to make sure the user
+# # can modify it too...
+# my $uri_obj = RT::URI->new( $self->CurrentUser );
+# $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" );
+# return( 0, $msg );
+# }
+# my $obj = $uri_obj->Resolver->Object;
+# unless ( UNIVERSAL::isa($obj, 'RT::Ticket') && $obj->id ) {
+# return (1, 'Found not a ticket', undef);
+# }
+# return (1, 'Found ticket', $obj);
+#}
+
+=head2 _AddLink
+
+Private non-acled variant of AddLink so that links can be added during create.
+
+=cut
+
+sub _AddLink {
+ my $self = shift;
+ my %args = ( Target => '',
+ Base => '',
+ Type => '',
+ Silent => undef,
+ @_ );
+
+ my ($val, $msg, $exist) = $self->SUPER::_AddLink(%args);
+ return ($val, $msg) if !$val || $exist;
+
+ my ($direction, $remote_link);
+ if ( $args{'Target'} ) {
+ $remote_link = $args{'Target'};
+ $direction = 'Base';
+ } elsif ( $args{'Base'} ) {
+ $remote_link = $args{'Base'};
+ $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 );
+ }
+
+}
+
+
+
+# }}}
+
=head2 HasRight
Shim around PrincipalObj->HasRight. See L<RT::Principal>.
@@ -1545,7 +1807,7 @@ sub WatchedQueues {
}
-=head2 CleanupInvalidDelegations { InsideTransaction => undef }
+=head2 _CleanupInvalidDelegations { InsideTransaction => undef }
Revokes all ACE entries delegated by this user which are inconsistent
with their current delegation rights. Does not perform permission
@@ -1559,15 +1821,12 @@ and logs an internal error if the deletion fails (should not happen).
=cut
-# XXX Currently there is a CleanupInvalidDelegations method in both
+# XXX Currently there is a _CleanupInvalidDelegations method in both
# RT::User and RT::Group. If the recursive cleanup call for groups is
# ever unrolled and merged, this code will probably want to be
# factored out into RT::Principal.
-# backcompat for 3.8.8 and before
-*_CleanupInvalidDelegations = \&CleanupInvalidDelegations;
-
-sub CleanupInvalidDelegations {
+sub _CleanupInvalidDelegations {
my $self = shift;
my %args = ( InsideTransaction => undef,
@_ );
diff --git a/rt/lib/RT/Users.pm b/rt/lib/RT/Users.pm
index f0f07fde7..d58f69653 100755
--- a/rt/lib/RT/Users.pm
+++ b/rt/lib/RT/Users.pm
@@ -1,51 +1,26 @@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
+# BEGIN LICENSE BLOCK
+#
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+#
+# (Except where explictly superceded by other copyright notices)
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license 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 otherwise specified, all modifications, corrections or
+# extensions to this work which alter its source code become the
+# property of Best Practical Solutions, LLC when submitted for
+# inclusion in the work.
+#
+#
+# END LICENSE BLOCK
# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>)
# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST.
#
@@ -89,7 +64,7 @@ sub _Init {
}
-=head2 NewItem
+=item NewItem
Returns an empty new RT::User item
@@ -99,7 +74,24 @@ sub NewItem {
my $self = shift;
return(RT::User->new($self->CurrentUser));
}
-RT::Base->_ImportOverlays();
+
+ eval "require RT::Users_Overlay";
+ if ($@ && $@ !~ qr{^Can't locate RT/Users_Overlay.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Users_Vendor";
+ if ($@ && $@ !~ qr{^Can't locate RT/Users_Vendor.pm}) {
+ die $@;
+ };
+
+ eval "require RT::Users_Local";
+ if ($@ && $@ !~ qr{^Can't locate RT/Users_Local.pm}) {
+ die $@;
+ };
+
+
+
=head1 SEE ALSO
@@ -109,7 +101,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz
These overlay files can contain new subs or subs to replace existing subs in this module.
-Each of these files should begin with the line
+If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line
no warnings qw(redefine);
diff --git a/rt/lib/RT/Users_Overlay.pm b/rt/lib/RT/Users_Overlay.pm
index 96409251f..4d03b6056 100644
--- a/rt/lib/RT/Users_Overlay.pm
+++ b/rt/lib/RT/Users_Overlay.pm
@@ -379,6 +379,7 @@ sub WhoHaveRight {
$from_group->WhoHaveGroupRight( %args );
#XXX: DIRTY HACK
+ use DBIx::SearchBuilder 1.50; #no version on ::Union :(
use DBIx::SearchBuilder::Union;
my $union = new DBIx::SearchBuilder::Union;
$union->add( $from_group );
@@ -405,12 +406,6 @@ sub WhoHaveRoleRight
);
my @objects = $self->_GetEquivObjects( %args );
-
- # RT::Principal->RolesWithRight only expects EquivObjects, so we need to
- # fill it. At the very least it needs $args{Object}, which
- # _GetEquivObjects above does for us.
- unshift @{$args{'EquivObjects'}}, @objects;
-
my @roles = RT::Principal->RolesWithRight( %args );
unless ( @roles ) {
$self->_AddSubClause( "WhichRole", "(main.id = 0)" );
diff --git a/rt/lib/RTx/Calendar.pm b/rt/lib/RTx/Calendar.pm
new file mode 100644
index 000000000..20568e853
--- /dev/null
+++ b/rt/lib/RTx/Calendar.pm
@@ -0,0 +1,233 @@
+package RTx::Calendar;
+
+use strict;
+use base qw( Exporter );
+use DateTime;
+use DateTime::Set;
+
+our $VERSION = "0.07";
+
+our @EXPORT_OK = qw( FirstDay LastDay );
+
+sub FirstDay {
+ my ($year, $month, $matchday) = @_;
+ my $set = DateTime::Set->from_recurrence(
+ next => sub { $_[0]->truncate( to => 'day' )->subtract( days => 1 ) }
+ );
+
+ my $day = DateTime->new( year => $year, month => $month );
+
+ $day = $set->next($day) while $day->day_of_week != $matchday;
+ $day;
+
+}
+
+sub LastDay {
+ my ($year, $month, $matchday) = @_;
+ my $set = DateTime::Set->from_recurrence(
+ next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
+ );
+
+ my $day = DateTime->last_day_of_month( year => $year, month => $month );
+
+ $day = $set->next($day) while $day->day_of_week != $matchday;
+ $day;
+}
+
+# we can't use RT::Date::Date because it uses gmtime
+# and we need localtime
+sub LocalDate {
+ my $ts = shift;
+ my ($d,$m,$y) = (localtime($ts))[3..5];
+ sprintf "%4d-%02d-%02d", ($y + 1900), ++$m, $d;
+}
+
+sub DatesClauses {
+ my ($Dates, $begin, $end) = @_;
+
+ my $clauses = "";
+
+ my @DateClauses = map {
+ "($_ >= '" . $begin . "' AND $_ <= '" . $end . "')"
+ } @$Dates;
+ $clauses .= " AND " . " ( " . join(" OR ", @DateClauses) . " ) "
+ if @DateClauses;
+
+ return $clauses
+}
+
+sub FindTickets {
+ my ($CurrentUser, $Query, $Dates, $begin, $end) = @_;
+
+ $Query .= DatesClauses($Dates, $begin, $end)
+ if $begin and $end;
+
+ my $Tickets = RT::Tickets->new($CurrentUser);
+ $Tickets->FromSQL($Query);
+
+ my %Tickets;
+ my %AlreadySeen;
+
+ while ( my $Ticket = $Tickets->Next()) {
+
+ # How to find the LastContacted date ?
+ for my $Date (@$Dates) {
+ my $DateObj = $Date . "Obj";
+ push @{ $Tickets{ LocalDate($Ticket->$DateObj->Unix) } }, $Ticket
+ # if reminder, check it's refering to a ticket
+ unless ($Ticket->Type eq 'reminder' and not $Ticket->RefersTo->First)
+ or $AlreadySeen{ LocalDate($Ticket->$DateObj->Unix) }{ $Ticket }++;
+ }
+ }
+ return %Tickets;
+}
+
+#
+# Take a user object and return the search with Description "calendar" if it exists
+#
+sub SearchDefaultCalendar {
+ my $CurrentUser = shift;
+ my $Description = "calendar";
+
+ # I'm quite sure the loop isn't usefull but...
+ my @Objects = $CurrentUser->UserObj;
+ for my $object (@Objects) {
+ next unless ref($object) eq 'RT::User' && $object->id == $CurrentUser->Id;
+ my @searches = $object->Attributes->Named('SavedSearch');
+ for my $search (@searches) {
+ next if ($search->SubValue('SearchType')
+ && $search->SubValue('SearchType') ne 'Ticket');
+
+ return $search
+ if "calendar" eq $search->Description;
+ }
+ }
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+RTx::Calendar - Calendar for RT due tasks
+
+=head1 VERSION
+
+This document describes version 0.07 of RTx::Calendar
+
+=head1 DESCRIPTION
+
+This RT extension provides a calendar view for your tickets and your
+reminders so you see when is your next due ticket. You can find it in
+the menu Search->Calendar.
+
+There's a portlet to put on your home page (see Prefs/MyRT.html)
+
+You can also enable ics (ICal) feeds for your default calendar and all
+your private searches in Prefs/Calendar.html. Authentication is magic
+number based so that you can give those feeds to other people.
+
+You can find screenshots on
+http://gaspard.mine.nu/dotclear/index.php?tag/rtx-calendar
+
+=head1 INSTALLATION
+
+If you upgrade from 0.02, see next part before.
+
+You need to install those three modules :
+
+ * Date::ICal
+ * Data::ICal
+ * DateTime::Set
+
+Install it like a standard perl module
+
+ perl Makefile.PL
+ make
+ make install
+
+If your RT is not in the default path (/opt/rt3) you must set RTHOME
+before doing the Makefile.PL
+
+=head1 CONFIGURATION
+
+=head2 Base configuration
+
+In RT 3.8 and later, to enable calendar plugin, you must add something
+like that in your etc/RT_SiteConfig.pm :
+
+ Set(@Plugins,(qw(RTx::Calendar)));
+
+To use MyCalendar portlet you must add MyCalendar to
+$HomepageComponents in etc/RT_SiteConfig.pm like that :
+
+ Set($HomepageComponents, [qw(QuickCreate Quicksearch MyCalendar
+ MyAdminQueues MySupportQueues MyReminders RefreshHomepage)]);
+
+To enable private searches ICal feeds, you need to give
+CreateSavedSearch and LoadSavedSearch rights to your users.
+
+=head2 Display configuration
+
+You can show the owner in each day box by adding this line to your
+etc/RT_SiteConfig.pm :
+
+ Set($CalendarDisplayOwner, 1);
+
+You can change which fields show up in the popup display when you
+mouse over a date in etc/RT_SiteConfig.pm :
+
+ @CalendarPopupFields = ('Status', 'OwnerObj->Name', 'DueObj->ISO');
+
+=head2 ICAL feed configuration
+
+By default, tickets are todo and reminders event. You can change this
+by setting $RT::ICalTicketType and $RT::ICalReminderType in etc/RT_SiteConfig.pm :
+
+ Set($ICalTicketType, "Data::ICal::Entry::Event");
+ Set($ICalReminderType ,"Data::ICal::Entry::Todo");
+
+=head1 USAGE
+
+A small help section is available in /Prefs/Calendar.html
+
+=head1 UPGRADE FROM 0.02
+
+As I've change directory structure, if you upgrade from 0.02 you need
+to delete old files manually. Go in RTHOME/share/html (by default
+/opt/rt3/share/html) and delete those files :
+
+ rm -rf Callbacks/RTx-Calendar
+ rm Tools/Calendar.html
+
+RTx-Calendar may work without this but it's not very clean.
+
+=head1 BUGS
+
+=over
+
+=item *
+compatible only with RT 3.6 for the moment. If someone need
+compatibility with 3.4 I can work on this. And I will work on 3.7
+compatibility later.
+
+=back
+
+=head1 AUTHORS
+
+Nicolas Chuche E<lt>nchuche@barna.beE<gt>
+
+Idea borrowed from redmine's calendar (Thanks Jean-Philippe).
+
+=head1 COPYRIGHT
+
+Copyright 2007 by Nicolas Chuche E<lt>nchuche@barna.beE<gt>
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff --git a/rt/lib/RTx/Statistics.pm b/rt/lib/RTx/Statistics.pm
new file mode 100755
index 000000000..95cd706c1
--- /dev/null
+++ b/rt/lib/RTx/Statistics.pm
@@ -0,0 +1,240 @@
+package Statistics;
+
+use vars qw(
+$MultiQueueStatus $MultiQueueDateFormat @MultiQueueQueueList $MultiQueueMaxRows $MultiQueueWeekends $MultiQueueLabelDateFormat
+$PerDayStatus $PerDayDateFormat $PerDayQueue $PerDayMaxRows $PerDayWeekends $PerDayLabelDateFormat $PerDayPeriod
+$DayOfWeekQueue
+@OpenStalledQueueList $OpenStalledWeekends
+$TimeToResolveDateFormat $TimeToResolveQueue $TimeToResolveMaxRows $TimeToResolveWeekends $TimeToResolveLabelDateFormat
+$TimeToResolveGraphQueue
+@years @months %monthsMaxDay
+$secsPerDay
+$RestrictAccess
+$GraphWidth $GraphHeight
+);
+
+use Time::Local;
+
+# I couldn't figure out a way to override these in RT_SiteConfig, which would be
+# preferable.
+
+# Width and Height of all graphics
+$GraphWidth=500;
+$GraphHeight=400;
+
+# Initial settings for the CallsMultiQueue stat page
+$MultiQueueStatus = "resolved";
+$MultiQueueDateFormat = "%a %b %d %Y"; # format for dates on Multi Queue report, see "man strftime" for options
+@MultiQueueQueueList = ("General"); # list of queues to start Multi Queue per day reports
+$MultiQueueMaxRows = 10;
+$MultiQueueWeekends = 1;
+$MultiQueueLabelDateFormat = "%a";
+
+# Initial settings for the CallsQueueDay stat page
+$PerDayStatus = "resolved";
+$PerDayDateFormat = "%a %b %d %Y";
+$PerDayQueue = "General";
+$PerDayMaxRows = 10;
+$PerDayWeekends = 1;
+$PerDayLabelDateFormat = "%a";
+$PerDayPeriod = 10;
+
+# Initial settings for the DayOfWeek stat page
+$DayOfWeekQueue = "General";
+
+# Initial settings for the OpenStalled stat page
+@OpenStalledQueueList = ("General");
+$OpenStalledWeekends = 1;
+
+# Initial settings for the TimeToResolve stat page
+$TimeToResolveDateFormat = "%a %b %d";
+$TimeToResolveQueue = "General";
+$TimeToResolveMaxRows = 10;
+$TimeToResolveWeekends = 1;
+$TimeToResolveLabelDateFormat = "%a";
+
+# Initial settings for the TimeToResolve Graph page
+$TimeToResolveGraphQueue = "General";
+
+$secsPerDay = 86400;
+
+# List of years and months to populate drop down lists
+my @lt = localtime;
+@years = reverse( 2002 .. ($lt[5]+1900) );
+@months=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
+%monthsMaxDay = (
+ 0 => 31, # January
+ 1 => 29, # February, allow for leap year
+ 2 => 31, # March
+ 3 => 30, # April
+ 4 => 31, # May
+ 5 => 30, # June
+ 6 => 31, # July
+ 7 => 31, # August
+ 8 => 30, # September
+ 9 => 31, # October
+ 10=> 30, # November
+ 11=> 31 # December
+ );
+
+# Set to one to prevent users without the ShowConfigTab right from seeing Statistics
+$RestrictAccess = 0;
+
+# Variables to control debugging
+my $debugging=0; # set to 1 to enable debugging
+my $debugtext="";
+
+=head2 FormatDate
+
+Returns a string representing the specified date formatted by the specified string
+
+=cut
+sub FormatDate {
+ my $fmt = shift;
+ my $self = shift;
+ return POSIX::strftime($fmt, localtime($self->Unix));
+}
+
+
+=head2 RTDateSetToLocalMidnight
+
+Sets the date to midnight (at the beginning of the day) local time
+Returns the unixtime at midnight.
+
+=cut
+sub RTDateSetToLocalMidnight {
+ my $self = shift;
+
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($self->Unix);
+ $self->Unix(timelocal (0,0,0,$mday,$mon,$year,$wday,$yday));
+
+ return ($self->Unix);
+}
+
+=head2 RTDateIsWeekend
+
+Returns 1 if the date is on saturday or sunday
+
+=cut
+sub RTDateIsWeekend {
+ my $self = shift;
+
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($self->Unix);
+ return 1 if (($wday==6) || ($wday==0));
+ 0;
+}
+
+=head2 RTDateGetDateWeekday
+
+Returns the localized name of the day specified by date
+
+=cut
+sub RTDateGetDateWeekday {
+ my $self = shift;
+
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($self->Unix);
+ return $self->GetWeekday($wday);
+}
+
+=head2 RTDateSubDay
+
+Subtracts 24 hours from the current time
+
+=cut
+
+sub RTDateSubDay {
+ my $self = shift;
+ $self->AddSeconds(0 - $DAY);
+}
+
+=head2 RTDateSubDays $DAYS
+
+Subtracts 24 hours * $DAYS from the current time
+
+=cut
+
+sub RTDateSubDays {
+ my $self = shift;
+ my $days = shift;
+ $self->AddSeconds(0 - ($days * $DAY));
+}
+
+=head2 DebugInit
+
+Creates a text area on the page if debugging is on.
+
+=cut
+
+sub DebugInit {
+ if($debugging) {
+ my $m = shift;
+ $m->print("<TEXTAREA NAME=debugarea COLS=120 ROWS=50>$debugtext</TEXTAREA>\n");
+ }
+}
+
+=head2 DebugLog $logmsg
+
+Adds a message to the debug area
+
+=cut
+
+sub DebugLog {
+ if($debugging) {
+ my $line = shift;
+ $debugtext .= $line;
+ $RT::Logger->debug($line);
+ }
+}
+
+=head2 DebugClear
+
+Clears the current debug string, otherwise it builds from page to page
+
+=cut
+
+sub DebugClear {
+ if($debugging) {
+ $debugtext = undef;
+ }
+}
+
+=head2 DurationAsString
+
+Returns a string representing the specified duration
+
+=cut
+
+sub DurationAsString {
+ my $Duration = shift;
+ my $MINUTE = 60;
+ my $HOUR = $MINUTE*60;
+ my $DAY = $HOUR * 24;
+ my $WEEK = $DAY * 7;
+ my $days = int($Duration / $DAY);
+ $Duration = $Duration % $DAY;
+ my $hours = int($Duration / $HOUR);
+ $hours = sprintf("%02d", $hours);
+ $Duration = $Duration % $HOUR;
+ my $minutes = int($Duration/$MINUTE);
+ $minutes = sprintf("%02d", $minutes);
+ $Duration = $Duration % $MINUTE;
+ my $secs = sprintf("%02d", $Duration);
+
+ if(!$days) {
+ $days = "00";
+ }
+ if(!$hours) {
+ $hours = "00";
+ }
+ if(!$minutes) {
+ $minutes = "00";
+ }
+ if(!$secs) {
+ $secs = "00";
+ }
+ return "$days days $hours:$minutes:$secs";
+}
+
+1;
+
+
diff --git a/rt/lib/RTx/WebCronTool.pm b/rt/lib/RTx/WebCronTool.pm
new file mode 100644
index 000000000..5f086a279
--- /dev/null
+++ b/rt/lib/RTx/WebCronTool.pm
@@ -0,0 +1,41 @@
+package RTx::WebCronTool;
+$RTx::WebCronTool::VERSION = "0.01";
+
+1;
+
+__END__
+
+=head1 NAME
+
+RTx::WebCronTool - Web interface to rt-crontool
+
+=head1 VERSION
+
+This document describes version 0.01 of RTx::WebCronTool, released
+July 11, 2004.
+
+=head1 DESCRIPTION
+
+This RT extension provides a web interface for the built-in F<rt-crontool>
+utility, allowing scheduled processes to be launched remotely.
+
+After installation, log in as superuser, and click on the "Web CronTool" menu
+on the bottom of the navigation pane.
+
+To use it, simply submit the modules and arguments. All progress, error messages
+and debug information will then be displayed online.
+
+=head1 AUTHORS
+
+Autrijus Tang E<lt>autrijus@autrijus.orgE<gt>
+
+=head1 COPYRIGHT
+
+Copyright 2004 by Autrijus Tang E<lt>autrijus@autrijus.orgE<gt>.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
diff --git a/rt/lib/t/00smoke.t b/rt/lib/t/00smoke.t
deleted file mode 100644
index 9e9bf4a60..000000000
--- a/rt/lib/t/00smoke.t
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More qw(no_plan);
-
-use RT;
-ok(RT::LoadConfig);
-ok(RT::Init, "Basic initialization and DB connectivity");
-
-use File::Find;
-File::Find::find({wanted => \&wanted}, 'lib/');
-sub wanted { /^*\.pm\z/s && ok(require $_, "Requiring '$_'"); }
-
-
diff --git a/rt/lib/t/00smoke.t.in b/rt/lib/t/00smoke.t.in
deleted file mode 100644
index 288dd4aae..000000000
--- a/rt/lib/t/00smoke.t.in
+++ /dev/null
@@ -1,14 +0,0 @@
-#!@PERL@
-
-use Test::More qw(no_plan);
-
-use lib "@RT_LIB_PATH@";
-use RT;
-ok(RT::LoadConfig);
-ok(RT::Init, "Basic initialization and DB connectivity");
-
-use File::Find;
-File::Find::find({wanted => \&wanted}, 'lib/');
-sub wanted { /^*\.pm\z/s && ok(require $_, "Requiring '$_'"); }
-
-
diff --git a/rt/lib/t/01harness.t.in b/rt/lib/t/01harness.t.in
deleted file mode 100644
index d132330c2..000000000
--- a/rt/lib/t/01harness.t.in
+++ /dev/null
@@ -1,12 +0,0 @@
-#!@PERL@
-
-use Test::More qw(no_plan);
-
-use lib "@RT_LIB_PATH@";
-use RT;
-ok(RT::LoadConfig);
-ok(RT::Init, "Basic initialization and DB connectivity");
-
-my $test = shift @ARGV;
-require $test;
-
diff --git a/rt/lib/t/02regression.t b/rt/lib/t/02regression.t
index 4504cc76a..4cc131815 100644
--- a/rt/lib/t/02regression.t
+++ b/rt/lib/t/02regression.t
@@ -34,11 +34,14 @@ is($q2->CommentAddress, 'comment@a');
use File::Find;
-File::Find::find({wanted => \&wanted_autogen}, 'lib/t/autogen');
+File::Find::find({wanted => \&wanted_autogen,
+ preprocess => sub {return sort @_}}, 'lib/t/autogen');
sub wanted_autogen { /^autogen.*\.t\z/s && require $_; }
-File::Find::find({wanted => \&wanted_regression}, 'lib/t/regression');
+File::Find::find({wanted => \&wanted_regression,
+ preprocess => sub {return sort @_}}, 'lib/t/regression');
sub wanted_regression { /^*\.t\z/s && require $_; }
require "/opt/rt3/lib/t/03web.pl";
require "/opt/rt3/lib/t/04_send_email.pl";
+require "/opt/rt3/lib/t/05cronsupport.pl";
diff --git a/rt/lib/t/02regression.t.in b/rt/lib/t/02regression.t.in
deleted file mode 100644
index c2e3277a9..000000000
--- a/rt/lib/t/02regression.t.in
+++ /dev/null
@@ -1,47 +0,0 @@
-#!@PERL@
-
-use Test::More qw(no_plan);
-
-use lib "@RT_LIB_PATH@";
-use RT;
-ok(RT::LoadConfig);
-ok(RT::Init, "Basic initialization and DB connectivity");
-
-# Create a new queue
-use_ok(RT::Queue);
-my $q = RT::Queue->new($RT::SystemUser);
-
-$q->Load('regression');
-if ($q->id != 0) {
- die "Regression tests not starting with a clean DB. Bailing";
-}
-
-my ($id, $msg) = $q->Create( Name => 'Regression',
- Description => 'A regression test queue',
- CorrespondAddress => 'correspond@a',
- CommentAddress => 'comment@a');
-
-isnt($id, 0, "Queue was created sucessfully - $msg");
-
-my $q2 = RT::Queue->new($RT::SystemUser);
-
-ok($q2->Load($id));
-is($q2->id, $id, "Sucessfully loaded the queue again");
-is($q2->Name, 'Regression');
-is($q2->Description, 'A regression test queue');
-is($q2->CorrespondAddress, 'correspond@a');
-is($q2->CommentAddress, 'comment@a');
-
-
-use File::Find;
-File::Find::find({wanted => \&wanted_autogen,
- preprocess => sub {return sort @_}}, 'lib/t/autogen');
-sub wanted_autogen { /^autogen.*\.t\z/s && require $_; }
-
-File::Find::find({wanted => \&wanted_regression,
- preprocess => sub {return sort @_}}, 'lib/t/regression');
-sub wanted_regression { /^*\.t\z/s && require $_; }
-
-require "@RT_LIB_PATH@/t/03web.pl";
-require "@RT_LIB_PATH@/t/04_send_email.pl";
-require "@RT_LIB_PATH@/t/05cronsupport.pl";
diff --git a/rt/lib/t/03web.pl b/rt/lib/t/03web.pl
index 94ad3e97e..597ad109e 100644
--- a/rt/lib/t/03web.pl
+++ b/rt/lib/t/03web.pl
@@ -67,7 +67,83 @@ ok( $agent->{'content'} =~ qr{$string} , "Found the content");
# }}}
+# {{{ Query Builder tests
+
+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();
+
+# set the next value
+ok($agent->form_name('BuildQuery'));
+$agent->field("AttachmentField", "Subject");
+$agent->field("AttachmentOp", "LIKE");
+$agent->field("ValueOfAttachment", "bbb");
+$agent->submit();
+
+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'");
+
+# - 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
+# }}}
use File::Find;
find ( \&wanted , 'html/');
@@ -83,7 +159,7 @@ sub test_get {
$file =~ s#^html/##;
ok ($agent->get("$url/$file", "GET $url/$file"));
is ($agent->{'status'}, 200, "Loaded $file");
- ok( $agent->{'content'} =~ /Logout/i, "Found a logout link on $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'} !~ /System error/i, "Didn't get a Mason compilation error on $file");
diff --git a/rt/lib/t/03web.pl.in b/rt/lib/t/03web.pl.in
deleted file mode 100644
index 25c26e711..000000000
--- a/rt/lib/t/03web.pl.in
+++ /dev/null
@@ -1,170 +0,0 @@
-#!@PERL@
-
-use strict;
-use WWW::Mechanize;
-use HTTP::Request::Common;
-use HTTP::Cookies;
-use LWP;
-use Encode;
-
-my $cookie_jar = HTTP::Cookies->new;
-my $agent = WWW::Mechanize->new();
-
-# give the agent a place to stash the cookies
-
-$agent->cookie_jar($cookie_jar);
-
-
-# get the top page
-my $url = "http://localhost".$RT::WebPath."/";
-$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'));
-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(3);
-# Start with a string containing characters in latin1
-my $string = "I18N Web Testing æøå";
-Encode::from_to($string, 'iso-8859-1', 'utf8');
-$agent->field('Subject' => "Foo");
-$agent->field('Content' => $string);
-ok($agent->submit(), "Created new ticket with $string");
-
-ok( $agent->{'content'} =~ qr{$string} , "Found the content");
-
-$agent->get($url."Ticket/Create.html?Queue=1");
-is ($agent->{'status'}, 200, "Loaded Create.html");
-$agent->form(3);
-# Start with a string containing characters in latin1
-my $string = "I18N Web Testing æøå";
-Encode::from_to($string, 'iso-8859-1', 'utf8');
-$agent->field('Subject' => $string);
-$agent->field('Content' => "BAR");
-ok($agent->submit(), "Created new ticket with $string");
-
-ok( $agent->{'content'} =~ qr{$string} , "Found the content");
-
-
-
-# }}}
-
-# {{{ Query Builder tests
-
-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();
-
-# set the next value
-ok($agent->form_name('BuildQuery'));
-$agent->field("AttachmentField", "Subject");
-$agent->field("AttachmentOp", "LIKE");
-$agent->field("ValueOfAttachment", "bbb");
-$agent->submit();
-
-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'");
-
-# - 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
-
-# }}}
-
-use File::Find;
-find ( \&wanted , 'html/');
-
-sub wanted {
- -f && /\.html$/ && $_ !~ /Logout.html$/ && test_get($File::Find::name);
-}
-
-sub test_get {
- my $file = shift;
-
-
- $file =~ s#^html/##;
- ok ($agent->get("$url/$file", "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'} !~ /System error/i, "Didn't get a Mason compilation error on $file");
-
-}
-
-# }}}
-
-1;
diff --git a/rt/lib/t/04_send_email.pl b/rt/lib/t/04_send_email.pl
index c384eedfa..973d9d2e2 100644
--- a/rt/lib/t/04_send_email.pl
+++ b/rt/lib/t/04_send_email.pl
@@ -476,6 +476,31 @@ sub crashes_redef_sendmessage {
# }}}
+# {{{ test a multi-line RT-Send-CC header
+
+my $content = `cat /opt/rt3/lib/t/data/rt-send-cc` || die "couldn't find new content";
+
+$parser->ParseMIMEEntityFromScalar($content);
+
+
+
+my %args = (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+my $tickets = RT::Tickets->new($RT::SystemUser);
+$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
+$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
+my $tick = $tickets->First();
+ok ($tick->Id, "found ticket ".$tick->Id);
+
+my $cc = $tick->Transactions->First->Attachments->First->GetHeader('RT-Send-Cc');
+ok ($cc =~ /test1/, "Found test 1");
+ok ($cc =~ /test2/, "Found test 2");
+ok ($cc =~ /test3/, "Found test 3");
+ok ($cc =~ /test4/, "Found test 4");
+ok ($cc =~ /test5/, "Found test 5");
+
+# }}}
+
# Don't taint the environment
$everyone->PrincipalObj->RevokeRight(Right =>'SuperUser');
1;
diff --git a/rt/lib/t/04_send_email.pl.in b/rt/lib/t/04_send_email.pl.in
deleted file mode 100644
index 39ab0d271..000000000
--- a/rt/lib/t/04_send_email.pl.in
+++ /dev/null
@@ -1,506 +0,0 @@
-#!@PERL@ -w
-
-use strict;
-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::ok(ref($MIME) eq 'MIME::Entity', "hey, look. it's a mime entity");
-}
-
-}
-
-# 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 $content = `cat @RT_LIB_PATH@/t/data/multipart-report` || die "couldn't find new content";
-# be as much like the mail gateway as possible.
-use RT::Interface::Email;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Content =~ /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, $tid, $msg ) = $ticket->Create(Requestor => ['root@localhost'], Queue => 'general', Subject => 'I18NTest', MIMEObj => $parser->Entity);
-ok ($id,$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();
-ok ($tick->Id, "found ticket ".$tick->Id);
-ok ($tick->Subject eq '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 $content = `cat @RT_LIB_PATH@/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content";
-
-
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-use RT::Interface::Email;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Content =~ /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);
-my ($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::EmailOutputEncoding = 'iso-8859-1';
-# create an iso 8859-1 ticket
-@scrips_fired = ();
-
-my $content = `cat @RT_LIB_PATH@/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content";
-# be as much like the mail gateway as possible.
-use RT::Interface::Email;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Content =~ /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);
-my ($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::ok( ref($MIME) eq \'MIME::Entity\',
- "hey, look. it\'s a mime entity" );
- main::ok( ref( $MIME->head ) eq \'MIME::Head\',
- "its mime header is a mime header. yay" );
- main::ok( $MIME->head->get(\'Content-Type\') =~ /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::ok(
- $message_as_string =~ /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::ok( ref($MIME) eq \'MIME::Entity\',
- "hey, look. it\'s a mime entity" );
- main::ok( ref( $MIME->head ) eq \'MIME::Head\',
- "its mime header is a mime header. yay" );
- main::ok( $MIME->head->get(\'Content-Type\') =~ /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::ok(
- $message_as_string =~ /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 $content = `cat @RT_LIB_PATH@/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&umlauts_redef_sendmessage;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Content =~ /causes Error/, "We recorded the content right as text-plain");
-is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments, presumably a text-plain, a text-html and a multipart alternative");
-
-sub umlauts_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage { }';
-}
-
-# }}}
-
-# {{{ test a text-html message with an umlaut
-
-my $content = `cat @RT_LIB_PATH@/t/data/text-html-with-umlaut` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&text_html_umlauts_redef_sendmessage;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Attachments->First->Content =~ /causes Error/, "We recorded the content as containing 'causes error'");
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content as text/html");
-ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
-
-sub text_html_umlauts_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage {
- my $self = shift;
- my $MIME = shift;
- use Data::Dumper;
- return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
- ok (is $MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
- is ($MIME->head->mime_type , "multipart/mixed", "The first part is a multipart mixed". $MIME->head->mime_type);
- is ($MIME->parts(0)->head->mime_type , "text/plain", "The second part is a plain");
- is ($MIME->parts(1)->head->mime_type , "text/html", "The third part is an html ");
- }';
-}
-
-# }}}
-
-# {{{ test a text-html message with russian characters
-
-my $content = `cat @RT_LIB_PATH@/t/data/text-html-in-russian` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&text_html_russian_redef_sendmessage;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content right as text-html");
-ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
-
-sub text_html_russian_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage {
- my $self = shift;
- my $MIME = shift;
- use Data::Dumper;
- return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
- ok (is $MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
- is ($MIME->head->mime_type , "multipart/mixed", "The first part is a multipart mixed". $MIME->head->mime_type);
- is ($MIME->parts(0)->head->mime_type , "text/plain", "The second part is a plain");
- is ($MIME->parts(1)->head->mime_type , "text/html", "The third part is an html ");
- my $content_1251;
- $content_1251 = $MIME->parts(1)->bodyhandle->as_string();
- ok ($content_1251 =~ qr{Ó÷eáíûé Öeíòp "ÊÀÄÐÛ ÄÅËÎÂÎÃÎ ÌÈÐÀ" ïpèãëaøaeò ía òpeíèíã:},
-"Content matches drugim in codepage 1251" );
- }';
-}
-
-# }}}
-
-# {{{ test a message containing a russian subject and NO content type
-
-unshift (@RT::EmailInputEncodings, 'koi8-r');
-$RT::EmailOutputEncoding = 'koi8-r';
-my $content = `cat @RT_LIB_PATH@/t/data/russian-subject-no-content-type` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&text_plain_russian_redef_sendmessage;
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/plain/, "We recorded the content type right");
-ok ($tick->Transactions->First->Attachments->Count ==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");
- };
- ';
-}
-
-shift @RT::EmailInputEncodings;
-$RT::EmailOutputEncoding = 'utf-8';
-# }}}
-
-
-# {{{ test a message containing a nested RFC 822 message
-
-my $content = `cat @RT_LIB_PATH@/t/data/nested-rfc-822` || die "couldn't find new content";
-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;
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-is ($tick->Subject, "[Jonas Liljegren] Re: [Para] Niv\x{e5}er?");
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /multipart\/mixed/, "We recorded the content type right");
-is ($tick->Transactions->First->Attachments->Count , 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 $content = `cat @RT_LIB_PATH@/t/data/notes-uuencoded` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&notes_redef_sendmessage;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Content =~ /from Lotus Notes/, "We recorded the content right");
-is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments");
-
-sub notes_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage { }';
-}
-
-# }}}
-
-# {{{ test a multipart that crashes the file-based mime-parser works
-
-my $content = `cat @RT_LIB_PATH@/t/data/crashes-file-based-parser` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&crashes_redef_sendmessage;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-ok ($tick->Transactions->First->Content =~ /FYI/, "We recorded the content right");
-is ($tick->Transactions->First->Attachments->Count , 5 , "Has three attachments");
-
-sub crashes_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage { }';
-}
-
-
-
-# }}}
-
-# {{{ test a multi-line RT-Send-CC header
-
-my $content = `cat @RT_LIB_PATH@/t/data/rt-send-cc` || die "couldn't find new content";
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok ($tick->Id, "found ticket ".$tick->Id);
-
-my $cc = $tick->Transactions->First->Attachments->First->GetHeader('RT-Send-Cc');
-ok ($cc =~ /test1/, "Found test 1");
-ok ($cc =~ /test2/, "Found test 2");
-ok ($cc =~ /test3/, "Found test 3");
-ok ($cc =~ /test4/, "Found test 4");
-ok ($cc =~ /test5/, "Found test 5");
-
-# }}}
-
-# Don't taint the environment
-$everyone->PrincipalObj->RevokeRight(Right =>'SuperUser');
-1;
diff --git a/rt/lib/t/05cronsupport.pl.in b/rt/lib/t/05cronsupport.pl.in
deleted file mode 100644
index a6b3d7451..000000000
--- a/rt/lib/t/05cronsupport.pl.in
+++ /dev/null
@@ -1,84 +0,0 @@
-#!@PERL@ -w
-
-use strict;
-
-### 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");
diff --git a/rt/lib/t/create_data.pl b/rt/lib/t/create_data.pl
deleted file mode 100644
index 35226ea74..000000000
--- a/rt/lib/t/create_data.pl
+++ /dev/null
@@ -1,136 +0,0 @@
-#!@PERL@ -w
-use strict;
-
-use Test::More qw/no_plan/;
-use Text::Lorem;
-use RT;
-RT::LoadConfig;
-RT::Init;
-
-#### Generate some number of RT accounts. Come up with random
-#### usernames if requested, otherwise use provided ones. Take
-#### $subdomain argument so that we can generate customer accounts,
-#### etc. Group memberships should also be provided.
-
-=head2 create_users
-
-=over 4
-
-This subroutine creates a number of RT users, if they don't already
-exist, and places them in the specified group. It also creates the
-group if it needs to. Returns a ref to a list containing the user
-objects.
-
-If a list of names is specified, users with those names are created.
-Otherwise, it will make names up, checking to be sure that a user with
-the random name does not yet exist. Each user will have an email
-address in "example.com".
-
-Takes a hash of the following arguments:
-number => How many users to create. Default is 1.
-names => A ref to a list of usernames to use. Optional.
-subdomain => The subdomain of example.com which should be used for
- email addresses.
-group => The name of the group these users should belong to. Creates
- the group if it does not yet exist.
-privileged => Whether the users should be able to be granted rights.
- Default is 1.
-attributes => a ref to a list of hashrefs containing the arguments for
- any unsupported attribute we should add to the user (for example, a
- user saved search.)
-
-=back
-
-=cut
-
-sub create_users {
- my %ARGS = (number => 1,
- subdomain => undef,
- privileged => 1,
- @_);
- my $lorem = Text::Lorem->new();
- my @users_returned;
-
- my @usernames;
- my $anon;
- if ($ARGS{'users'}) {
- @usernames = @{$ARGS{'users'}};
- $anon = 0;
- } else {
- @usernames = split(/\s+/, $lorem->words($ARGS{'number'}));
- $anon = 1;
- }
-
- my $domain = 'example.com';
- $domain = $ARGS{'subdomain'} . ".$domain" if $ARGS{'subdomain'};
-
- foreach my $user (@usernames) {
- my $user_obj = RT::User->new($RT::SystemUser);
- $user_obj->Load($user);
- if ($user_obj->Id() && !$anon) {
- # Use this user; assume we know what we're doing. Don't
- # modify it, other than adding it to any group specified.
- push(@users_returned, $user_obj);
- } elsif ($user_obj->Id()) {
- # Oops. Get a different username and stick it on the back
- # of the list.
- append(@users, $lorem->words(1));
- } else {
- $user_obj->Create(Name => $user,
- Password => $user."pass",
- EmailAddress => $user.'@'.$domain,
- RealName => "$user ipsum",
- Privileged => $ARGS{'privileged'},
- );
- push(@users_returned, $user_obj);
- }
- }
-
- # Now we have our list of users. Did we have groups to add them
- # to?
-
- if ($ARGS{'groups'}) {
- my @groups = @{$ARGS{'groups'}};
- foreach my $group (@groups) {
- my $group_obj = RT::Group->new();
- $group_obj->LoadUserDefinedGroup($group);
- unless ($group_obj->Id()) {
- # Create it.
- $group_obj->CreateUserDefinedGroup(
- Name => $group,
- Description => "lorem defined group $group",
- );
- }
- foreach (@users_returned) {
- $group_obj->AddMember($_->Id);
- }
- }
- }
-
- # Do we have attributes to apply to the users?
- if ($ARGS{'attributes'}) {
- foreach my $attrib (@{$ARGS{'attributes'}}) {
- my %attr_args = %{$attrib};
- foreach (@users_returned) {
- $_->AddAttribute(%attr_args);
- }
- }
- }
-
- # Return our list of users.
- return \@users_returned;
-}
-
-#### Generate any RT groups. These ought to be named, by function.
-#### The group names should be given either as part of user creation,
-#### or as a name with a number of subgroups which should be members.
-
-
-#### Generate some queues. Users/groups who have permissions on
-#### queues need to be specified on this point. Permissions can be
-#### specified by role, e.g. "client" or "staffmember" or "admin" for
-#### each queue. If the queue should have anything special like a
-#### custom field, say so here.
-
-
-#### Generate some tickets and transactions.
diff --git a/rt/lib/t/data/8859-15-message-series/dir b/rt/lib/t/data/8859-15-message-series/dir
deleted file mode 100644
index b9f8ec3ba..000000000
--- a/rt/lib/t/data/8859-15-message-series/dir
+++ /dev/null
@@ -1,356 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg1 b/rt/lib/t/data/8859-15-message-series/msg1
deleted file mode 100644
index cc99c406c..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg1
+++ /dev/null
@@ -1,36 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg2 b/rt/lib/t/data/8859-15-message-series/msg2
deleted file mode 100644
index dc442cfc3..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg2
+++ /dev/null
@@ -1,36 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg3 b/rt/lib/t/data/8859-15-message-series/msg3
deleted file mode 100644
index e23866d5f..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg3
+++ /dev/null
@@ -1,35 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg4 b/rt/lib/t/data/8859-15-message-series/msg4
deleted file mode 100644
index 831695cc7..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg4
+++ /dev/null
@@ -1,35 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg5 b/rt/lib/t/data/8859-15-message-series/msg5
deleted file mode 100644
index 272c93c4f..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg5
+++ /dev/null
@@ -1,35 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg6 b/rt/lib/t/data/8859-15-message-series/msg6
deleted file mode 100644
index 3ae9d3b69..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg6
+++ /dev/null
@@ -1,35 +0,0 @@
-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/lib/t/data/8859-15-message-series/msg7 b/rt/lib/t/data/8859-15-message-series/msg7
deleted file mode 100644
index 6149dd644..000000000
--- a/rt/lib/t/data/8859-15-message-series/msg7
+++ /dev/null
@@ -1,36 +0,0 @@
-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/lib/t/data/crashes-file-based-parser b/rt/lib/t/data/crashes-file-based-parser
deleted file mode 100644
index da1913eb9..000000000
--- a/rt/lib/t/data/crashes-file-based-parser
+++ /dev/null
@@ -1,193 +0,0 @@
-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/lib/t/data/lorem-ipsum b/rt/lib/t/data/lorem-ipsum
deleted file mode 100644
index 1aceb1464..000000000
--- a/rt/lib/t/data/lorem-ipsum
+++ /dev/null
@@ -1,5 +0,0 @@
-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/lib/t/data/multipart-alternative-with-umlaut b/rt/lib/t/data/multipart-alternative-with-umlaut
deleted file mode 100644
index 1ad4fe323..000000000
--- a/rt/lib/t/data/multipart-alternative-with-umlaut
+++ /dev/null
@@ -1,62 +0,0 @@
-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/lib/t/data/multipart-report b/rt/lib/t/data/multipart-report
deleted file mode 100644
index 538e0c880..000000000
--- a/rt/lib/t/data/multipart-report
+++ /dev/null
@@ -1,66 +0,0 @@
-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/lib/t/data/nested-mime-sample b/rt/lib/t/data/nested-mime-sample
deleted file mode 100644
index 8b85d948c..000000000
--- a/rt/lib/t/data/nested-mime-sample
+++ /dev/null
@@ -1,396 +0,0 @@
-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/lib/t/data/nested-rfc-822 b/rt/lib/t/data/nested-rfc-822
deleted file mode 100644
index d4f118df2..000000000
--- a/rt/lib/t/data/nested-rfc-822
+++ /dev/null
@@ -1,253 +0,0 @@
-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/lib/t/data/new-ticket-from-iso-8859-1 b/rt/lib/t/data/new-ticket-from-iso-8859-1
deleted file mode 100644
index 299392d26..000000000
--- a/rt/lib/t/data/new-ticket-from-iso-8859-1
+++ /dev/null
@@ -1,31 +0,0 @@
-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/lib/t/data/new-ticket-from-iso-8859-1-full b/rt/lib/t/data/new-ticket-from-iso-8859-1-full
deleted file mode 100644
index 493ca1591..000000000
--- a/rt/lib/t/data/new-ticket-from-iso-8859-1-full
+++ /dev/null
@@ -1,38 +0,0 @@
-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/lib/t/data/notes-uuencoded b/rt/lib/t/data/notes-uuencoded
deleted file mode 100644
index f27fdf8c0..000000000
--- a/rt/lib/t/data/notes-uuencoded
+++ /dev/null
@@ -1,2368 +0,0 @@
-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/lib/t/data/rt-send-cc b/rt/lib/t/data/rt-send-cc
deleted file mode 100644
index da8c4daff..000000000
--- a/rt/lib/t/data/rt-send-cc
+++ /dev/null
@@ -1,5 +0,0 @@
-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/lib/t/data/russian-subject-no-content-type b/rt/lib/t/data/russian-subject-no-content-type
deleted file mode 100644
index 03d95b8c4..000000000
--- a/rt/lib/t/data/russian-subject-no-content-type
+++ /dev/null
@@ -1,42 +0,0 @@
-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/lib/t/data/subject-with-folding-ws b/rt/lib/t/data/subject-with-folding-ws
deleted file mode 100644
index c0826325e..000000000
--- a/rt/lib/t/data/subject-with-folding-ws
+++ /dev/null
@@ -1,10 +0,0 @@
-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/lib/t/data/text-html-in-russian b/rt/lib/t/data/text-html-in-russian
deleted file mode 100644
index b965b1b59..000000000
--- a/rt/lib/t/data/text-html-in-russian
+++ /dev/null
@@ -1,87 +0,0 @@
-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/lib/t/data/text-html-with-umlaut b/rt/lib/t/data/text-html-with-umlaut
deleted file mode 100644
index 90e5d3fa9..000000000
--- a/rt/lib/t/data/text-html-with-umlaut
+++ /dev/null
@@ -1,35 +0,0 @@
-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/lib/t/data/very-long-subject b/rt/lib/t/data/very-long-subject
deleted file mode 100644
index ad420d0a6..000000000
--- a/rt/lib/t/data/very-long-subject
+++ /dev/null
@@ -1,12 +0,0 @@
-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/lib/t/regression/00-mason-syntax.t b/rt/lib/t/regression/00-mason-syntax.t
deleted file mode 100644
index ce692a3b1..000000000
--- a/rt/lib/t/regression/00-mason-syntax.t
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use Test::More tests => 1;
-
-my $ok = 1;
-
-use File::Find;
-find( {
- no_chdir => 1,
- wanted => sub {
- return if /\.(?:jpe?g|png|gif|rej|\~)$/i;
- return unless -f $_;
- diag "testing $_" if $ENV{'TEST_VERBOSE'};
- eval { compile_file($_) } and return;
- $ok = 0;
- diag "error in ${File::Find::name}:\n$@";
- },
-}, 'html');
-ok($ok, "mason syntax is ok");
-
-use HTML::Mason;
-use HTML::Mason::Compiler;
-use HTML::Mason::Compiler::ToObject;
-
-sub compile_file {
- my $file = shift;
-
- open my $fh, '<:utf8', $file or die "couldn't open '$file': $!";
- my $text = do { local $/; <$fh> };
- close $fh or die "couldn't close '$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/lib/t/regression/00placeholder b/rt/lib/t/regression/00placeholder
deleted file mode 100644
index 0afc6045c..000000000
--- a/rt/lib/t/regression/00placeholder
+++ /dev/null
@@ -1 +0,0 @@
-1;
diff --git a/rt/lib/t/regression/01ticket_link_searching.t b/rt/lib/t/regression/01ticket_link_searching.t
deleted file mode 100644
index a402c7376..000000000
--- a/rt/lib/t/regression/01ticket_link_searching.t
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/perl -w
-
-use Test::More tests => 30;
-use strict;
-use RT;
-
-# Load the config file
-RT::LoadConfig();
-
-#Connect to the database and get RT::SystemUser and RT::Nobody loaded
-RT::Init();
-
-#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");
-
-1;
diff --git a/rt/lib/t/regression/02basic_web.t b/rt/lib/t/regression/02basic_web.t
deleted file mode 100644
index 3b8619b66..000000000
--- a/rt/lib/t/regression/02basic_web.t
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More tests => 19;
-use WWW::Mechanize;
-use HTTP::Request::Common;
-use HTTP::Cookies;
-use LWP;
-use Encode;
-
-my $cookie_jar = HTTP::Cookies->new;
-my $agent = WWW::Mechanize->new();
-
-# give the agent a place to stash the cookies
-
-$agent->cookie_jar($cookie_jar);
-
-use RT;
-RT::LoadConfig();
-# get the top page
-my $url = $RT::WebURL;
-diag $url;
-$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'));
-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);
-# Start with a string containing characters in latin1
-my $string = "I18N Web Testing æøå";
-Encode::from_to($string, 'iso-8859-1', 'utf8');
-$agent->field('Subject' => "Ticket with utf8 body");
-$agent->field('Content' => $string);
-ok($agent->submit(), "Created new ticket with $string as Content");
-like( $agent->{'content'}, qr{$string} , "Found the content");
-ok($agent->{redirected_uri}, "Did redirection");
-
-
-$agent->get($url."Ticket/Create.html?Queue=1");
-is ($agent->{'status'}, 200, "Loaded Create.html");
-$agent->form_number(3);
-# Start with a string containing characters in latin1
-my $string = "I18N Web Testing æøå";
-Encode::from_to($string, 'iso-8859-1', 'utf8');
-$agent->field('Subject' => $string);
-$agent->field('Content' => "Ticket with utf8 subject");
-ok($agent->submit(), "Created new ticket with $string as Subject");
-
-like( $agent->{'content'}, qr{$string} , "Found the content");
-
-# 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");
-
-# }}}
-
-# {{{ Query Builder tests
-
-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'");
-
-# - 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
-
-# }}}
-
-
-1;
diff --git a/rt/lib/t/regression/03web_compiliation_errors.t b/rt/lib/t/regression/03web_compiliation_errors.t
deleted file mode 100644
index 29e56d67b..000000000
--- a/rt/lib/t/regression/03web_compiliation_errors.t
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use Test::More qw/no_plan/;
-use WWW::Mechanize;
-use HTTP::Request::Common;
-use HTTP::Cookies;
-use LWP;
-use Encode;
-
-my $cookie_jar = HTTP::Cookies->new;
-my $agent = WWW::Mechanize->new();
-
-# give the agent a place to stash the cookies
-$agent->cookie_jar($cookie_jar);
-
-use RT;
-RT::LoadConfig();
-
-# get the top page
-my $url = $RT::WebURL;
-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'));
-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");
-
-
-use File::Find;
-find ( \&wanted , 'html/');
-
-sub wanted {
- -f && /\.html$/ && $_ !~ /Logout.html$/ && test_get($File::Find::name);
-}
-
-sub test_get {
- my $file = shift;
-
- $file =~ s#^html/##;
- diag( "testing $url/$file" ) if $ENV{TEST_VERBOSE};
- ok ($agent->get("$url/$file", "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/lib/t/regression/04send_email.t b/rt/lib/t/regression/04send_email.t
deleted file mode 100644
index a175ffaee..000000000
--- a/rt/lib/t/regression/04send_email.t
+++ /dev/null
@@ -1,549 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use Test::More tests => 142;
-
-use RT;
-RT::LoadConfig();
-RT::Init;
-
-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::ok(ref($MIME) eq '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 }
-
-sub file_content
-{
- open my $fh, "<:raw", $_[0] or die "couldn't open file '$_[0]': $!";
- local $/;
- return scalar <$fh>;
-}
-
-# 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 $content = file_content("$RT::BasePath/lib/t/data/multipart-report");
-# be as much like the mail gateway as possible.
-use RT::Interface::Email;
-
-my %args = (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
-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);
-
-ok (first_txn($tick)->Content =~ /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, $msg ) = $ticket->Create(Requestor => ['root@localhost'], Queue => 'general', Subject => 'I18NTest', MIMEObj => $parser->Entity);
-ok ($id,$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);
-ok ($tick->Subject eq '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 = ();
-
-$content = file_content("$RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1");
-
-
-
-$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);
-
-ok (first_txn($tick)->Content =~ /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::EmailOutputEncoding = 'iso-8859-1';
-# create an iso 8859-1 ticket
-@scrips_fired = ();
-
- $content = file_content("$RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1");
-# 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);
-
-ok (first_txn($tick)->Content =~ /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::ok( ref($MIME) eq \'MIME::Entity\',
- "hey, look. it\'s a mime entity" );
- main::ok( ref( $MIME->head ) eq \'MIME::Head\',
- "its mime header is a mime header. yay" );
- main::ok( $MIME->head->get(\'Content-Type\') =~ /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::ok(
- $message_as_string =~ /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::ok( ref($MIME) eq \'MIME::Entity\',
- "hey, look. it\'s a mime entity" );
- main::ok( ref( $MIME->head ) eq \'MIME::Head\',
- "its mime header is a mime header. yay" );
- main::ok( $MIME->head->get(\'Content-Type\') =~ /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::ok(
- $message_as_string =~ /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
-
- $content = file_content("$RT::BasePath/lib/t/data/multipart-alternative-with-umlaut");
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&umlauts_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);
-
-ok (first_txn($tick)->Content =~ /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");
-
-sub umlauts_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage { }';
-}
-
-# }}}
-
-# {{{ test a text-html message with an umlaut
-
- $content = file_content("$RT::BasePath/lib/t/data/text-html-with-umlaut");
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&text_html_umlauts_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);
-
-ok (first_attach($tick)->Content =~ /causes Error/, "We recorded the content as containing 'causes error'") or diag( first_attach($tick)->Content );
-ok (first_attach($tick)->ContentType =~ /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_umlauts_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, 2, "generated correspondence mime entityis composed of three parts");
- is ($MIME->head->mime_type , "multipart/mixed", "The first part is a multipart mixed". $MIME->head->mime_type);
- is ($MIME->parts(0)->head->mime_type , "text/plain", "The second part is a plain");
- is ($MIME->parts(1)->head->mime_type , "text/html", "The third part is an html ");
- }';
-}
-
-# }}}
-
-# {{{ test a text-html message with russian characters
-
- $content = file_content("$RT::BasePath/lib/t/data/text-html-in-russian");
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&text_html_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);
-
-ok (first_attach($tick)->ContentType =~ /text\/html/, "We recorded the content right as text-html");
-ok (count_attachs($tick) ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
-
-sub text_html_russian_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage {
- my $self = shift;
- my $MIME = shift;
- use Data::Dumper;
- return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
- ok (is $MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
- is ($MIME->head->mime_type , "multipart/mixed", "The first part is a multipart mixed". $MIME->head->mime_type);
- is ($MIME->parts(0)->head->mime_type , "text/plain", "The second part is a plain");
- is ($MIME->parts(1)->head->mime_type , "text/html", "The third part is an html ");
- my $content_1251;
- $content_1251 = $MIME->parts(1)->bodyhandle->as_string();
- ok ($content_1251 =~ qr{Ó÷eáíûé Öeíòp "ÊÀÄÐÛ ÄÅËÎÂÎÃÎ ÌÈÐÀ" ïpèãëaøaeò ía òpeíèíã:},
-"Content matches drugim in codepage 1251" );
- }';
-}
-
-# }}}
-
-# {{{ test a message containing a russian subject and NO content type
-
-unshift (@RT::EmailInputEncodings, 'koi8-r');
-$RT::EmailOutputEncoding = 'koi8-r';
-$content = file_content("$RT::BasePath/lib/t/data/russian-subject-no-content-type");
-
-$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);
-
-ok (first_attach($tick)->ContentType =~ /text\/plain/, "We recorded the content type right");
-ok (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");
- };
- ';
-}
-
-shift @RT::EmailInputEncodings;
-$RT::EmailOutputEncoding = 'utf-8';
-# }}}
-
-
-# {{{ test a message containing a nested RFC 822 message
-
- $content = file_content("$RT::BasePath/lib/t/data/nested-rfc-822");
-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?");
-ok (first_attach($tick)->ContentType =~ /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
-
- $content = file_content("$RT::BasePath/lib/t/data/notes-uuencoded");
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&notes_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);
-
-ok (first_txn($tick)->Content =~ /from Lotus Notes/, "We recorded the content right");
-is (count_attachs($tick) , 3 , "Has three attachments");
-
-sub notes_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage { }';
-}
-
-# }}}
-
-# {{{ test a multipart that crashes the file-based mime-parser works
-
- $content = file_content("$RT::BasePath/lib/t/data/crashes-file-based-parser");
-
-$parser->ParseMIMEEntityFromScalar($content);
-
-
-# be as much like the mail gateway as possible.
-&crashes_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);
-
-ok (first_txn($tick)->Content =~ /FYI/, "We recorded the content right");
-is (count_attachs($tick) , 5 , "Has three attachments");
-
-sub crashes_redef_sendmessage {
- no warnings qw/redefine/;
- eval 'sub RT::Action::SendEmail::SendMessage { }';
-}
-
-
-
-# }}}
-
-# {{{ test a multi-line RT-Send-CC header
-
- $content = file_content("$RT::BasePath/lib/t/data/rt-send-cc");
-
-$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');
-ok ($cc =~ /test1/, "Found test 1");
-ok ($cc =~ /test2/, "Found test 2");
-ok ($cc =~ /test3/, "Found test 3");
-ok ($cc =~ /test4/, "Found test 4");
-ok ($cc =~ /test5/, "Found test 5");
-
-# }}}
-
-diag q{regression test for #5248 from rt3.fsck.com} if $ENV{TEST_VERBOSE};
-{
- my $content = file_content("$RT::BasePath/lib/t/data/subject-with-folding-ws");
- 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 $content = file_content("$RT::BasePath/lib/t/data/very-long-subject");
- 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/lib/t/regression/05cronsupport.t b/rt/lib/t/regression/05cronsupport.t
deleted file mode 100644
index 8e5bd7516..000000000
--- a/rt/lib/t/regression/05cronsupport.t
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use Test::More qw/no_plan/;
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-### 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/lib/t/regression/06-mime_decoding.t b/rt/lib/t/regression/06-mime_decoding.t
deleted file mode 100644
index 2dca4f191..000000000
--- a/rt/lib/t/regression/06-mime_decoding.t
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-use Test::More tests => 7;
-
-use_ok("RT");
-
-RT::LoadConfig();
-RT::Init();
-
-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/lib/t/regression/06mailgateway.t b/rt/lib/t/regression/06mailgateway.t
deleted file mode 100644
index 5fc502926..000000000
--- a/rt/lib/t/regression/06mailgateway.t
+++ /dev/null
@@ -1,663 +0,0 @@
-#!/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., 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 }}}
-
-=head1 NAME
-
-rt-mailgate - Mail interface to RT3.
-
-=cut
-
-use strict;
-use Test::More tests => 109;
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-use RT::I18N;
-use Digest::MD5 qw(md5_base64);
-
-no warnings 'once';
-my $url = join( ':', grep $_, "http://localhost", $RT::WebPort ) . $RT::WebPath ."/";
-
-# Make sure that when we call the mailgate wrong, it tempfails
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url http://this.test.for.non-connection.is.expected.to.generate.an.error"), "Opened the mailgate - The error below is expected - $@");
-print MAIL <<EOF;
-From: root\@localhost
-To: rt\@$RT::rtname
-Subject: This is a test of new ticket creation
-
-Foob!
-EOF
-close (MAIL);
-
-# Check the return value
-is ( $? >> 8, 75, "The error message above is expected The mail gateway exited with a failure. yay");
-
-
-# {{{ Test new ticket creation by root who is privileged and superuser
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --debug --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: root\@localhost
-To: rt\@$RT::rtname
-Subject: This is a test of new ticket creation
-
-Blah!
-Foob!
-EOF
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-use RT::Tickets;
-my $tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0');
-my $tick = $tickets->First();
-ok (UNIVERSAL::isa($tick,'RT::Ticket'));
-ok ($tick->Id, "found ticket ".$tick->Id);
-ok ($tick->Subject eq 'This is a test of new ticket creation', "Created the ticket");
-
-# }}}
-
-# {{{ Test new ticket creation without --action argument
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --debug --url $url --queue general"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: root\@localhost
-To: rt\@$RT::rtname
-Subject: using mailgate without --action arg
-
-Blah!
-Foob!
-EOF
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-$tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0');
-$tick = $tickets->First;
-isa_ok ($tick,'RT::Ticket');
-ok ($tick->Id, "found ticket ".$tick->Id);
-is ($tick->Subject, 'using mailgate without --action arg', "using mailgate without --action arg");
-
-# }}}
-
-# {{{This is a test of new ticket creation as an unknown user
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: doesnotexist\@$RT::rtname
-To: rt\@$RT::rtname
-Subject: This is a test of new ticket creation as an unknown user
-
-Blah!
-Foob!
-EOF
-close (MAIL);
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-$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);
-ok ($tick->Subject ne '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::rtname");
-ok( !$u->Id, " user does not exist and was not created by failed ticket submission");
-
-
-# }}}
-
-# {{{ now everybody can create tickets. can a random unkown user create tickets?
-
-my $g = RT::Group->new($RT::SystemUser);
-$g->LoadSystemInternalGroup('Everyone');
-ok( $g->Id, "Found 'everybody'");
-
-my ($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket');
-ok ($val, "Granted everybody the right to create tickets - $msg");
-
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: doesnotexist\@$RT::rtname
-To: rt\@$RT::rtname
-Subject: This is a test of new ticket creation as an unknown user
-
-Blah!
-Foob!
-EOF
-close (MAIL);
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-
-$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);
-ok ($tick->Subject eq 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account");
- $u = RT::User->new($RT::SystemUser);
-$u->Load("doesnotexist\@$RT::rtname");
-ok( $u->Id != 0, " user does not exist and was created by ticket submission");
-
-# }}}
-
-
-# {{{ can another random reply to a ticket without being granted privs? answer should be no.
-
-
-#($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket');
-#ok ($val, "Granted everybody the right to create tickets - $msg");
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: doesnotexist-2\@$RT::rtname
-To: rt\@$RT::rtname
-Subject: [$RT::rtname #@{[$tick->Id]}] This is a test of a reply as an unknown user
-
-Blah! (Should not work.)
-Foob!
-EOF
-close (MAIL);
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-$u = RT::User->new($RT::SystemUser);
-$u->Load('doesnotexist-2@$RT::rtname');
-ok( !$u->Id, " user does not exist and was not created by ticket correspondence submission");
-# }}}
-
-
-# {{{ can another random reply to a ticket after being granted privs? answer should be yes
-
-
-($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'ReplyToTicket');
-ok ($val, "Granted everybody the right to reply to tickets - $msg");
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: doesnotexist-2\@$RT::rtname
-To: rt\@$RT::rtname
-Subject: [$RT::rtname #@{[$tick->Id]}] This is a test of a reply as an unknown user
-
-Blah!
-Foob!
-EOF
-close (MAIL);
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-
-$u = RT::User->new($RT::SystemUser);
-$u->Load("doesnotexist-2\@$RT::rtname");
-ok( $u->Id != 0, " user exists and was created by ticket correspondence submission");
-
-# }}}
-
-# {{{ can another random comment on a ticket without being granted privs? answer should be no.
-
-
-#($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket');
-#ok ($val, "Granted everybody the right to create tickets - $msg");
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action comment"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: doesnotexist-3\@$RT::rtname
-To: rt\@$RT::rtname
-Subject: [$RT::rtname #@{[$tick->Id]}] This is a test of a comment as an unknown user
-
-Blah! (Should not work.)
-Foob!
-EOF
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-$u = RT::User->new($RT::SystemUser);
-$u->Load("doesnotexist-3\@$RT::rtname");
-ok( !$u->Id, " user does not exist and was not created by ticket comment submission");
-
-# }}}
-# {{{ can another random reply to a ticket after being granted privs? answer should be yes
-
-
-($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CommentOnTicket');
-ok ($val, "Granted everybody the right to reply to tickets - $msg");
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action comment"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: doesnotexist-3\@$RT::rtname
-To: rt\@$RT::rtname
-Subject: [$RT::rtname #@{[$tick->Id]}] This is a test of a comment as an unknown user
-
-Blah!
-Foob!
-EOF
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-$u = RT::User->new($RT::SystemUser);
-$u->Load("doesnotexist-3\@$RT::rtname");
-ok( $u->Id != 0, " user exists and was created by ticket comment submission");
-
-# }}}
-
-# {{{ Testing preservation of binary attachments
-
-# Get a binary blob (Best Practical logo)
-
-# Create a mime entity with an attachment
-
-use MIME::Entity;
-my $entity = MIME::Entity->build( From => 'root@localhost',
- To => 'rt@localhost',
- Subject => 'binary attachment test',
- Data => ['This is a test of a binary attachment']);
-
-# currently in lib/t/autogen
-
-my $LOGO_FILE = $RT::MasonComponentRoot.'/NoAuth/images/bplogo.gif';
-
-$entity->attach(Path => $LOGO_FILE,
- Type => 'image/gif',
- Encoding => 'base64');
-
-# Create a ticket with a binary attachment
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-
-$entity->print(\*MAIL);
-
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-$tickets = RT::Tickets->new($RT::SystemUser);
-$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0');
- $tick = $tickets->First();
-ok (UNIVERSAL::isa($tick,'RT::Ticket'));
-ok ($tick->Id, "found ticket ".$tick->Id);
-ok ($tick->Subject eq '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 content is ". md5_base64($file) );
-
-
-
-# Verify that the binary attachment is valid in the database
-my $attachments = RT::Attachments->new($RT::SystemUser);
-$attachments->Limit(FIELD => 'ContentType', VALUE => 'image/gif');
-ok ($attachments->Count == 1, 'Found only one gif in the database');
-my $attachment = $attachments->First;
-ok($attachment->Id);
-my $acontent = $attachment->Content;
-
-diag( "coming from the database, the content is ". md5_base64($acontent) );
-
-is( $acontent, $file, 'The attachment isn\'t screwed up in the database.');
-# Log in as root
-use Getopt::Long;
-use LWP::UserAgent;
-
-
-# Grab the binary attachment via the web ui
-my $ua = LWP::UserAgent->new();
-
-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');
-
-
-
-# }}}
-
-# {{{ Simple I18N testing
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-
-print MAIL <<EOF;
-From: root\@localhost
-To: rtemail\@$RT::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
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-my $unitickets = RT::Tickets->new($RT::SystemUser);
-$unitickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$unitickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0');
-my $unitick = $unitickets->First();
-ok (UNIVERSAL::isa($unitick,'RT::Ticket'));
-ok ($unitick->Id, "found ticket ".$unitick->Id);
-ok ($unitick->Subject eq 'This is a test of I18N ticket creation', "Created the ticket - ". $unitick->Subject);
-
-
-
-my $unistring = "\303\241\303\251\303\255\303\263\303\272";
-Encode::_utf8_on($unistring);
-is ($unitick->Transactions->First->Content, $unitick->Transactions->First->Attachments->First->Content, "Content is ". $unitick->Transactions->First->Attachments->First->Content);
-ok($unitick->Transactions->First->Attachments->First->Content =~ /$unistring/i, $unitick->Id." appears to be unicode ". $unitick->Transactions->First->Attachments->First->Id);
-# supposedly I18N fails on the second message sent in.
-
-$! = 0;
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
-
-print MAIL <<EOF;
-From: root\@localhost
-To: rtemail\@$RT::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
-close (MAIL);
-
-#Check the return value
-is ($? >> 8, 0, "The mail gateway exited normally. yay");
-
-my $tickets2 = RT::Tickets->new($RT::SystemUser);
-$tickets2->OrderBy(FIELD => 'id', ORDER => 'DESC');
-$tickets2->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0');
-my $tick2 = $tickets2->First();
-ok (UNIVERSAL::isa($tick2,'RT::Ticket'));
-ok ($tick2->Id, "found ticket ".$tick2->Id);
-ok ($tick2->Subject eq 'This is a test of I18N ticket creation', "Created the ticket");
-
-
-
-$unistring = "\303\241\303\251\303\255\303\263\303\272";
-Encode::_utf8_on($unistring);
-
-ok ($tick2->Transactions->First->Content =~ $unistring, "It appears to be unicode - ".$tick2->Transactions->First->Content);
-
-# }}}
-
-
-($val,$msg) = $g->PrincipalObj->RevokeRight(Right => 'CreateTicket');
-ok ($val, $msg);
-
-##=for later
-
-SKIP: {
-skip "Advanced mailgate actions require an unsafe configuration", 47 unless $RT::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;
-$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::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 $RT::WebURL --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $@");
-print MAIL <<EOF;
-From: root\@localhost
-Subject: [$RT::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 --debug"), "Opened the mailgate - $!");
-print MAIL <<EOF;
-From: root\@localhost
-Subject: [$RT::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' );
-
-$! = 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: [example.com \#$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: [example.com \#$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: [example.com \#$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: [example.com \#$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/lib/t/regression/07acl.t b/rt/lib/t/regression/07acl.t
deleted file mode 100644
index efd87016d..000000000
--- a/rt/lib/t/regression/07acl.t
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use WWW::Mechanize;
-use HTTP::Cookies;
-
-use Test::More tests => 34;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-# 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;
-my $agent = WWW::Mechanize->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;
-
-ok($agent->{'content'} =~ /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();
-ok($agent->{'content'} =~ /Logout/i, "Reloaded page successfully");
-ok($agent->find_link( url => $RT::WebPath . "/User/Prefs.html",
- 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();
-ok($agent->{'content'} =~ /Load saved search/i, "Search loading box exists");
-ok($agent->{'content'} !~ /input\s+type=.submit.\s+name=.Save./i,
- "Still no saved searches box");
-
-($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'CreateSavedSearch');
-ok ($grantid,$grantmsg);
-$agent->reload();
-ok($agent->{'content'} =~ /Load saved search/i,
- "Search loading box still exists");
-ok($agent->{'content'} =~ /input\s+type=.submit.\s+name=.Save./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 = $RT::WebURL;
- $agent->get($url);
- is( $agent->{'status'}, 200,
- "Loaded a page - $url" );
-
- # {{{ test a login
-
- # follow the link marked "Login"
-
- ok( $agent->{form}->find_input('user') );
-
- ok( $agent->{form}->find_input('pass') );
- ok( $agent->{'content'} =~ /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" );
- ok( $agent->{'content'} =~ /Logout/i, "Found a logout link" );
-}
-1;
diff --git a/rt/lib/t/regression/07rights.t b/rt/lib/t/regression/07rights.t
deleted file mode 100644
index 6c35a0717..000000000
--- a/rt/lib/t/regression/07rights.t
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/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 Test::More tests => 26;
-use RT;
-RT::LoadConfig();
-RT::Init();
-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;
-}
-
-# 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 => 'rights');
-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 => 'rights',
- EmailAddress => 'rights@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/lib/t/regression/08web_cf_access.t b/rt/lib/t/regression/08web_cf_access.t
deleted file mode 100644
index c352bbcf8..000000000
--- a/rt/lib/t/regression/08web_cf_access.t
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-use Test::More tests => 15;
-BEGIN {
- use RT;
- RT::LoadConfig;
- RT::Init;
-}
-use Test::WWW::Mechanize;
-
-use constant BaseURL => $RT::WebURL;
-use constant ImageFile => $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif';
-use constant ImageFileContent => do {
- local $/;
- open my $fh, '<', ImageFile or die $!;
- binmode($fh);
- scalar <$fh>;
-};
-
-my $m = Test::WWW::Mechanize->new;
-isa_ok($m, 'Test::WWW::Mechanize');
-
-$m->get( BaseURL."?user=root;pass=password" );
-$m->content_like(qr/Logout/, 'we did log in');
-$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 => 'New custom field' );
-$m->submit_form(
- form_name => "ModifyCustomField",
- fields => {
- TypeComposite => 'Image-0',
- LookupType => 'RT::Queue-RT::Ticket',
- Name => 'img',
- Description => 'img',
- },
-);
-$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 tcf');
-$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 => $_ ] : () }
- map $_->name, $m->current_form->inputs;
-my $tcf = pop(@names);
-$m->field( $tcf => 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' );
-
-$m->submit_form(
- form_name => "CreateTicketInQueue",
- fields => { Queue => 'General' },
-);
-
-$m->content_like(qr/Upload multiple images/, 'has a upload image field');
-
-$tcf =~ /(\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");
-
-my $id = $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( BaseURL );
-
-$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 => $id,
- 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/lib/t/regression/09record_cf_api.t b/rt/lib/t/regression/09record_cf_api.t
deleted file mode 100644
index 78f111bd8..000000000
--- a/rt/lib/t/regression/09record_cf_api.t
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings FATAL => 'all';
-use Test::More tests => 133;
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-# 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" );
-
-
-#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/lib/t/regression/10merge.t b/rt/lib/t/regression/10merge.t
deleted file mode 100644
index 8bca9526a..000000000
--- a/rt/lib/t/regression/10merge.t
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-
-#
-# This test script validates that when merging two tickets, the comments from both tickets
-# are integrated into the new ticket
-
-use Test::More tests => 13;
-use RT;
-RT::LoadConfig;
-RT::Init;
-
-use_ok('RT::Ticket');
-use_ok('RT::Queue');
-
-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");
-
diff --git a/rt/lib/t/regression/11-template-insert.t b/rt/lib/t/regression/11-template-insert.t
deleted file mode 100644
index 8681ce67d..000000000
--- a/rt/lib/t/regression/11-template-insert.t
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-use Test::More tests => 7;
-
-use RT;
-RT::LoadConfig();
-RT::Init;
-
-
-# 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/lib/t/regression/12-search.t b/rt/lib/t/regression/12-search.t
deleted file mode 100644
index c775f9372..000000000
--- a/rt/lib/t/regression/12-search.t
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/opt/perl/bin/perl -w
-
-# tests relating to searching. Especially around custom fields, and
-# corner cases.
-
-use strict;
-use warnings;
-
-use Test::More tests => 44;
-use_ok('RT');
-RT::LoadConfig();
-RT::Init();
-
-# 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/lib/t/regression/13-attribute-tests.t b/rt/lib/t/regression/13-attribute-tests.t
deleted file mode 100644
index fdac94e63..000000000
--- a/rt/lib/t/regression/13-attribute-tests.t
+++ /dev/null
@@ -1,87 +0,0 @@
-use strict;
-use warnings;
-use Test::More tests => 34;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-
-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 adidng 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/lib/t/regression/14linking.t b/rt/lib/t/regression/14linking.t
deleted file mode 100644
index c8e57eadd..000000000
--- a/rt/lib/t/regression/14linking.t
+++ /dev/null
@@ -1,243 +0,0 @@
-use Test::More tests => '70';
-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');
-RT::LoadConfig();
-RT::Init();
-
-use File::Temp qw/tempfile/;
-my ($fh, $filename) = tempfile( UNLINK => 1, SUFFIX => '.rt');
-my $link_scrips_orig = $RT::LinkTransactionsRun1Scrip;
-my $link_acl_chacks_orig = $RT::StrictLinkACL;
-$RT::LinkTransactionsRun1Scrip = 1;
-$RT::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(FILE, "<$filename");
-my \$data = <FILE>;
-chomp \$data;
-close FILE;
-open(FILE, ">$filename");
-if (\$self->TransactionObj->Type eq 'AddLink') {
- print FILE \$data+1, "\n";
-}
-else {
- print FILE \$data-1, "\n";
-}
-close FILE;
-1;
-END
-
-my $Scrips = RT::Scrips->new( $RT::SystemUser );
-$Scrips->UnLimit;
-while ( my $Scrip = $Scrips->Next ) {
- $Scrip->Delete if $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);
-
-my $creator = RT::CurrentUser->new($u1->id);
-
-($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'CreateTicket');
-ok ($id,$msg);
-
-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 );
- ($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
- local $RT::StrictLinkACL = 0;
- my $parent = RT::Ticket->new( $RT::SystemUser );
- ($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), 0, "scrips ok");
-}
-
-($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 );
- ($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);
- my ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id);
- ok(!$id, $msg);
- is(link_count($filename), 0, "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
- local $RT::StrictLinkACL = 0;
- my $parent = RT::Ticket->new( $RT::SystemUser );
- ($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);
- my ($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::StrictLinkACL = 1;
- my ($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::StrictLinkACL = 0;
- my ($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');
-}
-
-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);
-ok(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);
-ok(link_count($filename) == 1, "scrips ok");
-($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => -1);
-ok(!$id,$msg);
-ok(link_count($filename) == 1, "scrips ok");
-($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' );
-ok( $transactions->Count == 1, "Transaction found in other ticket" );
-ok( $transactions->First->Field eq 'ReferredToBy');
-ok( $transactions->First->NewValue eq $ticket->URI );
-
-($id,$msg) =$ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id);
-ok($id,$msg);
-ok(link_count($filename) == 0, "scrips ok");
-$transactions = $ticket2->Transactions;
-$transactions->Limit( FIELD => 'Type', VALUE => 'DeleteLink' );
-ok( $transactions->Count == 1, "Transaction found in other ticket" );
-ok( $transactions->First->Field eq 'ReferredToBy');
-ok( $transactions->First->OldValue eq $ticket->URI );
-
-$RT::LinkTransactionsRun1Scrip = 0;
-
-($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id);
-ok($id,$msg);
-ok(link_count($filename) == 2, "scrips ok");
-($id,$msg) =$ticket->DeleteLink(Type => 'RefersTo', Target => $ticket2->id);
-ok($id,$msg);
-ok(link_count($filename) == 0, "scrips ok");
-
-# restore
-$RT::LinkTransactionsRun1Scrip = $link_scrips_orig;
-$RT::StrictLinkACL = $link_acl_checks_orig;
-
-exit(0);
-
-sub link_count {
-
- my $file = shift;
- open(FILE, "<$file");
- my $data = <FILE>;
- chomp $data;
- return $data + 0;
- close FILE;
-
-}
diff --git a/rt/lib/t/regression/14merge.t b/rt/lib/t/regression/14merge.t
deleted file mode 100644
index c9162510b..000000000
--- a/rt/lib/t/regression/14merge.t
+++ /dev/null
@@ -1,31 +0,0 @@
-
-use Test::More tests => '6';
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-# 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/lib/t/regression/15cf_combo_cascade.t b/rt/lib/t/regression/15cf_combo_cascade.t
deleted file mode 100644
index df663a1bd..000000000
--- a/rt/lib/t/regression/15cf_combo_cascade.t
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/perl
-use warnings;
-use strict;
-use Test::More tests => 11;
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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/lib/t/regression/15cf_pattern.t b/rt/lib/t/regression/15cf_pattern.t
deleted file mode 100644
index ea2b5b858..000000000
--- a/rt/lib/t/regression/15cf_pattern.t
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/perl
-use warnings;
-use strict;
-use Test::More tests => 17;
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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/lib/t/regression/15cf_single_values_are_single.t b/rt/lib/t/regression/15cf_single_values_are_single.t
deleted file mode 100644
index dcfa2e5b3..000000000
--- a/rt/lib/t/regression/15cf_single_values_are_single.t
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/perl
-use warnings;
-use strict;
-use Test::More tests => 8;
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-
-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/lib/t/regression/16-transaction_cf_tests.t b/rt/lib/t/regression/16-transaction_cf_tests.t
deleted file mode 100644
index 9e1e86ca4..000000000
--- a/rt/lib/t/regression/16-transaction_cf_tests.t
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-use Data::Dumper;
-use Test::More qw/no_plan/;
-
-use_ok('RT');
-use_ok('RT::Transactions');
-RT::LoadConfig();
-RT::Init();
-
-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/lib/t/regression/17custom_search.t b/rt/lib/t/regression/17custom_search.t
deleted file mode 100644
index 8e53f4486..000000000
--- a/rt/lib/t/regression/17custom_search.t
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-use Test::More tests => 10;
-BEGIN {
- use RT;
- RT::LoadConfig;
- RT::Init;
-}
-use Test::WWW::Mechanize;
-
-use constant BaseURL => $RT::WebURL;
-
-# 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');
-
-my $m = Test::WWW::Mechanize->new ( autocheck => 1 );
-isa_ok($m, 'Test::WWW::Mechanize');
-
-$m->get( BaseURL."?user=root;pass=password" );
-$m->content_like(qr/Logout/, 'we did log 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 ( BaseURL.'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( BaseURL );
-$m->content_contains ('customsearch@localhost', 'requestor now displayed ');
-
-
-# now remove Requestor from the fields
-$m->get ($cus_hp);
-
-$m->form_name ('BuildQuery');
-$m->field (CurrentDisplayColumns => 'Requestors');
-$m->click_button (name => 'RemoveCol') ;
-
-$m->form_name ('BuildQuery');
-$m->click_button (name => 'Save');
-
-$m->get( BaseURL );
-$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" )};
-warn $nlinks;
-$m->get ($cus_qs);
-$m->form_name ('Preferences');
-$m->untick('Want-General', '1');
-$m->click_button (name => 'Save');
-
-$m->get( BaseURL );
-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( BaseURL );
-is ($#{$m->find_all_links( text => "General" )}, $nlinks,
- 'General back in quicksearch list');
diff --git a/rt/lib/t/regression/17multiple_deleg_revocation.t b/rt/lib/t/regression/17multiple_deleg_revocation.t
deleted file mode 100644
index 1ed040406..000000000
--- a/rt/lib/t/regression/17multiple_deleg_revocation.t
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/perl -w
-
-use Test::More qw(no_plan);
-
-use RT;
-
-ok( RT::LoadConfig, "Locating config files" );
-ok( RT::Init, "Basic initialization and DB connectivity" );
-
-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();
- ok( $acl->Count() == 0,
- "All principals have no rights after clearing ACLs" );
- $members->RedoSearch();
- ok( $members->Count() == 0,
- "All groups have no members after clearing groups" );
-}
diff --git a/rt/lib/t/regression/18custom_frontpage.t b/rt/lib/t/regression/18custom_frontpage.t
deleted file mode 100644
index cf77e35cc..000000000
--- a/rt/lib/t/regression/18custom_frontpage.t
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-use Test::More tests => 7;
-BEGIN {
- use RT;
- RT::LoadConfig;
- RT::Init;
-}
-use Test::WWW::Mechanize;
-
-use constant BaseURL => $RT::WebURL;
-
-
-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');
-
-my $m = Test::WWW::Mechanize->new ( autocheck => 1 );
-isa_ok($m, 'Test::WWW::Mechanize');
-
-$m->get( BaseURL."?user=customer;pass=customer" );
-
-$m->content_like(qr/Logout/, 'we did log in');
-
-$m->get ( BaseURL."Search/Build.html");
-
-#create a saved search
-$m->form_name ('BuildQuery');
-
-$m->field ( "ValueOfAttachment" => 'stupid');
-$m->field ( "Description" => 'stupid tickets');
-$m->click_button (name => 'Save');
-
-$m->get ( BaseURL.'Prefs/MyRT.html' );
-$m->content_like (qr/stupid tickets/, 'saved search listed in rt at a glance items');
-
-$m->follow_link (text => 'Logout');
-
-$m->get( BaseURL."?user=root;pass=password" );
-$m->content_like(qr/Logout/, 'we did log in');
-
-$m->get ( BaseURL.'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 ( BaseURL );
-$m->content_lacks ('highest priority tickets', 'remove everything from body pane');
-
-$m->get ( BaseURL.'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 ( BaseURL );
-$m->content_like (qr'highest priority tickets', 'adds them back');
diff --git a/rt/lib/t/regression/18stale_delegations_cleanup.t b/rt/lib/t/regression/18stale_delegations_cleanup.t
deleted file mode 100644
index 84e666eee..000000000
--- a/rt/lib/t/regression/18stale_delegations_cleanup.t
+++ /dev/null
@@ -1,458 +0,0 @@
-#!/usr/bin/perl -w
-
-# 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 Test::More qw(no_plan);
-
-use RT;
-
-ok( RT::LoadConfig, "Locating config files" );
-ok( RT::Init, "Basic initialization and DB connectivity" );
-
-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();
- ok( $acl->Count() == 0,
- "All principals have no rights after clearing ACLs" );
- $members->RedoSearch();
- ok( $members->Count() == 0,
- "All groups have no members after clearing groups" );
-}
diff --git a/rt/lib/t/regression/19-rtname.t b/rt/lib/t/regression/19-rtname.t
deleted file mode 100644
index b654df2bd..000000000
--- a/rt/lib/t/regression/19-rtname.t
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-use Test::More qw/no_plan/;
-
-use_ok("RT");
-
-RT::LoadConfig();
-RT::Init();
-
-use RT::Interface::Email;
-
-# normal use case, regexp set to rtname
-$RT::rtname = "site";
-$RT::EmailSubjectTagRegex = qr/$RT::rtname/ ;
-$RT::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::rtname = "site";
-$RT::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::rtname = "site";
-$RT::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::rtname = "site";
-$RT::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/lib/t/regression/19quicksearch.t b/rt/lib/t/regression/19quicksearch.t
deleted file mode 100644
index 7744787c0..000000000
--- a/rt/lib/t/regression/19quicksearch.t
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#!/usr/bin/perl -w
-
-use strict;
-use warnings;
-
-use Test::More qw/no_plan/;
-use_ok('RT');
-RT::LoadConfig();
-RT::Init();
-
-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 $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' )",
- $queue => "( Queue = '$queue' )",
- "root $queue" => "( Owner = 'root' ) AND ( Queue = '$queue' )",
- "notauser $queue" => "( Queue = '$queue' ) AND ( Subject LIKE 'notauser' )",
- "notauser $queue root" => "( Owner = 'root' ) AND ( Queue = '$queue' ) AND ( Subject LIKE 'notauser' )");
-
-while (my ($from, $to) = splice @tests, 0, 2) {
- is($quick->QueryToSQL($from), $to, "<$from> -> <$to>");
-}
diff --git a/rt/lib/t/regression/20-sort-by-queue.t b/rt/lib/t/regression/20-sort-by-queue.t
deleted file mode 100644
index 16eabe91b..000000000
--- a/rt/lib/t/regression/20-sort-by-queue.t
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More tests => 8;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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.";
-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/lib/t/regression/20-sort-by-requestor.t b/rt/lib/t/regression/20-sort-by-requestor.t
deleted file mode 100644
index e6903b433..000000000
--- a/rt/lib/t/regression/20-sort-by-requestor.t
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/usr/bin/perl -w
-use strict; use warnings;
-
-use Test::More qw/no_plan/;
-use_ok('RT');
-RT::LoadConfig();
-RT::Init();
-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'");
-TODO: {
- local $TODO = "if group has non users members we get wrong order";
- $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)");
-}
-
-# vim:ft=perl:
diff --git a/rt/lib/t/regression/20-sort-by-user.t b/rt/lib/t/regression/20-sort-by-user.t
deleted file mode 100644
index 04bf2e75f..000000000
--- a/rt/lib/t/regression/20-sort-by-user.t
+++ /dev/null
@@ -1,155 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More tests => 32;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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.";
-my $queue_name = "OwnerSortQueue$$";
-my $queue;
-{
- $queue = RT::Queue->new( $RT::SystemUser );
- my ($ret, $msg) = $queue->Create(
- Name => $queue,
- 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/lib/t/regression/20savedsearch.t b/rt/lib/t/regression/20savedsearch.t
deleted file mode 100644
index f4439f94e..000000000
--- a/rt/lib/t/regression/20savedsearch.t
+++ /dev/null
@@ -1,180 +0,0 @@
-use RT;
-use Test::More tests => 26;
-use RT::User;
-use RT::Group;
-use RT::Ticket;
-use RT::Queue;
-
-use_ok(RT::SavedSearch);
-use_ok(RT::SavedSearches);
-
-RT::LoadConfig();
-RT::Init();
-
-# 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 ($ret, $msg);
-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);
-$loadedsearch4->Load($othersearch->Privacy, $othersearch->Id);
-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/lib/t/regression/21query-builder.t b/rt/lib/t/regression/21query-builder.t
deleted file mode 100644
index a0cecb2f3..000000000
--- a/rt/lib/t/regression/21query-builder.t
+++ /dev/null
@@ -1,247 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use Test::More tests => 39;
-use Test::WWW::Mechanize;
-use HTTP::Request::Common;
-use HTTP::Cookies;
-use LWP;
-use Encode;
-
-my $cookie_jar = HTTP::Cookies->new;
-my $agent = Test::WWW::Mechanize->new();
-
-# give the agent a place to stash the cookies
-
-$agent->cookie_jar($cookie_jar);
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-# create a regression queue if it doesn't exist
-{
- my $queue = RT::Queue->new( $RT::SystemUser );
- $queue->Load( 'Regression' );
- if ( $queue->id ) {
- ok(1, "queue 'Regression' exists - #". $queue->id );
- } else {
- $queue->Create( Name => 'Regression' );
- ok($queue->id, "created queue 'Regression'");
- }
-}
-
-# get the top page
-my $url = $RT::WebURL;
-$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'));
-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");
-
-# }}}
-
-# {{{ Query Builder tests
-
-my $response = $agent->get($url."Search/Build.html");
-ok( $response->is_success, "Fetched " . $url."Search/Build.html" );
-
-# Adding items
-
-# set the first value
-ok($agent->form_name('BuildQuery'), "found the form once");
-$agent->field("ActorField", "Owner");
-$agent->field("ActorOp", "=");
-$agent->field("ValueOfActor", "Nobody");
-$agent->submit();
-
-# set the next value
-ok($agent->form_name('BuildQuery'), "found the form again");
-$agent->field("QueueOp", "!=");
-$agent->field("ValueOfQueue", "Regression");
-$agent->submit();
-
-ok($agent->form_name('BuildQuery'), "found the form a third time");
-
-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;
-}
-
-is (getQueryFromForm, "Owner = 'Nobody' AND Queue != 'Regression'");
-
-# We're going to delete the owner
-
-$agent->select("clauses", ["0"] );
-
-$agent->click("DeleteClause");
-
-ok($agent->form_name('BuildQuery'), "found the form a fourth time");
-
-is (getQueryFromForm, "Queue != 'Regression'");
-
-$agent->field("AndOr", "OR");
-
-$agent->select("idOp", ">");
-
-$agent->field("ValueOfid" => "1234");
-
-$agent->click("AddClause");
-
-ok($agent->form_name('BuildQuery'), "found the form again");
-TODO: {
- local $TODO = "query builder incorrectly quotes numbers";
- is(getQueryFromForm, "Queue != 'Regression' OR id > 1234", "added something as OR, and number not quoted");
-}
-
-sub selectedClauses {
- my @clauses = grep { defined } map { $_->value } $agent->current_form->find_input("clauses");
- return [ @clauses ];
-}
-
-
-is_deeply(selectedClauses, ["1"], 'the id that we just entered is still selected');
-
-# Move the second one up a level
-$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');
-
-$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');
-
-$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");
-
-$agent->select("clauses", ["0"]); # this is a null clause
-$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");
-
-$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");
-
-$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 selected');
-is( getQueryFromForm, "( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'", "added new one" );
-
-# click advanced, enter "C1 OR ( C2 AND C3 )", apply, aggregators should stay the same.
-{
- 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.{\321\202}'", "\321\201");
- $agent->submit();
- is( getQueryFromForm,
- "'CF.{\321\202}' LIKE '\321\201'",
- "no changes, no duplicate condition with badly encoded text"
- );
-
- $cf->delete();
-}
-
-1;
diff --git a/rt/lib/t/regression/22search_tix_by_txn.t b/rt/lib/t/regression/22search_tix_by_txn.t
deleted file mode 100644
index bec61b5ad..000000000
--- a/rt/lib/t/regression/22search_tix_by_txn.t
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/perl
-
-use warnings;
-use strict;
-
-use Test::More tests => 10;
-
-BEGIN{ $ENV{'TZ'} = 'GMT'};
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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/lib/t/regression/22search_tix_by_watcher.t b/rt/lib/t/regression/22search_tix_by_watcher.t
deleted file mode 100644
index 204c41c37..000000000
--- a/rt/lib/t/regression/22search_tix_by_watcher.t
+++ /dev/null
@@ -1,279 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use warnings;
-
-use Test::More tests => 119;
-use_ok('RT');
-RT::LoadConfig();
-RT::Init();
-use RT::Ticket;
-
-my $q = RT::Queue->new( $RT::SystemUser );
-my $queue = 'SearchTests-'. rand(200);
-$q->Create( Name => $queue );
-
-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 = 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;
- }
-}
-
-@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 },
- );
- 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/lib/t/regression/23-batch-upload-csv.t b/rt/lib/t/regression/23-batch-upload-csv.t
deleted file mode 100644
index fc9436a20..000000000
--- a/rt/lib/t/regression/23-batch-upload-csv.t
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl -w
-use strict; use warnings;
-
-use Test::More qw/no_plan/;
-use_ok('RT');
-RT::LoadConfig();
-RT::Init();
-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' );
-ok($tix->Count);
-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/lib/t/regression/23-web_attachments.t b/rt/lib/t/regression/23-web_attachments.t
deleted file mode 100644
index adc38adb5..000000000
--- a/rt/lib/t/regression/23-web_attachments.t
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-
-use Test::More tests => 15;
-use RT;
-RT::LoadConfig;
-RT::Init;
-use Test::WWW::Mechanize;
-
-$RT::WebURL ||= 0; # avoid stupid warning
-my $BaseURL = $RT::WebURL;
-use constant LogoFile => $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif';
-use constant FaviconFile => $RT::MasonComponentRoot .'/NoAuth/images/favicon.png';
-
-my $queue_name = 'General';
-
-my $m = Test::WWW::Mechanize->new;
-isa_ok($m, 'Test::WWW::Mechanize');
-
-$m->get_ok( $BaseURL."?user=root;pass=password" );
-$m->content_like(qr/Logout/, 'we did log in');
-
-my $qid;
-{
- $m->content =~ /<SELECT\s+NAME\s*="Queue"\s*>.*?<OPTION\s+VALUE="(\d+)".*?>\s*\Q$queue_name\E\s*<\/OPTION>/msig;
- ok( $qid = $1, "found id of the '$queue_name' 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/lib/t/regression/23cfsort-freeform-multiple.t b/rt/lib/t/regression/23cfsort-freeform-multiple.t
deleted file mode 100644
index 453e83cf5..000000000
--- a/rt/lib/t/regression/23cfsort-freeform-multiple.t
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More tests => 24;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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.";
-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";
-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');
- 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 = (
- { },
- { 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/lib/t/regression/23cfsort-freeform-single.t b/rt/lib/t/regression/23cfsort-freeform-single.t
deleted file mode 100644
index 277befe0a..000000000
--- a/rt/lib/t/regression/23cfsort-freeform-single.t
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More tests => 57;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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.";
-my $queue_name = "CFSortQueue$$";
-my $queue;
-{
- $queue = RT::Queue->new( $RT::SystemUser );
- my ($ret, $msg) = $queue->Create(
- Name => $queue,
- 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";
-{
- $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');
- 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 = (
- { },
- { 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";
-{
- $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/lib/t/regression/23cfsort.t b/rt/lib/t/regression/23cfsort.t
deleted file mode 100644
index ba404f2ba..000000000
--- a/rt/lib/t/regression/23cfsort.t
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More tests => 21;
-use RT;
-RT::LoadConfig();
-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 lookign 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' );
-diag $tx->BuildSelectQuery;
-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' );
-diag $tx->BuildSelectQuery;
-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/lib/t/regression/24-watchers.t b/rt/lib/t/regression/24-watchers.t
deleted file mode 100644
index 69bc8acc6..000000000
--- a/rt/lib/t/regression/24-watchers.t
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/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 Test::More tests => 28;
-use RT;
-RT::LoadConfig();
-RT::Init();
-use strict;
-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" );
-
-# 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/lib/t/regression/24pawsort.t b/rt/lib/t/regression/24pawsort.t
deleted file mode 100644
index 665c325a6..000000000
--- a/rt/lib/t/regression/24pawsort.t
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More qw/no_plan/;
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-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/lib/t/regression/25scrip_order.t b/rt/lib/t/regression/25scrip_order.t
deleted file mode 100644
index 0e11989e6..000000000
--- a/rt/lib/t/regression/25scrip_order.t
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use Test::More tests => 7;
-
-use RT;
-RT::LoadConfig();
-RT::Init;
-
-# {{{ 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");
-
-ok($ticket->Priority != 0, "Ticket shouldn't be priority 0");
-ok($ticket->Priority != 5, "Ticket shouldn't be priority 5");
-ok($ticket->Priority == 10, "Ticket should be priority 10");
-
-# }}}
-
-1;
diff --git a/rt/lib/t/regression/26command_line.t b/rt/lib/t/regression/26command_line.t
deleted file mode 100644
index 702138303..000000000
--- a/rt/lib/t/regression/26command_line.t
+++ /dev/null
@@ -1,450 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use Test::Expect;
-#use Test::More qw/no_plan/;
-use Test::More tests => 222;
-
-use RT;
-RT::LoadConfig();
-RT::Init;
-
-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::WebBaseURL...");
-$ENV{'RTSERVER'} = $RT::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);
-
-
-
-# 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
-
- # add attachments to a ticket
- # text attachment
- check_attachment("$RT::BasePath/lib/t/data/lorem-ipsum");
- # 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');
-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/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/my CF$$: VALUE/i, 'Verified change');
-expect_send("ls 'id = $ticket_id' -f 'CF-my CF$$'", 'Checking new value');
-expect_like(qr/my CF$$: VALUE/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 -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');
-TODO: {
- local $TODO = "Cannot show verbose ticket history right now";
- # show ticket history verbosely
- expect_send("show -v ticket/$ticket_id/history", 'Showing our ticket\'s history verbosely...');
- expect_like(qr/Ticket created by root/, 'Got our history');
-}
-# get attachments from a ticket
-expect_send("show 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+:\s*\(\S+ \/ \d+\w+\)/, 'Our ticket has an attachment');
-expect_handle->before() =~ /Attachments: (\d+):\s*\((\S+)/;
-my $attachment_id = $1;
-my $attachment_type = $2;
-ok($attachment_id, "Got attachment id=$attachment_id $attachment_type");
-expect_send("show 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');
-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 'SeeTicket' 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');
-
- # log in as the non-root user
- #expect_quit(); # this is apparently unnecessary, but I'll leave it in
- # until I'm sure
- $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.');
-
- # log back in as root
- #expect_quit(); # ditto
- $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 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");
-
- }
-# }}}
-
-
-# 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/lib/t/regression/27verp.t b/rt/lib/t/regression/27verp.t
deleted file mode 100644
index 856681be1..000000000
--- a/rt/lib/t/regression/27verp.t
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use Test::More tests => 1;
-
-TODO: {
- todo_skip "No tests written for VERP yet", 1;
- ok(1,"a test to skip");
-}
diff --git a/rt/lib/t/regression/mime_tests b/rt/lib/t/regression/mime_tests
deleted file mode 100644
index 26e4dbf84..000000000
--- a/rt/lib/t/regression/mime_tests
+++ /dev/null
@@ -1,19 +0,0 @@
-use RT::Ticket;
-use RT::Queue;
-
-use MIME::Parser;
-use File::Temp;
-use RT::EmailParser;
-
-open (HANDLE, "data/nested-mime-sample");
-my $parser = RT::EmailParser->new()
- $parser->ParseMIMEEntityFromFileHandle(\*HANDLE);
-my $entity = $parser->Entity;
-
-my $q = RT::Queue->new($RT::SystemUser);
-$q->Load('general');
-ok ($q->Id, "Queue is loaded");
-my $Ticket = RT::Ticket->new($RT::SystemUser);
-my ($tid, $ttid, $msg) =$Ticket->Create( Queue => $q->Id, Subject => "Nested mime test", MIMEObj => $entity);
-ok ($tid, $msg);
-ok($Ticket->Id);
diff --git a/rt/lib/t/setup_regression.t b/rt/lib/t/setup_regression.t
deleted file mode 100644
index 36f809b65..000000000
--- a/rt/lib/t/setup_regression.t
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/perl
-
-use Test::More qw(no_plan);
-
-use RT;
-ok(RT::LoadConfig);
-ok(RT::Init, "Basic initialization and DB connectivity");
-
-# Create a new queue
-use_ok(RT::Queue);
-my $q = RT::Queue->new($RT::SystemUser);
-
-$q->Load('regression');
-if ($q->id != 0) {
- die "Regression tests not starting with a clean DB. Bailing";
-}
-
-my ($id, $msg) = $q->Create( Name => 'Regression',
- Description => 'A regression test queue',
- CorrespondAddress => 'correspond@a',
- CommentAddress => 'comment@a');
-
-isnt($id, 0, "Queue was created sucessfully - $msg");
-
-my $q2 = RT::Queue->new($RT::SystemUser);
-
-ok($q2->Load($id));
-is($q2->id, $id, "Sucessfully loaded the queue again");
-is($q2->Name, 'Regression');
-is($q2->Description, 'A regression test queue');
-is($q2->CorrespondAddress, 'correspond@a');
-is($q2->CommentAddress, 'comment@a');
-
-
diff --git a/rt/sbin/regression_harness b/rt/sbin/rt-session-viewer
index 7460135f2..4a9cf09aa 100644
--- a/rt/sbin/regression_harness
+++ b/rt/sbin/rt-session-viewer
@@ -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-2010 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -46,11 +46,76 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-open (FH,"make regression|");
+use strict;
+use warnings;
+
+# fix lib paths, some may be relative
+BEGIN {
+ require File::Spec;
+ my @libs = ("/opt/rt3/lib", "/opt/rt3/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, 'help|h', );
+
+my $session_id = shift;
+
+if ( $opt{help} || !$session_id ) {
+ require Pod::Usage;
+ Pod::Usage::pod2usage({ verbose => 2 });
+ exit;
+}
+
+require RT;
+RT::LoadConfig();
+RT::Init();
+
+require RT::Interface::Web::Session;
+my %session;
-my $skip_frontmatter = 1;
-while (<FH>) {
- next if /^ok/;
- $skip_frontmatter = 0 if (/autogen/);
- print $_ unless ($skip_frontmatter);
+tie %session, 'RT::Interface::Web::Session', $session_id;
+unless ( $session{'_session_id'} eq $session_id ) {
+ print STDERR "Couldn't load session $session_id\n";
+ exit 1;
}
+
+use Data::Dumper;
+print "Content of session $session_id: ". Dumper( \%session);
+
+__END__
+
+=head1 NAME
+
+rt-session-viewer - show the content of a user's session
+
+=head1 SYNOPSIS
+
+ # show the content of a session
+ rt-session-viewer 2c21c8a2909c14eff12975dd2cc7b9a3
+
+=head1 DESCRIPTION
+
+This script deserializes and print content of a session identified
+by <session id>. May be useful for developers and for troubleshooting
+problems.
+
+=cut
diff --git a/rt/sbin/extract_pod_tests b/rt/sbin/rt-session-viewer.in
index 897564daf..37e050a27 100644
--- a/rt/sbin/extract_pod_tests
+++ b/rt/sbin/rt-session-viewer.in
@@ -1,9 +1,9 @@
-#!/usr/bin/perl
+#!@PERL@
# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -47,113 +47,75 @@
#
# END BPS TAGGED BLOCK }}}
use strict;
-use vars qw($VERSION);
-$VERSION = '0.06';
-
-use Pod::Tests;
-use Symbol;
-
-=pod
-
-=head1 NAME
-
-extract_pod_tests - RT-specific variant of pod2tests
-
-=head1 SYNOPSIS
-
- pod2test [-Mmodule] [input [output]]
-
-=head1 DESCRIPTION
-
-B<pod2test> is a front-end for Test::Inline. It generates the
-"Bodies" of MakeMaker style .t testing files from embedded tests and
-code examples.
-
-If output is not specified, the resulting .t file will go to STDOUT.
-Otherwise, it will go to the given output file. If input is not
-given, it will draw from STDIN.
-
-If the given file contains no tests or code examples, no output will
-be given and no output file will be created.
-
-=cut
-
-my($infile, $outfile) = @ARGV;
-my($infh,$outfh);
-
-
-if( defined $infile ) {
- $infh = gensym;
- open($infh, $infile) or
- die "Can't open the POD file $infile: $!";
+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;
+ }
}
-else {
- $infh = \*STDIN;
-}
-
-unless ($outfile) {
- ( my $test = $infile ) =~ s/\.(pm|pod)$//;
- $test =~ s/^lib\W//;
- $test =~ s/\W/-/;
- $test =~ s/\//__/g;
-
- $outfile = "lib/t/autogen/autogen-$test.t";
-}
-
-my $p = Pod::Tests->new;
-$p->parse_fh($infh);
+use Getopt::Long;
+my %opt;
+GetOptions( \%opt, 'help|h', );
-# XXX Hack to put the filename into the #line directive
-$p->{file} = $infile || '';
+my $session_id = shift;
-my @tests = $p->build_tests($p->tests);
-my @examples = $p->build_examples($p->examples);
-
-exit unless @tests or @examples;
-
-
-if( defined $outfile) {
- $outfh = gensym;
- open($outfh, ">$outfile") or
- die "Can't open the test file $outfile: $!";
-}
-else {
- $outfh = \*STDOUT;
+if ( $opt{help} || !$session_id ) {
+ require Pod::Usage;
+ Pod::Usage::pod2usage({ verbose => 2 });
+ exit;
}
-
-print $outfh <<EOF;
-
-use Test::More qw/no_plan/;
-use RT;
+require RT;
RT::LoadConfig();
RT::Init();
-EOF
-foreach my $test (@tests, @examples) {
- print $outfh "$test\n";
-}
+require RT::Interface::Web::Session;
+my %session;
-print $outfh "1;\n";
-
-=pod
+tie %session, 'RT::Interface::Web::Session', $session_id;
+unless ( $session{'_session_id'} eq $session_id ) {
+ print STDERR "Couldn't load session $session_id\n";
+ exit 1;
+}
-=head1 BUGS and CAVEATS
+use Data::Dumper;
+print "Content of session $session_id: ". Dumper( \%session);
-This is a very simple rough cut. It only does very rudimentary tests
-on the examples.
+__END__
-=head1 AUTHOR
+=head1 NAME
+rt-session-viewer - show the content of a user's session
+=head1 SYNOPSIS
-Based on pod2tests by Michael G Schwern <schwern@pobox.com>
+ # show the content of a session
+ rt-session-viewer 2c21c8a2909c14eff12975dd2cc7b9a3
-=head1 SEE ALSO
+=head1 DESCRIPTION
-L<Test::Inline>
+This script deserializes and print content of a session identified
+by <session id>. May be useful for developers and for troubleshooting
+problems.
=cut
-
-1;
diff --git a/rt/sbin/rt-setup-database b/rt/sbin/rt-setup-database
deleted file mode 100644
index f413982ab..000000000
--- a/rt/sbin/rt-setup-database
+++ /dev/null
@@ -1,474 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use vars qw($Nobody $SystemUser $item);
-
-# 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
-BEGIN {
- use RT;
- RT::LoadConfig();
- RT::InitClasses();
-}
-
-use Term::ReadKey;
-use Getopt::Long;
-
-$| = 1; # unbuffer all output.
-
-my %args;
-GetOptions(
- \%args,
- 'action=s',
- 'force', 'debug',
- 'dba=s', 'dba-password=s', 'prompt-for-dba-password',
- 'datafile=s', 'datadir=s'
-);
-
-unless ( $args{'action'} ) {
- help();
- exit(-1);
-}
-
-# 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);
-}
-foreach ( @actions ) {
- unless ( /^(?:init|create|drop|schema|acl|coredata|insert|upgrade)$/ ) {
- print STDERR "$0 called with an invalid --action parameter.\n";
- exit(-1);
- }
- if ( /^(?:init|drop|upgrade)$/ && @actions > 1 ) {
- print STDERR "You can not mix init, drop or upgrade action with any action.\n";
- exit(-1);
- }
-}
-
-# convert init to multiple actions
-my $init = 0;
-if ( $actions[0] eq 'init' ) {
- @actions = qw(create schema acl coredata insert);
- $init = 1;
-}
-
-# 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 });
-}
-
-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') || '';
-
-# 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 );
-}
-
-my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || $db_user || '';
-my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'};
-
-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";
-
-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;
-
- print "Now creating a $db_type database $db_name for RT.\n";
- return RT::Handle->CreateDatabase( $dbh );
-}
-
-sub action_drop {
- my %args = @_;
-
- print "Dropping $db_type database $db_name.\n";
- unless ( $args{'force'} ) {
- print <<END;
-
-About to drop $db_type database $db_name on $db_host.
-WARNING: This will erase all data in $db_name.
-
-END
- exit(-2) unless _yesno();
- }
-
- my $dbh = get_system_dbh();
- return RT::Handle->DropDatabase( $dbh );
-}
-
-sub action_schema {
- my %args = @_;
- my $dbh = get_admin_dbh();
- my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
- return ($status, $msg) unless $status;
-
- print "Now populating database schema.\n";
- return RT::Handle->InsertSchema( $dbh, $args{'datafile'} || $args{'datadir'} );
-}
-
-sub action_acl {
- my %args = @_;
- my $dbh = get_admin_dbh();
- my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' );
- return ($status, $msg) unless $status;
-
- print "Now inserting database ACLs\n";
- return RT::Handle->InsertACL( $dbh, $args{'datafile'} || $args{'datadir'} );
-}
-
-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;
-
- 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 );
-}
-
-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;
-
- return (1, "The version $upgrading_to you're upgrading to is up to date")
- if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) == 0;
-
- my @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to);
-
- return (1, "No DB changes between $upgrading_from and $upgrading_to")
- unless @versions;
-
- print "\nGoing to apply following upgrades:\n";
- print map "* $_\n", @versions;
-
- {
- 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);
-
- return (1, "No DB changes between $upgrading_from and $upgrading_to")
- unless @versions;
-
- print "\nGoing to apply following upgrades:\n";
- print map "* $_\n", @versions;
- }
- }
-
- print "\nIT'S VERY IMPORTANT TO BACK UP BEFORE THIS STEP\n\n";
- _yesno() or exit(-2) unless $args{'force'};
-
- 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 );
- }
- if ( -e "$base_dir/$v/acl.$db_type" ) {
- action_acl( %tmp );
- }
- if ( -e "$base_dir/$v/content" ) {
- action_insert( %tmp );
- }
- }
- return 1;
-}
-
-sub get_versions_from_to {
- my ($base_dir, $from, $to) = @_;
-
- 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;
-}
-
-sub error {
- my ($action, $msg) = @_;
- print STDERR "Couldn't finish '$action' step.\n\n";
- print STDERR "ERROR: $msg\n\n";
- exit(-1);
-}
-
-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);
-}
-
-=head2 get_system_dbh
-
-Returns L<DBI> database handle connected to B<system> with DBA credentials.
-
-See also L<RT::Handle/SystemDSN>.
-
-=cut
-
-sub get_system_dbh {
- return _get_dbh( RT::Handle->SystemDSN, $dba_user, $dba_pass );
-}
-
-sub get_admin_dbh {
- return _get_dbh( RT::Handle->DSN, $dba_user, $dba_pass );
-}
-
-=head2 get_rt_dbh [USER, PASSWORD]
-
-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.
-
-=cut
-
-sub get_rt_dbh {
- return _get_dbh( RT::Handle->DSN, $db_user, $db_pass );
-}
-
-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;
- }
- }
- return $dbh;
-}
-
-sub _yesno {
- print "Proceed [y/N]:";
- my $x = scalar(<STDIN>);
- $x =~ /^y/i;
-}
-
-sub help {
-
- print <<EOF;
-
-$0: Set up RT's database
-
---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.
-
- 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.
-
-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.
-
-
---dba dba's username
---dba-password dba's password
---prompt-for-dba-password Ask for the database administrator's password interactively
-
-
-EOF
-
-}
-
-1;
diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in
index 2817ba35c..d157a6b04 100644
--- a/rt/sbin/rt-setup-database.in
+++ b/rt/sbin/rt-setup-database.in
@@ -150,7 +150,9 @@ if ( $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name) ) {
}
my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || $db_user || '';
-my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'};
+my $dba_pass = exists($args{'dba-password'})
+ ? $args{'dba-password'}
+ : $ENV{'RT_DBA_PASSWORD'};
if ( !$args{force} && ( !defined $dba_pass || $args{'prompt-for-dba-password'} ) ) {
$dba_pass = get_dba_password();
@@ -339,7 +341,7 @@ sub action_upgrade {
sub get_versions_from_to {
my ($base_dir, $from, $to) = @_;
- opendir( my $dh, $base_dir ) or die "couldn't open dir: $!";
+ opendir my $dh, $base_dir or die "couldn't open dir: $!";
my @versions = grep -d "$base_dir/$_" && /\d+\.\d+\.\d+/, readdir $dh;
closedir $dh;
diff --git a/rt/sbin/rt-test-dependencies b/rt/sbin/rt-test-dependencies
deleted file mode 100644
index 18e7c06aa..000000000
--- a/rt/sbin/rt-test-dependencies
+++ /dev/null
@@ -1,601 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
-# <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-#
-# This is just a basic script that checks to make sure that all
-# the modules needed by RT before you can install it.
-#
-
-use strict;
-no warnings qw(numeric redefine);
-use Getopt::Long;
-my %args;
-my %deps;
-GetOptions(
- \%args, 'v|verbose',
- 'install', 'with-MYSQL',
- 'with-POSTGRESQL|with-pg|with-pgsql', 'with-SQLITE',
- 'with-ORACLE', 'with-FASTCGI', 'with-FASTCGI-SERVER',
- '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',
- 'list-deps'
-);
-
-unless (keys %args) {
- help();
- exit(1);
-}
-
-# Set up defaults
-my %default = (
- 'with-MASON' => 1,
- 'with-CORE' => 1,
- 'with-CLI' => 1,
- 'with-MAILGATE' => 1,
- 'with-DEV' => 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 = (
- perl => 1,
- users => 1,
- );
-
- sub section {
- my $s = shift;
- $section = $s;
- print "$s:\n" unless $args{'list-deps'};
- }
-
- sub print_found {
- my $msg = shift;
- my $test = shift;
- my $extra = shift;
-
- 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;
- }
- }
-}
-
-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};
- my $error = $module->{error};
- print_found( $name . ( $version && !$error ? " >= $version" : "" ),
- 0, $module->{error} );
- }
- }
- exit 1;
- }
-}
-
-
-sub help {
-
- print <<'.';
-
-By default, testdeps determine whether you have
-installed all the perl modules RT needs to run.
-
- --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-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-server Libraries needed to support the external fastcgi 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
-
-You can also specify -v or --verbose to list the status of all dependencies,
-rather than just the missing ones.
-
-The "RT_FIX_DEPS_CMD" environment variable, if set, will be used
-instead of the standard CPAN shell by --install to install any
-required modules. It will be called with the module name, or, if
-"RT_FIX_DEPS_CMD" contains a "%s", will replace the "%s" with the
-module name before calling the program.
-.
-}
-
-
-sub text_to_hash {
- my %hash;
- for my $line ( split /\n/, $_[0] ) {
- my($key, $value) = $line =~ /(\S+)\s*(\S*)/;
- $value ||= '';
- $hash{$key} = $value;
- }
-
- return %hash;
-}
-
-$deps{'CORE'} = [ text_to_hash( << '.') ];
-Digest::base
-Digest::MD5 2.27
-Digest::SHA
-DBI 1.37
-Class::ReturnValue 0.40
-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.425
-Mail::Mailer 1.57
-Email::Address
-Text::Wrapper
-Time::ParseDate
-Time::HiRes
-File::Temp 0.19
-Text::Quoted 2.02
-Tree::Simple 1.04
-UNIVERSAL::require
-Regexp::Common
-Scalar::Util
-Module::Versions::Report 1.05
-Cache::Simple::TimedExpiry
-Calendar::Simple
-Encode 2.21
-CSS::Squish 0.06
-File::Glob
-Devel::StackTrace 1.19
-.
-
-$deps{'MASON'} = [ text_to_hash( << '.') ];
-HTML::Mason 1.36
-Errno
-Digest::MD5 2.27
-CGI::Cookie 1.20
-Storable 2.08
-Apache::Session 1.53
-XML::RSS 1.05
-Text::WikiFormat 0.76
-CSS::Squish 0.06
-Devel::StackTrace 1.19
-.
-
-$deps{'STANDALONE'} = [ text_to_hash( << '.') ];
-HTTP::Server::Simple 0.34
-HTTP::Server::Simple::Mason 0.14
-Net::Server
-.
-
-$deps{'MAILGATE'} = [ text_to_hash( << '.') ];
-HTML::TreeBuilder
-HTML::FormatText
-Getopt::Long
-LWP::UserAgent
-Pod::Usage
-.
-
-$deps{'CLI'} = [ text_to_hash( << '.') ];
-Getopt::Long 2.24
-LWP
-HTTP::Request::Common
-Text::ParseWords
-Term::ReadLine
-Term::ReadKey
-.
-
-$deps{'DEV'} = [ text_to_hash( << '.') ];
-HTML::Form
-HTML::TokeParser
-WWW::Mechanize
-Test::WWW::Mechanize 1.04
-Module::Refresh 0.03
-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
-Log::Dispatch::Perl
-.
-
-$deps{'FASTCGI'} = [ text_to_hash( << '.') ];
-CGI 3.38
-FCGI
-CGI::Fast
-.
-
-$deps{'FASTCGI-SERVER'} = [ text_to_hash( << '.') ];
-CGI 3.38
-CGI::Fast
-FCGI::ProcManager
-File::Basename
-File::Spec
-Getopt::Long
-Pod::Usage
-.
-
-$deps{'SPEEDYCGI'} = [ text_to_hash( << '.') ];
-CGI 3.38
-CGI::SpeedyCGI
-.
-
-
-$deps{'MODPERL1'} = [ text_to_hash( << '.') ];
-CGI 3.38
-Apache::Request
-Apache::DBI 0.92
-.
-
-$deps{'MODPERL2'} = [ text_to_hash( << '.') ];
-CGI 3.38
-Apache::DBI
-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
-.
-
-$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
-.
-
-my %AVOID = (
- 'DBD::Oracle' => [qw(1.23)],
-);
-
-if ($args{'download'}) {
- download_mods();
-}
-
-
-check_perl_version();
-
-check_users();
-
-my %Missing_By_Type = ();
-foreach my $type (sort grep $args{$_}, keys %args) {
- next unless ($type =~ /^with-(.*?)$/);
-
- $type = $1;
- section("$type dependencies");
-
- my @missing;
- my @deps = @{ $deps{$type} };
-
- my %missing = test_deps(@deps);
-
- if ( $args{'install'} ) {
- for my $module (keys %missing) {
- resolve_dep($module, $missing{$module}{version});
- delete $missing{$module}
- if test_dep($module, $missing{$module}{version}, $AVOID{$module});
- }
- }
-
- $Missing_By_Type{$type} = \%missing if keys %missing;
-}
-
-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, $AVOID{$module});
- my $msg = $module . ($version && !$error ? " >= $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;
- my $avoid = shift;
-
- if ( $args{'list-deps'} ) {
- print $module, ': ', $version || 0, "\n";
- }
- else {
- eval "use $module $version ()";
- if ( my $error = $@ ) {
- return 0 unless wantarray;
-
- $error =~ s/\n(.*)$//s;
- $error =~ s/at \(eval \d+\) line \d+\.$//;
- undef $error if $error =~ /this is only/;
-
- return ( 0, $error );
- }
-
- if ( $avoid ) {
- my $version = $module->VERSION;
- if ( grep $version eq $_, @$avoid ) {
- return 0 unless wantarray;
- return (0, "It's known that there are problems with RT and version '$version' of '$module' module. If it's the latest available version of the module then you have to downgrade manually.");
- }
- }
-
- return 1;
- }
-}
-
-sub resolve_dep {
- my $module = shift;
- my $version = shift;
-
- print "\nInstall module $module\n";
-
- my $ext = $ENV{'RT_FIX_DEPS_CMD'};
- unless( $ext ) {
- my $configured = 1;
- {
- local @INC = @INC;
- if ( $ENV{'HOME'} ) {
- unshift @INC, "$ENV{'HOME'}/.cpan";
- }
- $configured = eval { require CPAN::MyConfig } || eval { require CPAN::Config };
- }
- unless ( $configured ) {
- print <<END;
-You haven't configured the CPAN shell yet.
-Please run `/usr/bin/perl -MCPAN -e shell` to configure it.
-END
- exit(1);
- }
- my $rv = eval { require CPAN; CPAN::Shell->install($module) };
- return $rv unless $@;
-
- print <<END;
-Failed to load module CPAN.
-
--------- Error ---------
-$@
-------------------------
-
-When we tried to start installing RT's perl dependencies,
-we were unable to load the CPAN client. This module is usually distributed
-with Perl. This usually indicates that your vendor has shipped an unconfigured
-or incorrectly configured CPAN client.
-The error above may (or may not) give you a hint about what went wrong
-
-You have several choices about how to install dependencies in
-this situatation:
-
-1) use a different tool to install dependencies by running setting the following
- shell environment variable and rerunning this tool:
- RT_FIX_DEPS_CMD='/usr/bin/perl -MCPAN -e"install %s"'
-2) Attempt to configure CPAN by running:
- `/usr/bin/perl -MCPAN -e shell` program from shell.
- If this fails, you may have to manually upgrade CPAN (see below)
-3) Try to update the CPAN client. Download it from:
- http://search.cpan.org/dist/CPAN and try again
-4) Install each dependency manually by downloading them one by one from
- http://search.cpan.org
-
-END
- exit(1);
- }
-
- if( $ext =~ /\%s/) {
- $ext =~ s/\%s/$module/g; # sprintf( $ext, $module );
- } else {
- $ext .= " $module";
- }
- print "\t\tcommand: '$ext'\n";
- return scalar `$ext 1>&2`;
-}
-
-sub download_mods {
- my %modules;
- use CPAN;
-
- foreach my $key (keys %deps) {
- my @deps = (@{$deps{$key}});
- while (@deps) {
- my $mod = shift @deps;
- my $ver = shift @deps;
- next if ($mod =~ /^(DBD-|Apache-Request)/);
- $modules{$mod} = $ver;
- }
- }
- my @mods = keys %modules;
- CPAN::get();
- my $moddir = $args{'download'};
- foreach my $mod (@mods) {
- $CPAN::Config->{'build_dir'} = $moddir;
- CPAN::get($mod);
- }
-
- opendir(DIR, $moddir);
- while ( my $dir = readdir(DIR)) {
- print "Dir is $dir\n";
- next if ( $dir =~ /^\.\.?$/);
-
- # Skip things we've previously tagged
- my $out = `svn ls $args{'repository'}/tags/$dir`;
- next if ($out);
-
- if ($dir =~ /^(.*)-(.*?)$/) {
- `svn_load_dirs -no_user_input -t tags/$dir -v $args{'repository'} dists/$1 $moddir/$dir`;
- `rm -rf $moddir/$dir`;
-
- }
-
- }
- closedir(DIR);
- exit;
-}
-
-sub check_perl_version {
- section("perl");
- eval {require 5.008003};
- if ($@) {
- 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 {
- print_found( sprintf(">=5.8.3(%vd)", $^V), 1 );
- }
-}
-
-sub check_users {
- section("users");
- 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"));
-}
-
-
-
-1;
diff --git a/rt/share/html/Admin/CustomFields/Modify.html b/rt/share/html/Admin/CustomFields/Modify.html
index c94c560ec..5ef32127b 100644
--- a/rt/share/html/Admin/CustomFields/Modify.html
+++ b/rt/share/html/Admin/CustomFields/Modify.html
@@ -82,6 +82,14 @@
Default => $CustomFieldObj->LookupType, &>
</td></tr>
+% if ( $CustomFieldObj->Id
+% and $CustomFieldObj->LookupType =~ /RT::Transaction/ ) {
+<tr><td class="label"><&|/l&>Display&nbsp;with</&></td>
+<td><& /Admin/Elements/EditCustomFieldUILocation,
+ CustomField => $CustomFieldObj &>
+</td></tr>
+% }
+
<tr><td class="label"><&|/l&>Validation</&></td>
<td><& /Widgets/ComboBox,
Name => 'Pattern',
@@ -119,6 +127,11 @@
% }
<tr><td class="label">&nbsp;</td><td>
+<input type="checkbox" class="checkbox" name="Required" value="1" <% $RequiredChecked |n%> />
+<&|/l&>Required for ticket resolution</&>
+</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)</&>
@@ -171,11 +184,12 @@ else {
}
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;
+
+ $ARGS{'Required'} ||= 0;
- my @attribs = qw(Disabled Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
+ my @attribs = qw(Disabled Required Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
push @results, UpdateRecordObject(
AttributesRef => \@attribs,
Object => $CustomFieldObj,
@@ -185,6 +199,8 @@ if ( $ARGS{'Update'} && $id ne 'new' ) {
$CustomFieldObj->SetBasedOn( $BasedOn );
+ $CustomFieldObj->SetUILocation( $UILocation );
+
my $paramtag = "CustomField-". $CustomFieldObj->Id ."-Value";
# Delete any fields that want to be deleted
foreach my $key ( keys %ARGS ) {
@@ -193,6 +209,15 @@ if ( $ARGS{'Update'} && $id ne 'new' ) {
push (@results, $msg);
}
+ # Clean up values
+ foreach my $param (grep /^$paramtag-/, keys(%ARGS)) {
+ for ($ARGS{$param}) {
+ s/\r+\n/\n/g;
+ s/^\s+//;
+ s/\s+$//;
+ }
+ }
+
# Update any existing values
my $values = $CustomFieldObj->ValuesObj;
while ( my $value = $values->Next ) {
@@ -202,7 +227,6 @@ if ( $ARGS{'Update'} && $id ne 'new' ) {
$ARGS{$param} =~ s/^\s+//;
$ARGS{$param} =~ s/\s+$//;
next if ($value->$attr()||'') eq ($ARGS{$param}||'');
-
my $mutator = "Set$attr";
my ($id, $msg) = $value->$mutator( $ARGS{$param} );
push (@results, $msg);
@@ -226,6 +250,9 @@ $id = $CustomFieldObj->id if $CustomFieldObj->id;
my $EnabledChecked = qq[checked="checked"];
$EnabledChecked = '' if $CustomFieldObj->Disabled;
+my $RequiredChecked = '';
+$RequiredChecked = qq[checked="checked"] if $CustomFieldObj->Required;
+
my @CFvalidations = (
'(?#Mandatory).',
'(?#Digits)^[\d.]+$',
@@ -250,4 +277,5 @@ $ValuesClass => 'RT::CustomFieldValues'
$LinkValueTo => undef
$IncludeContentForValue => undef
$BasedOn => undef
+$UILocation => undef
</%ARGS>
diff --git a/rt/html/Elements/SelectResultsPerPage b/rt/share/html/Admin/Elements/EditCustomFieldUILocation
index 4b1fa7f0c..9cffafabb 100644
--- a/rt/html/Elements/SelectResultsPerPage
+++ b/rt/share/html/Admin/Elements/EditCustomFieldUILocation
@@ -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,22 @@
%# 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': '' %>>
-<% shift @labels %>
-</option>
+<div id="ui-location-class-block">
+<select name="UILocation">
+% foreach my $tag (@tags) {
+<option value="<% $tag %>" <% $tag eq $CustomField->UILocation && 'selected="selected"' %>><% $description{$tag} %></option>
% }
</select>
+</div>
<%INIT>
-my @values = qw(0 10 25 50 100);
-my @labels = (loc('Unlimited'), qw(10 25 50 100));
-$Default = 50 unless defined $Default;
+my @sources;
+my @tags = ( '', 'TimeWorked' );
+my %description = (
+ '' => 'Custom fields',
+ 'TimeWorked' => 'Time Worked',
+);
</%INIT>
<%ARGS>
-
-$Name => undef
-$Default => 50
-
+$CustomField => undef
</%ARGS>
diff --git a/rt/share/html/Admin/Elements/EditCustomFields b/rt/share/html/Admin/Elements/EditCustomFields
index 91d5cffaa..bf65c9e37 100755
--- a/rt/share/html/Admin/Elements/EditCustomFields
+++ b/rt/share/html/Admin/Elements/EditCustomFields
@@ -59,7 +59,10 @@
Rows => 0,
Page => 1,
Format => $format,
- DisplayFormat => $display_format,
+ DisplayFormat =>
+ $id
+ ? ("'__RemoveCheckBox.{$id}__',". $format .", '__MoveCF.{$id}__'")
+ : ("'__CheckBox.{RemoveCustomField}__',". $format .", '__MoveCF.{$id}__'"),
AllowSorting => 0,
ShowEmpty => 0,
PassArguments => [
@@ -148,8 +151,6 @@ if ( $UpdateCFs ) {
}
}
-$m->callback(CallbackName => 'UpdateExtraFields', Results => \@results, Object => $Object, %ARGS);
-
my $applied_cfs = RT::CustomFields->new( $session{'CurrentUser'} );
$applied_cfs->LimitToLookupType($lookup);
$applied_cfs->LimitToGlobalOrObjectId($id);
@@ -161,11 +162,6 @@ $not_applied_cfs->LimitToNotApplied( $id ? ($id, 0) : (0) );
my $format = RT->Config->Get('AdminSearchResultFormat')->{'CustomFields'};
-my $display_format = $id
- ? ("'__RemoveCheckBox.{$id}__',". $format .", '__MoveCF.{$id}__'")
- : ("'__CheckBox.{RemoveCustomField}__',". $format .", '__MoveCF.{$id}__'");
-$m->callback(CallbackName => 'EditDisplayFormat', DisplayFormat => \$display_format, id => $id);
-
</%INIT>
<%ARGS>
$Object
diff --git a/rt/share/html/Admin/Elements/EditScrip b/rt/share/html/Admin/Elements/EditScrip
index eed23ff31..c2e9de19f 100755
--- a/rt/share/html/Admin/Elements/EditScrip
+++ b/rt/share/html/Admin/Elements/EditScrip
@@ -64,14 +64,32 @@
<& /Admin/Elements/SelectScripCondition,
Name => "Scrip-$id-ScripCondition",
Default => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
+ ScripObj => $scrip,
+ Queue => $Queue,
&></td></tr>
+<& /Admin/Elements/EditScripOptions,
+ Name => "Condition",
+ Default => $ARGS{"Scrip-$id-ConditionRules"} || $scrip->ConditionRules,
+ Queue => $Queue,
+ ScripX => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id,
+&>
+
<tr><td align="right"><&|/l&>Action</&>:</td><td>
<& /Admin/Elements/SelectScripAction,
Name => "Scrip-$id-ScripAction",
Default => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
+ ScripObj => $scrip,
+ Queue => $Queue,
&></td></tr>
+<& /Admin/Elements/EditScripOptions,
+ Name => "Action",
+ Default => $ARGS{"Scrip-$id-ActionRules"} || $scrip->ActionRules,
+ Queue => $Queue,
+ ScripX => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id,
+&>
+
<tr><td align="right"><&|/l&>Template</&>:</td><td>
<& /Admin/Elements/SelectTemplate,
Name => "Scrip-$id-Template",
@@ -165,6 +183,18 @@ $Queue => undef
<%INIT>
return ($id) unless $id;
+my @rules = ('ConditionRules', 'ActionRules');
+if ( exists($ARGS{"Scrip-$id-ScripCondition"}) ) {
+ foreach my $rules (@rules) {
+ my $prefix = join('-', 'Scrip', $id, $rules);
+ $ARGS{$prefix} = join("\n", map {
+ $_ =~ /^$rules-(.*)$/ ?
+ ($1, $ARGS{$_}) : ()
+ } keys(%ARGS)
+ );
+ }
+}
+
my $scrip = RT::Scrip->new( $session{'CurrentUser'} );
if ( $id eq 'new' ) {
return $scrip->Create(
@@ -177,6 +207,8 @@ if ( $id eq 'new' ) {
CustomCommitCode => $ARGS{"Scrip-new-CustomCommitCode"},
CustomIsApplicableCode => $ARGS{"Scrip-new-CustomIsApplicableCode"},
Stage => $ARGS{"Scrip-new-Stage"},
+ ConditionRules => $ARGS{"Scrip-new-ConditionRules"},
+ ActionRules => $ARGS{"Scrip-new-ActionRules"},
);
}
else {
@@ -185,7 +217,8 @@ else {
unless $scrip->id;
my @attribs = qw(Queue ScripAction ScripCondition Template Stage
- Description CustomPrepareCode CustomCommitCode CustomIsApplicableCode);
+ Description CustomPrepareCode CustomCommitCode CustomIsApplicableCode
+ ConditionRules ActionRules);
my @results = UpdateRecordObject(
AttributesRef => \@attribs,
AttributePrefix => 'Scrip-'.$scrip->Id,
diff --git a/rt/share/html/Admin/Elements/EditScripOptions b/rt/share/html/Admin/Elements/EditScripOptions
new file mode 100644
index 000000000..7b3848419
--- /dev/null
+++ b/rt/share/html/Admin/Elements/EditScripOptions
@@ -0,0 +1,44 @@
+% return if !@options;
+<tr><td></td><td><table>
+% my $prefix = $Name.'Rules-';
+% foreach my $o (@options) {
+ <tr><td align="right"><% $o->{'label'} %>:</td>
+ <td>
+% if ( $o->{'type'} eq 'text' ) {
+ <input type="text" name="<% $prefix.$o->{'name'} %>" value="<% $rules{$o->{'name'}} %>">
+% }
+% elsif ( $o->{'type'} eq 'select' and ref $o->{'options'} ) {
+ <select name="<% $prefix.$o->{'name'} %>">
+% my @choices = @{ $o->{'options'} };
+% while (@choices) {
+% my $v = shift @choices;
+% my $l = shift @choices;
+ <option value="<% $v %>"<% ($rules{$o->{'name'}} eq $v) ? ' SELECTED' : ''%>>
+ <% $l %></option>
+% }
+ </select>
+% } # else $o->{'type'}
+</td></tr>
+% } #foreach $o
+</table></td></tr>
+
+<%INIT>
+my (@options, %rules);
+if ( $ScripX ) {
+ my $ScripXObj = "RT::Scrip$Name"->new($session{'CurrentUser'});
+ $ScripXObj->Load($ScripX);
+ my $QueueObj = RT::Queue->new($session{'CurrentUser'});
+ $QueueObj->Load($Queue);
+ my $method = "Load$Name";
+ my $XObj = $ScripXObj->$method();
+ @options = $XObj->Options('QueueObj' => $QueueObj);
+ %rules = split("\n", $Default);
+}
+</%INIT>
+
+<%ARGS>
+$Name => undef
+$Default => undef
+$Queue => 0
+$ScripX => undef
+</%ARGS>
diff --git a/rt/share/html/Admin/Elements/SelectScripAction b/rt/share/html/Admin/Elements/SelectScripAction
index 425028dba..4dd39f55b 100755
--- a/rt/share/html/Admin/Elements/SelectScripAction
+++ b/rt/share/html/Admin/Elements/SelectScripAction
@@ -45,7 +45,10 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<%$Name%>">
+<select name="<%$Name%>"
+onchange="var idobj = document.getElementsByName('id')[0];
+if (idobj.value=='new') idobj.value = '';
+form.submit()">
<option value=""
<% ! defined $Default && qq[ selected="selected"] |n %>
>-</option>
diff --git a/rt/share/html/Admin/Elements/SelectScripCondition b/rt/share/html/Admin/Elements/SelectScripCondition
index b1dc5b0dd..67438a72a 100755
--- a/rt/share/html/Admin/Elements/SelectScripCondition
+++ b/rt/share/html/Admin/Elements/SelectScripCondition
@@ -45,7 +45,10 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<select name="<%$Name%>">
+<select name="<%$Name%>"
+onchange="var idobj = document.getElementsByName('id')[0];
+if (idobj.value=='new') idobj.value = '';
+form.submit()">
<option value=""
<% ! defined $Default && qq[ selected="selected"] %>
>-</option>
diff --git a/rt/share/html/Admin/Users/Modify.html b/rt/share/html/Admin/Users/Modify.html
index 09c0c6c97..28d594377 100755
--- a/rt/share/html/Admin/Users/Modify.html
+++ b/rt/share/html/Admin/Users/Modify.html
@@ -105,6 +105,12 @@
</table>
</&>
<br />
+
+<&| /Widgets/TitleBox, title => loc('Customers') &>
+<& /Elements/EditCustomers, Object => $UserObj, CustomerString=> $CustomerString, ServiceString => $ServiceString &>
+</&>
+<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%> />
@@ -330,6 +336,8 @@ if ($UserObj->Id && $id ne 'new') {
push (@results,@fieldresults);
push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
+ #deal with freeside customer links
+ push @results, ProcessObjectCustomers( ARGSRef => \%ARGS, Object => $UserObj );
# {{{ Deal with special fields: Privileged, Enabled
if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
@@ -418,4 +426,8 @@ $CurrentPass => undef
$Pass1 => undef
$Pass2 => undef
$Create=> undef
+$OnlySearchForCustomers => undef
+$OnlySearchForServices => undef
+$CustomerString => undef
+$ServiceString => undef
</%ARGS>
diff --git a/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default
new file mode 100644
index 000000000..2c0698ec2
--- /dev/null
+++ b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default
@@ -0,0 +1,12 @@
+<%doc>
+If mandatory fields aren't set yet, point the "Resolve" link back
+to "Ticket Basics".
+</%doc>
+<%init>
+my $TicketObj = delete($ARGS{'Ticket'});
+my $actions = $ARGS{'actions'};
+if( $m->comp('/Ticket/Elements/CheckMandatoryFields', Ticket => $TicketObj)
+ ) {
+ $actions->{'G'}->{'path'} = 'Ticket/Modify.html?id='.$TicketObj->Id.'&resolve=1';
+}
+</%init>
diff --git a/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList
new file mode 100644
index 000000000..4779411ce
--- /dev/null
+++ b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList
@@ -0,0 +1,15 @@
+<%init>
+use Data::Dumper;
+my $ARGSRef = $ARGS{'ARGSRef'};
+my $TicketObj = $ARGS{'Ticket'};
+my $results = $ARGS{'Actions'};
+if(defined($ARGSRef->{'resolve'})) {
+ my @errors =
+ $m->comp('/Ticket/Elements/CheckMandatoryFields', Ticket => $TicketObj);
+ return if !@errors;
+ my $msg = 'Missing required field'.(@errors > 1 ? 's' : '').': ' .
+ join(', ', map { $_->Name } @errors);
+ $m->notes( ('InvalidField-' . $_->Id) => 'Required' ) foreach @errors;
+ push @$results, $msg;
+}
+</%init>
diff --git a/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay
new file mode 100644
index 000000000..0d69bc27b
--- /dev/null
+++ b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay
@@ -0,0 +1,24 @@
+<%doc>
+When the user tries to change a ticket's status to "resolved" through
+the Update interface, check mandatory fields. If they aren't all set,
+redirect to Ticket Basics instead of updating. Note that this will
+lose any comments/time/other information the user has entered.
+</%doc>
+
+<%init>
+my $TicketObj = $ARGS{'Ticket'};
+my $ARGSRef = $ARGS{'ARGSRef'};
+my $oldStatus = $TicketObj->Status();
+my $newStatus = $ARGSRef->{'Status'} || $ARGSRef->{'DefaultStatus'};
+if( $oldStatus ne 'resolved' and
+ $newStatus eq 'resolved' and
+ $m->comp('/Ticket/Elements/CheckMandatoryFields',
+ Ticket => $TicketObj
+ ) ) {
+ $m->clear_buffer;
+ RT::Interface::Web::Redirect(
+ RT->Config->Get('WebURL')."Ticket/Modify.html?id=".$TicketObj->Id."&resolve=1"
+ );
+ $m->abort;
+}
+</%init>
diff --git a/rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head b/rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head
new file mode 100644
index 000000000..c1f24c2b4
--- /dev/null
+++ b/rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head
@@ -0,0 +1,2 @@
+<link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/css/calendar.css" type="text/css" media="all" />
+
diff --git a/rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default b/rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default
new file mode 100644
index 000000000..cb46fdaf6
--- /dev/null
+++ b/rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default
@@ -0,0 +1,19 @@
+<%init>
+my $args;
+$args= "?" . $m->comp(
+ '/Elements/QueryString',
+ 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'},
+ Rows => $ARGS{'Rows'},
+ ) if ($ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'});
+$args ||= '';
+
+$tabs->{'zz'} = { title =>loc("Calendar"),
+ path => "Search/Calendar.html$args" };
+</%init>
+<%args>
+$tabs
+</%args>
diff --git a/rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default b/rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default
new file mode 100644
index 000000000..06413e278
--- /dev/null
+++ b/rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default
@@ -0,0 +1,9 @@
+<%init>
+ $tabs->{'z'} = { title =>loc("Calendar"),
+ path => "Prefs/Calendar.html" };
+</%init>
+<%args>
+$tabs
+$current_subtab => undef
+$Searches => undef
+</%args>
diff --git a/rt/share/html/Callbacks/RTx-Statistics/Elements/Tabs/Default b/rt/share/html/Callbacks/RTx-Statistics/Elements/Tabs/Default
new file mode 100644
index 000000000..d4ca2b95e
--- /dev/null
+++ b/rt/share/html/Callbacks/RTx-Statistics/Elements/Tabs/Default
@@ -0,0 +1,11 @@
+<%init>
+use RTx::Statistics;
+if (($Statistics::RestrictAccess == 0) || ($session{'CurrentUser'}->HasRight( Right => 'ShowConfigTab',
+ Object => $RT::System ))) {
+ $toptabs->{'ZZ-RTx-STATS'} = { title => 'RTx-Statistics',
+ path => "RTx/Statistics/index.html" };
+}
+</%init>
+<%args>
+ $toptabs =>undef
+</%args>
diff --git a/rt/share/html/Callbacks/Results-XLS/Search/Elements/ResultViews/AfterTools b/rt/share/html/Callbacks/Results-XLS/Search/Elements/ResultViews/AfterTools
new file mode 100644
index 000000000..c84e6602d
--- /dev/null
+++ b/rt/share/html/Callbacks/Results-XLS/Search/Elements/ResultViews/AfterTools
@@ -0,0 +1,4 @@
+<li><a href="<%RT->Config->Get('WebPath')%>/Search/Results.xls<%$QueryString%>"><&|/l&>XLS</&></a></li>
+<%ARGS>
+$QueryString => undef
+</%ARGS>
diff --git a/rt/share/html/Callbacks/SearchCustomerFields/Search/Elements/PickBasics/Default b/rt/share/html/Callbacks/SearchCustomerFields/Search/Elements/PickBasics/Default
new file mode 100644
index 000000000..abbafbcf1
--- /dev/null
+++ b/rt/share/html/Callbacks/SearchCustomerFields/Search/Elements/PickBasics/Default
@@ -0,0 +1,46 @@
+<%init>
+push @$Conditions,
+ {
+ Name => 'Agentnum',
+ Field => 'Agent',
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectCustomerAgent',
+ },
+ },
+ {
+ Name => 'Classnum',
+ Field => 'Customer Class',
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectCustomerClass',
+ },
+ },
+ {
+ Name => 'Tagnum',
+ Field => 'Tag',
+ Op => {
+ Type => 'component',
+ Path => '/Elements/SelectBoolean',
+ Arguments => { TrueVal=> '=', FalseVal => '!=' },
+ },
+ Value => {
+ Type => 'component',
+ Path => '/Elements/SelectCustomerTag',
+ },
+ },
+;
+</%init>
+<%ARGS>
+$Conditions => []
+</%ARGS>
diff --git a/rt/share/html/Callbacks/TimeToResolve/Elements/RT__Ticket/ColumnMap/Once b/rt/share/html/Callbacks/TimeToResolve/Elements/RT__Ticket/ColumnMap/Once
new file mode 100644
index 000000000..df5d29e14
--- /dev/null
+++ b/rt/share/html/Callbacks/TimeToResolve/Elements/RT__Ticket/ColumnMap/Once
@@ -0,0 +1,13 @@
+<%init>
+$COLUMN_MAP->{'TimeToResolve'} = {
+ title => 'Time to Resolve',
+ attribute => 'Resolved',
+ value => sub {
+ my $r = $_[0]->ResolvedObj or return '';
+ return $r->DiffAsString($_[0]->CreatedObj);
+ }
+};
+</%init>
+<%ARGS>
+$COLUMN_MAP => {}
+</%ARGS>
diff --git a/rt/share/html/Callbacks/TimeToResolve/Search/Elements/BuildFormatString/SetFieldsOnce b/rt/share/html/Callbacks/TimeToResolve/Search/Elements/BuildFormatString/SetFieldsOnce
new file mode 100644
index 000000000..54dcae04c
--- /dev/null
+++ b/rt/share/html/Callbacks/TimeToResolve/Search/Elements/BuildFormatString/SetFieldsOnce
@@ -0,0 +1,8 @@
+<%init>
+my $i = 1;
+$i++ until ($i == scalar(@$Fields) or $Fields->[$i-1] =~ /^Resolved/);
+splice @$Fields, $i, 0, 'TimeToResolve';
+</%init>
+<%ARGS>
+$Fields => []
+</%ARGS>
diff --git a/rt/share/html/Elements/AddCustomers b/rt/share/html/Elements/AddCustomers
new file mode 100644
index 000000000..9828d7d53
--- /dev/null
+++ b/rt/share/html/Elements/AddCustomers
@@ -0,0 +1,62 @@
+%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+%# Copyright (c) 2008 Freeside Internet Services, Inc.
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+<BR>
+<%$msg%><br>
+
+% if (@Customers) {
+
+<br><i>(Check box to link)<i>
+<table>
+% foreach my $customer (@Customers) {
+<tr>
+ <td>
+ <input type="checkbox" name="Object-AddCustomer-<% $customer->{'custnum'} %>" VALUE="1" <% scalar(@Customers) == 1 ? 'CHECKED' : '' %>>
+ <A HREF="<%$freeside_url%>/view/cust_main.cgi?<% $customer->{'custnum'} %>"><% &RT::URI::freeside::small_custview($customer->{'custnum'}, &RT::URI::freeside::FreesideGetConfig('countrydefault'), 1) |n %>
+ </td>
+</tr>
+% }
+</table>
+
+% }
+
+<%INIT>
+my ($msg);
+
+my $freeside_url = &RT::URI::freeside::FreesideURL();
+
+warn "/Elements/AddCustomers called with CustomerString $CustomerString\n"
+ if $Debug;
+
+my @Customers = ();
+if ( $CustomerString ) {
+ @Customers = &RT::URI::freeside::smart_search(
+ 'search' => $CustomerString,
+ 'no_fuzzy_on_exact' => 1, #pref?
+ );
+}
+
+my @Services = ();
+if ($ServiceString) {
+ @Services = (); #service_search();
+}
+
+warn "/Elements/AddCustomers displaying ". scalar(@Customers). " customers\n"
+ if $Debug;
+
+</%INIT>
+
+<%ARGS>
+$CustomerString => undef
+$ServiceString => undef
+$Debug => 0
+</%ARGS>
diff --git a/rt/share/html/Elements/CalendarEvent b/rt/share/html/Elements/CalendarEvent
new file mode 100644
index 000000000..3a6b00bb8
--- /dev/null
+++ b/rt/share/html/Elements/CalendarEvent
@@ -0,0 +1,129 @@
+<%args>
+$Date => undef
+$Object => undef
+$DateTypes => undef
+</%args>
+<div class="tooltip">
+<small>
+
+% if ($IsReminder and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/reminder.png" />
+
+% } elsif ($DateTypes->{Resolved}
+% and RTx::Calendar::LocalDate($Object->ResolvedObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/resolved.png" />
+
+% } elsif ($DateTypes->{Starts} and $DateTypes->{Due}
+% and RTx::Calendar::LocalDate($Object->StartsObj->Unix) eq $today and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today ) {
+ <img src="<%$RT::WebImagesURL%>/starts_due.png" />
+
+% } elsif ($DateTypes->{Due} and $DateTypes->{Created}
+% and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today and RTx::Calendar::LocalDate($Object->CreatedObj->Unix) eq $today ) {
+ <img src="<%$RT::WebImagesURL%>/created_due.png" />
+
+% } elsif ($DateTypes->{Starts}
+% and RTx::Calendar::LocalDate($Object->StartsObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/starts.png" />
+
+% } elsif ($DateTypes->{Due}
+% and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/due.png" />
+
+% } elsif ($DateTypes->{Created}
+% and RTx::Calendar::LocalDate($Object->CreatedObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/created.png" />
+
+% } elsif ($DateTypes->{Started}
+% and RTx::Calendar::LocalDate($Object->StartedObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/started.png" />
+
+% } elsif ($DateTypes->{LastUpdated}
+% and RTx::Calendar::LocalDate($Object->LastUpdatedObj->Unix) eq $today) {
+ <img src="<%$RT::WebImagesURL%>/updated.png" />
+
+% }
+
+ <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$TicketId%>">
+ <% $Object->QueueObj->Name %> #<% $TicketId %>
+ <% $display_owner ? 'by ' . $Object->OwnerObj->Name : '' %>
+ <% length($Object->Subject) > 80 ? substr($Object->Subject, 0, 77) . "..." : $Object->Subject %></a></small><br />
+ <span class="tip">
+ <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$TicketId%>">
+ <% $Object->QueueObj->Name %> #<% $TicketId %>
+ </a>
+ :</strong> <% $subject%><br />
+ <br />
+
+%# logic taken from Ticket/Search/Results.tsv
+% foreach my $attr (@display_fields) {
+% my $value;
+%
+% if ($attr =~ /(.*)->ISO$/ and $Object->$1->Unix <= 0) {
+% $value = '-';
+% } else {
+% my $method = '$Object->'.$attr.'()';
+% $method =~ s/->ISO\(\)$/->ISO( Timezone => 'user' )/;
+% $value = eval $method;
+% if ($@) {die "<b>Check your CalendarPopupFields config in etc/RT_SiteConfig.pm</b>.<br /><br />Failed to find \"$attr\" - ". $@};
+% }
+ <strong><&|/l&><% $label_of{$attr} %></&>:</strong> <% $value %><br />
+% }
+
+<br />
+ </span>
+</div>
+
+<%init>
+use RTx::Calendar;
+
+my $today = $Date->strftime("%F");
+
+my $TicketId;
+
+my $ticket;
+my $subject;
+my $IsReminder;
+
+if ($Object->Type eq 'reminder') {
+ $IsReminder = 1;
+ if ($Object->RefersTo->First) {
+ $ticket = $Object->RefersTo->First->TargetObj;
+ $TicketId = $ticket->Id;
+ $subject = $Object->Subject . " (" . $ticket->Subject . ")";
+ }
+} else {
+ $TicketId = $Object->Id;
+ $subject = $Object->Subject;
+}
+
+my $display_owner = $RT::CalendarDisplayOwner;
+$display_owner ||= RT->Config->Get('CalendarDisplayOwner')
+ if RT->can('Config');
+
+
+# 3.6 config
+my @display_fields = @RT::CalendarPopupFields;
+
+# 3.8 config
+# the if condition is weird but it doesn't work with 3.8.0 without the last part
+@display_fields = RT->Config->Get('CalendarPopupFields')
+ if 0 == @display_fields and RT->can('Config') and RT->Config->Get('CalendarPopupFields');
+
+# default
+if (0 == @display_fields) {
+ @display_fields = qw(OwnerObj->Name CreatedObj->ISO StartsObj->ISO
+ StartedObj->ISO LastUpdatedObj->ISO DueObj->ISO
+ ResolvedObj->ISO Status Priority
+ Requestors->MemberEmailAddressesAsString);
+}
+
+
+my %label_of;
+for my $field (@display_fields) {
+ my $label = $field;
+ $label =~ s'Obj-.(?:AsString|Name|ISO)''g;
+ $label =~ s'-\>MemberEmailAddressesAsString''g;
+ $label_of{$field} = $label;
+}
+
+</%init>
diff --git a/rt/share/html/Elements/CollectionList b/rt/share/html/Elements/CollectionList
index a57006e5e..522db5811 100644
--- a/rt/share/html/Elements/CollectionList
+++ b/rt/share/html/Elements/CollectionList
@@ -133,7 +133,9 @@ if ( $ShowHeader ) {
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;
+ #broken w/FS, causes rows to be output prematurely
+ #$m->flush_buffer unless ++$i % 10;
+ ++$i;
my $warning = 0;
my $Classes = '';
diff --git a/rt/html/Elements/Checkbox b/rt/share/html/Elements/EditCustomFieldDate
index e1d7f3d04..b6359d7e0 100644
--- a/rt/html/Elements/Checkbox
+++ b/rt/share/html/Elements/EditCustomFieldDate
@@ -2,7 +2,7 @@
%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2009 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)
@@ -24,7 +24,7 @@
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%# http://www.gnu.org/copyleft/gpl.html.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
@@ -45,19 +45,18 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<input type="checkbox" class="checkbox" name="<%$Name%>" value="1" <%$IsChecked%> />
+% my $name = $NamePrefix.$CustomField->Id.'-Values';
+<& /Elements/SelectDate, Name => "$name", ShowTime => 0, current => 0 &> (<%$DateObj->AsString%>)
+<%INIT>
+my $DateObj = new RT::Date ( $session{'CurrentUser'} );
+$DateObj->Set( Format => 'ISO', Value => $Default );
+</%INIT>
<%ARGS>
-$Name => undef
+$Object => undef
+$CustomField => undef
+$NamePrefix => undef
$Default => undef
-$True => undef
-$False => undef
-$IsChecked => undef
+$Values => undef
+$MaxValues => 1
</%ARGS>
-
-<%INIT>
-$IsChecked =
- ($Default && $Default =~ /checked/i)
- ? " CHECKED " : "";
-1;
-</%INIT>
diff --git a/rt/share/html/Elements/EditCustomFieldTimeValue b/rt/share/html/Elements/EditCustomFieldTimeValue
new file mode 100644
index 000000000..064554594
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomFieldTimeValue
@@ -0,0 +1,16 @@
+% my $name = $NamePrefix . $CustomField->Id . '-Value';
+% if ($Multiple) {
+% $RT::Logger->error("TimeValue Multiple custom field not supported");
+% return;
+% }
+<& /Elements/EditTimeValue,
+ Name => $name,
+ Default => $Default,
+ InUnits => $ARGS{"$name-TimeUnits"} || 'minutes',
+&>
+<%ARGS>
+$CustomField => undef
+$NamePrefix => undef
+$Default => undef
+$Multiple => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/EditCustomers b/rt/share/html/Elements/EditCustomers
new file mode 100644
index 000000000..68efb5f40
--- /dev/null
+++ b/rt/share/html/Elements/EditCustomers
@@ -0,0 +1,63 @@
+%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+%# Copyright (c) 2008 Freeside Internet Services, Inc.
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+<TABLE width=100%>
+ <TR>
+ <TD VALIGN=TOP WIDTH=50%>
+ <h3><&|/l&>Current Customers</&></h3>
+
+<table>
+ <tr>
+ <td><i><&|/l&>(Check box to disassociate)</&></i></td>
+ </tr>
+ <tr>
+ <td class="value">
+% foreach my $link ( @{ $Object->Customers->ItemsArrayRef } ) {
+
+ <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>">
+%# <& ShowLink, URI => $link->TargetURI &><br>
+ <A HREF="<% $link->TargetURI->Resolver->HREF %>"><% $link->TargetURI->Resolver->AsStringLong |n %></A>
+ <BR>
+% }
+ </td>
+ </tr>
+</table>
+
+</TD>
+
+<TD VALIGN=TOP>
+<h3><&|/l&>New Customer Links</&></h3>
+<&|/l&>Find customer</&><BR>
+<input name="CustomerString">
+<input type=submit name="OnlySearchForCustomers" value="<&|/l&>Go!</&>">
+<br><i>cust #, name, company or phone</i>
+<BR>
+%#<BR>
+%#<&|/l&>Find service</&><BR>
+%#<input name="ServiceString">
+%#<input type=submit name="OnlySearchForServices" value="<&|/l&>Go!</&>">
+%#<br><i>username, username@domain, domain, or IP address</i>
+%#<BR>
+
+<& AddCustomers, Object => $Object,
+ CustomerString => $CustomerString,
+ ServiceString => $ServiceString, &>
+
+</TD>
+</TR>
+</TABLE>
+
+<%ARGS>
+$CustomerString => undef
+$ServiceString => undef
+$Object => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/Footer b/rt/share/html/Elements/Footer
index 27962136a..e339a05e0 100755
--- a/rt/share/html/Elements/Footer
+++ b/rt/share/html/Elements/Footer
@@ -48,25 +48,6 @@
%# 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, '2010', '<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)]);
diff --git a/rt/share/html/Elements/Header b/rt/share/html/Elements/Header
index f9bd27fbf..4f48deb4d 100755
--- a/rt/share/html/Elements/Header
+++ b/rt/share/html/Elements/Header
@@ -45,62 +45,67 @@
%# 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">
+<& /elements/header.html, {
+ 'title' => $Title,
+ 'head' => $head,
+ 'etc' => $etc,
+ 'nobr' => 1,
+ 'nocss' => 1,
+ }
+&>
+<%INIT>
+$r->headers_out->{'Pragma'} = 'no-cache';
+$r->headers_out->{'Cache-control'} = 'no-cache';
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
-<title><%$Title%></title>
+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;
+my $head = '';
-% if ($Refresh && $Refresh =~ /^(\d+)/ && $1 > 0) {
-% my $URL = $m->notes->{LogoutURL}; $URL = $URL ? ";URL=$URL" : "";
- <meta http-equiv="refresh" content="<% "$1$URL" %>" />
-% }
+if ($Refresh && $Refresh =~ /^(\d+)/ && $1 > 0) {
+ $head .= '<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" />
+my $WebPath = RT->Config->Get('WebPath');
+my $WebImagesURL = RT->Config->Get('WebImagesURL');
+my $WebDefaultStylesheet =
+ RT->Config->Get('WebDefaultStylesheet', $session{'CurrentUser'});
+my $squished = RT->Config->Get('DevelMode') ? '' : '-squished';
-% for (keys %{$LinkRel || {}}) {
- <link rel="<% $_ %>" href="<% RT->Config->Get('WebPath') . $LinkRel->{$_} %>" />
-% }
+$head .= <<END;
+<link rel="shortcut icon" href="$WebImagesURL/favicon.png" type="image/png" />
+<link rel="stylesheet" href="$WebPath/NoAuth/css/$WebDefaultStylesheet/main$squished.css" type="text/css" media="all" />
+<link rel="stylesheet" href="$WebPath/NoAuth/css/print.css" type="text/css" media="print" />
+END
-% if ( $RSSAutoDiscovery ) {
- <link rel="alternate" href="<%$RSSAutoDiscovery%>" type="application/rss+xml" title="RSS RT Search" />
-% }
+for (keys %{$LinkRel || {}}) {
+ $head .= qq(<link rel="$_" href="$WebPath) . $LinkRel->{$_} . '" />';
+}
-% if ($JavaScript) {
-<& HeaderJavascript, focus => $Focus, onload => $onload &>
-% }
+if ( $RSSAutoDiscovery ) {
+ $head .= qq(<link rel="alternate" href="$RSSAutoDiscovery" type="application/rss+xml" title="RSS RT Search" />);
+}
-% 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' );
+if ($JavaScript) {
+ $head .= $m->scomp('HeaderJavascript', focus => $Focus, onload => $onload);
+}
-</head>
- <body<% $id && qq[ id="comp-$id"] |n %>>
+my $stylesheet_plugin = "/NoAuth/css/$WebDefaultStylesheet/InHeader";
+if ($m->comp_exists($stylesheet_plugin) ) {
+ $head .= $m->scomp($stylesheet_plugin);
+}
-% if ($ShowBar) {
-<& /Elements/Logo, %ARGS &>
+# $m->callback( %ARGS, CallbackName => 'Head' );
+$head .= $m->scomp( '/Elements/Callback', _CallbackName => 'Head', %ARGS );
-<div id="quickbar">
- <& /Elements/PersonalQuickbar, %ARGS &>
-% }
+my $etc = '';
+$etc .= qq[ id="comp-$id"] if $id;
-<%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>
diff --git a/rt/share/html/Elements/MyCalendar b/rt/share/html/Elements/MyCalendar
new file mode 100644
index 000000000..a54ab39d6
--- /dev/null
+++ b/rt/share/html/Elements/MyCalendar
@@ -0,0 +1,78 @@
+<&|/Widgets/TitleBox,
+ title => loc("Calendar"),
+ title_href => "Search/Calendar.html" &>
+
+<table class="rtxcalendar">
+<thead>
+<tr>
+% my $date = $begin->clone;
+% while ( $date <= $end ) {
+<th width="14%"><%$rtdate->GetWeekday($date->day_of_week % 7)%></th>
+% $date = $set->next($date);
+% }
+</tr>
+</thead>
+<tbody>
+<tr>
+% $date = $begin->clone;
+% while ($date <= $end) {
+<td>
+<p class="date"><%$date->day%></p>
+% for my $t (@{ $Tickets{$date->strftime("%F")} }) {
+<& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &>
+% }
+</td>
+% $date = $set->next($date);
+% }
+</tr>
+</tbody>
+</table>
+
+ </&>
+
+<%INIT>
+
+use RTx::Calendar;
+
+my $title = loc("Calendar");
+
+my $rtdate = RT::Date->new($session{'CurrentUser'});
+
+my @DateTypes = qw/Created Starts Started Due LastUpdated Resolved/;
+
+my $today = DateTime->today;
+
+# this line is used to debug MyCalendar
+# $today = DateTime->new(year => 2007, month => 4, day => 11);
+
+my $begin = $today->clone->subtract( days => 3);
+my $end = $today->clone->add( days => 3);
+
+# use this to loop over days until $end
+my $set = DateTime::Set->from_recurrence(
+ next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
+);
+
+my $Query = "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
+ AND ( Owner = '" . $session{CurrentUser}->Id ."' OR Owner = 'Nobody' )
+ AND ( Type = 'reminder' OR 'Type' = 'ticket' )";
+my $Format = "__Starts__ __Due__";
+
+if ( my $Search = RTx::Calendar::SearchDefaultCalendar($session{CurrentUser}) ) {
+ $Format = $Search->SubValue('Format');
+ $Query = $Search->SubValue('Query');
+}
+
+# we search all date types in Format string
+my @Dates = grep { $Format =~ m/__${_}(Relative)?__/ } @DateTypes;
+
+# used to display or not a date in Element/CalendarEvent
+my %DateTypes = map { $_ => 1 } @Dates;
+
+$Query .= RTx::Calendar::DatesClauses(\@Dates, $begin->strftime("%F"), $end->strftime("%F"));
+
+# print STDERR $Query, "\n";
+
+my %Tickets = RTx::Calendar::FindTickets($session{'CurrentUser'}, $Query, \@Dates);
+
+</%INIT>
diff --git a/rt/share/html/Elements/PageLayout b/rt/share/html/Elements/PageLayout
index 7ef203ade..cc0bb06dc 100755
--- a/rt/share/html/Elements/PageLayout
+++ b/rt/share/html/Elements/PageLayout
@@ -45,23 +45,27 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
+
+<% include('/elements/init_calendar.html') |n %>
+
+% if (0) { ## new ticket via customer, and we already have a ticket search box
<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 (0) { ##FREESIDE MENUS INSTEAD## if ( $show_menu ) {
% if ( $show_menu ) {
<div id="nav">
<& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &>
</div>
% }
+% }
<div id="header">
-<h1><% $title %></h1>
+%#already shown <h1><% $title %></h1>
<div id="page-navigation">
% my $sep = 0;
% my $postsep = 0;
diff --git a/rt/html/Tools/Elements/Tabs b/rt/share/html/Elements/RT__SavedSearch/ColumnMap
index b341c3ca0..780ee838a 100644
--- a/rt/html/Tools/Elements/Tabs
+++ b/rt/share/html/Elements/RT__SavedSearch/ColumnMap
@@ -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-2010 Best Practical Solutions, LLC
%# <jesse@bestpractical.com>
-%#
+%#
%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
+%#
+%#
%# LICENSE:
-%#
+%#
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
-%#
+%#
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
%# General Public License for more details.
-%#
+%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%# 02110-1301 or visit their web page on the internet at
%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
+%#
+%#
%# CONTRIBUTION SUBMISSION POLICY:
-%#
+%#
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
-%#
+%#
%# By intentionally submitting any modifications, 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,42 +43,43 @@
%# royalty-free, perpetual, license 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,
- Title => $Title &>
-
-<%INIT>
-my $tabs = {
- a => {
- title => loc('Offline'),
- path => 'Tools/Offline.html',
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+my $COLUMN_MAP = {
+ id => {
+ title => '#', # loc
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->Id },
},
- b => {
- title => loc('Reports'),
- path => 'Tools/Reports/index.html',
+ Name => {
+ title => sub { return "foo" }, #'Name', # loc
+ attribute => 'Name',
+ value => sub { return $_[0]->Name()||loc("Unnamed search") },
},
- c => {
- title => loc('My Day'),
- path => 'Tools/MyDay.html',
+ Query => {
+ title => 'Query', # loc
+ attribute => 'Query',
+ value => sub { return $_[0]->GetParameter('Query') },
},
+ ResultsURL => {
+ title => '',
+ attribute => 'ResultsURL',
+ value => sub { my $search = shift;
+ return $m->comp('/Elements/QueryString',
+ map { $_ => $search->GetParameter($_) }
+ qw(Query Format Rows Order OrderBy PrimaryGroupBy SecondaryGroupBy ChartStyle));
+ },
+ }
};
-$m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
-
-foreach my $tab ( sort keys %{$tabs} ) {
- if ( $tabs->{$tab}->{'path'} eq $current_tab ) {
- $tabs->{$tab}->{"subtabs"} = $subtabs;
- $tabs->{$tab}->{"current_subtab"} = $current_subtab;
- }
-}
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
</%INIT>
-<%ARGS>
-$subtabs => undef
-$current_tab => undef
-$current_subtab => undef
-$Title => undef
-</%ARGS>
diff --git a/rt/share/html/Elements/RT__Ticket/ColumnMap b/rt/share/html/Elements/RT__Ticket/ColumnMap
index e347032ff..411b3e56b 100644
--- a/rt/share/html/Elements/RT__Ticket/ColumnMap
+++ b/rt/share/html/Elements/RT__Ticket/ColumnMap
@@ -313,8 +313,87 @@ $COLUMN_MAP = {
return \$bookmark;
},
},
+
+ Customer => {
+ title => 'Customer', #loc
+ attribute => 'Customer.Number', #title/attribute/name... what does it all mean?
+ value => sub {
+ my $Ticket = shift;
+ my @return = ();
+ foreach my $c (ticket_cust_resolvers($Ticket)) {
+ push @return, \'<A HREF="', $c->HREF, \'">',
+ $c->AsString,
+ \'</A>',
+ \'<BR>';
+ }
+ pop @return;
+ @return;
+ },
+ },
+ # For future reference:
+ # hash key = name of the column in the format string
+ # (see /Search/Elements/BuildFormatString)
+ # title = displayed name in the table header
+ # attribute = the field to ORDER BY when sorting on this column
+ Agent => {
+ title => 'Agent',
+ attribute => 'Customer.Agent',
+ value => sub {
+ my $Ticket = shift;
+ my @return = ();
+ foreach my $c (ticket_cust_resolvers($Ticket)) {
+ push @return, $c->AgentName, \'<BR>';
+ }
+ pop @return;
+ @return;
+ },
+ },
+ CustomerClass => {
+ title => 'Class',
+ attribute => 'Customer.Class',
+ value => sub {
+ my $Ticket = shift;
+ my @return = ();
+ foreach my $c (ticket_cust_resolvers($Ticket)) {
+ push @return, $c->CustomerClass, \'<BR>';
+ }
+ pop @return;
+ @return;
+ },
+ },
+ CustomerTags => {
+ title => '',
+ attribute => '',
+ value => sub {
+ my $Ticket = shift;
+ my @return = ();
+ foreach my $c (ticket_cust_resolvers($Ticket)) {
+ my @tags = sort { $a->{'name'} cmp $b->{'name'} }
+ $c->CustomerTags;
+ foreach my $t (@tags) {
+ push @return, \'<SPAN style="background-color:#',
+ $t->{'color'},
+ \';">&nbsp;',
+ $t->{'name'},
+ \'&nbsp;</SPAN>',
+ \'&nbsp;'
+ ;
+ }
+ pop @return;
+ push @return, \'<BR>';
+ }
+ pop @return;
+ @return;
+ },
+ },
};
+sub ticket_cust_resolvers {
+ my $Ticket = shift;
+ my @Customers = @{ $Ticket->Customers->ItemsArrayRef };
+ return map $_->TargetURI->Resolver, @Customers;
+}
+
# if no GPG support, then KeyOwnerName and KeyRequestors fall back to the regular
# versions
if (RT->Config->Get('GnuPG')->{'Enable'}) {
diff --git a/rt/share/html/Elements/SavedSearches b/rt/share/html/Elements/SavedSearches
new file mode 100644
index 000000000..96d589fc1
--- /dev/null
+++ b/rt/share/html/Elements/SavedSearches
@@ -0,0 +1,70 @@
+<& /Elements/ListActions, actions => \@results &>
+<table width="100%"><tr>
+% foreach my $type ('Ticket', 'Chart') {
+<td width="50%">
+<&|/Widgets/TitleBox, title => loc('Saved '.$titles{$type}) &>
+% foreach my $Object (@Objects) {
+% $SavedSearches = RT::SavedSearches->new($session{CurrentUser});
+% $SavedSearches->LimitToPrivacy(join('-',ref($Object),$Object->Id), $type);
+% my $title = $titles{$type};
+% if (ref $Object eq 'RT::User' && $Object->Id == $session{CurrentUser}->Id) {
+% $title = loc("My saved ".lc($title));
+% } else {
+% $title = loc("[_1]'s saved ".lc($title),$Object->Name);
+% }
+% $title = $m->interp->apply_escapes($title, 'h');
+%
+% my $oid = join('-', ref($Object), $Object->Id, 'SavedSearch', '__id__');
+% my $resultpath = $paths{$type};
+% my @cols = (
+% qq{<a href="__WebPath__/$resultpath?__ResultsURL__">__Name__</a>/TITLE:$title},
+% '__Query__',
+% qq{<a href="__WebPath__/Search/Build.html?SavedSearchLoad=$oid">[Edit]</a>&nbsp;} .
+% qq{<a href="$uri?Delete=$oid">[Delete]</a>/TITLE:},
+% );
+% my $format = join(',', map { "'$_'" } @cols);
+<& /Elements/CollectionList,
+ %ARGS,
+ Class => 'RT::SavedSearch',
+ Format => $format,
+ Collection => $SavedSearches,
+ PassArguments => [qw(Format Name id)],
+&>
+% } #foreach $Object
+</&>
+</td>
+% } #foreach $type
+</tr></table>
+<%init>
+my @Objects;
+my $SavedSearches = RT::SavedSearches->new($session{'CurrentUser'});
+push @Objects, $SavedSearches->_PrivacyObjects;
+push @Objects, RT::System->new( $session{'CurrentUser'} )
+ if $session{'CurrentUser'}->HasRight( Object=> $RT::System,
+ Right => 'SuperUser' );
+
+my $uri = '__WebPath__'.$m->request_path;
+
+my @results;
+if ( $Delete =~ /(.*)-SavedSearch-(\d+)/) {
+ my ($privacy, $id) = ($1, $2);
+ my $record = RT::SavedSearch->new($session{'CurrentUser'});
+ $record->Load($privacy, $id);
+ if ( $record->Id ) {
+ my ($status, $msg) = $record->Delete;
+ push @results, $msg;
+ }
+ else {
+ push @results, "Saved search #$Delete not found";
+ }
+}
+
+my %titles = ( 'Ticket' => 'Searches', 'Chart' => 'Charts' );
+my %paths = ( 'Ticket' => 'Search/Results.html',
+ 'Chart' => 'Search/Chart.html',
+);
+</%init>
+<%ARGS>
+$user_attrs => undef
+$Delete => undef
+</%ARGS>
diff --git a/rt/share/html/Elements/SelectCustomerAgent b/rt/share/html/Elements/SelectCustomerAgent
new file mode 100644
index 000000000..75a1fba63
--- /dev/null
+++ b/rt/share/html/Elements/SelectCustomerAgent
@@ -0,0 +1,17 @@
+% return if ($RT::URI::freeside::IntegrationType ne 'Internal');
+<select name="<%$Name%>">
+% if ($ShowNullOption) {
+ <option value="">-</option>
+% }
+% for my $agent (qsearch('agent', {'disabled' => ''})) {
+ <option value="<%$agent->agentnum%>" <%
+ $agent->agentnum == $Default||'' ? 'selected' : ''%>
+ ><%$agent->agent%></option>
+% }
+</select>
+<%init></%init>
+<%args>
+$ShowNullOption => 1
+$Name => undef
+$Default => 0
+</%args>
diff --git a/rt/share/html/Elements/SelectCustomerClass b/rt/share/html/Elements/SelectCustomerClass
new file mode 100644
index 000000000..1a03cba8f
--- /dev/null
+++ b/rt/share/html/Elements/SelectCustomerClass
@@ -0,0 +1,17 @@
+% return if ($RT::URI::freeside::IntegrationType ne 'Internal');
+<select name="<%$Name%>">
+% if ($ShowNullOption) {
+ <option value="">-</option>
+% }
+% for my $class (qsearch('cust_class', {'disabled' => ''})) {
+ <option value="<%$class->classnum%>" <%
+ $class->classnum == $Default||'' ? 'selected' : ''%>
+ ><%$class->classname%></option>
+% }
+</select>
+<%init></%init>
+<%args>
+$ShowNullOption => 1
+$Name => undef
+$Default => 0
+</%args>
diff --git a/rt/share/html/Elements/SelectCustomerTag b/rt/share/html/Elements/SelectCustomerTag
new file mode 100644
index 000000000..862766966
--- /dev/null
+++ b/rt/share/html/Elements/SelectCustomerTag
@@ -0,0 +1,17 @@
+% return if ($RT::URI::freeside::IntegrationType ne 'Internal');
+<select name="<%$Name%>">
+% if ($ShowNullOption) {
+ <option value="">-</option>
+% }
+% for my $tag (qsearch('part_tag', {'disabled' => ''})) {
+ <option value="<%$tag->tagnum%>" <%
+ $tag->tagnum == $Default||'' ? 'selected' : ''%>
+ ><%$tag->tagname%></option>
+% }
+</select>
+<%init></%init>
+<%args>
+$ShowNullOption => 1
+$Name => undef
+$Default => 0
+</%args>
diff --git a/rt/share/html/Elements/SelectDate b/rt/share/html/Elements/SelectDate
index df4dc2b08..5bdbceeeb 100755
--- a/rt/share/html/Elements/SelectDate
+++ b/rt/share/html/Elements/SelectDate
@@ -45,10 +45,21 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<script type="text/javascript"><!--
- onLoadHook('createCalendarLink("<% $Name %>");');
---></script>
+%# in PageLayout instead, once <% include('/elements/init_calendar.html') |n %>
<input type="text" id="<% $Name %>" name="<% $Name %>" value="<% $Value %>" size="<% $Size %>" />
+<IMG SRC="<%$fsurl%>images/calendar.png" ID="<% $Name %>_date_button" STYLE="cursor: pointer" TITLE="Select date">
+<script type="text/javascript">
+Calendar.setup({
+ inputField: <% $Name |n,js_string %>,
+% if ( defined($ShowTime) && $ShowTime ) {
+ ifFormat: "%Y-%m-%d %H:%M",
+ showsTime: true,
+% } else {
+ ifFormat: "%Y-%m-%d",
+% }
+ button: <% $Name.'_date_button' |n,js_string %>,
+});
+</script>
<%init>
unless ((defined $Default) or
($current <= 0)) {
diff --git a/rt/share/html/Elements/SelectQueue b/rt/share/html/Elements/SelectQueue
index acd73ae56..0cfdd915d 100755
--- a/rt/share/html/Elements/SelectQueue
+++ b/rt/share/html/Elements/SelectQueue
@@ -55,7 +55,7 @@
% if ($ShowNullOption) {
<option value="">-</option>
% }
-% for my $queue (@{$session{$cache_key}}) {
+% for my $queue (@{$session{$cache_key}{queues}}) {
<option value="<% ($NamedValues ? $queue->{Name} : $queue->{Id}) %>"
% if ($queue->{Id} eq ($Default||'') || $queue->{Name} eq ($Default||'')) {
@@ -90,18 +90,27 @@ my $cache_key = "SelectQueue---"
. $session{'CurrentUser'}->Id
. "---$CheckQueueRight---$ShowAllQueues";
-if (not defined $session{$cache_key} and not $Lite) {
+if ( defined $session{$cache_key} && ref $session{$cache_key} eq 'ARRAY') {
+ delete $session{$cache_key};
+}
+if ( defined $session{$cache_key} &&
+ $session{$cache_key}{lastupdated} <= RT->System->QueueCacheNeedsUpdate ) {
+ delete $session{$cache_key};
+}
+
+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}}, {
+ push @{$session{$cache_key}{queues}}, {
Id => $queue->Id,
Name => $queue->Name,
Description => $queue->Description,
};
}
}
+ $session{$cache_key}{lastupdated} = time();
}
</%init>
diff --git a/rt/html/Ticket/Elements/ShowQueue b/rt/share/html/Elements/ShowCustomFieldDate
index da94d3993..4e8ad676c 100644
--- a/rt/html/Ticket/Elements/ShowQueue
+++ b/rt/share/html/Elements/ShowCustomFieldDate
@@ -2,7 +2,7 @@
%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2009 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)
@@ -45,12 +45,13 @@
%# 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;
+ my $content = $Object->Content;
+ my $DateObj = new RT::Date ( $session{'CurrentUser'} );
+ $DateObj->Set( Format => 'ISO', Value => $content );
+ $content = $DateObj->AsString;
</%INIT>
+<%$content|n%>
+<%ARGS>
+$Object
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowCustomFieldTimeValue b/rt/share/html/Elements/ShowCustomFieldTimeValue
new file mode 100644
index 000000000..16d26df60
--- /dev/null
+++ b/rt/share/html/Elements/ShowCustomFieldTimeValue
@@ -0,0 +1,4 @@
+<%$Object->Content|n%> min
+<%ARGS>
+$Object
+</%ARGS>
diff --git a/rt/share/html/Elements/ShowLink_Checklist b/rt/share/html/Elements/ShowLink_Checklist
new file mode 100644
index 000000000..945305fb6
--- /dev/null
+++ b/rt/share/html/Elements/ShowLink_Checklist
@@ -0,0 +1,36 @@
+<a href="<%$URI->Resolver->HREF%>">
+% if ($URI->IsLocal) {
+% my $member = $URI->Object;
+% if (UNIVERSAL::isa($member, "RT::Ticket")) {
+% my $inactive = 0; #$member->QueueObj->IsInactiveStatus($member->Status);
+
+<span class="<% $inactive ? 'ticket-inactive' : '' %>">
+<IMG SRC="<%$fsurl%>images/<% $status2image{$member->Status} %>.png" BORDER=0>
+<%$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>
+<%once>
+
+my %status2image = (
+ 'new' => 'square_add', #'bullet_add',
+ 'open' => 'square', #'bullet_black',
+ 'stalled' => 'error',
+ 'resolved' => 'tick',
+ 'rejected' => 'cross',
+ #'deleted' => 'delete',
+);
+
+</%once>
diff --git a/rt/share/html/Elements/ShowUserVerbose b/rt/share/html/Elements/ShowUserVerbose
index b88aaf369..6a85a5b6f 100644
--- a/rt/share/html/Elements/ShowUserVerbose
+++ b/rt/share/html/Elements/ShowUserVerbose
@@ -46,7 +46,11 @@
%#
%# END BPS TAGGED BLOCK }}}
%# Released under the terms of version 2 of the GNU Public License
-<%$Address->format%>\
+% if ( $Address->phrase || $Address->comment ) {
+<% sprintf q{%s <%s> %s}, map $Address->$_, qw( phrase address comment ) %>
+% } else {
+<% $Address->address %>
+% }
<%INIT>
my ($phrase, $address, $comment);
diff --git a/rt/share/html/NoAuth/Calendar/dhandler b/rt/share/html/NoAuth/Calendar/dhandler
new file mode 100644
index 000000000..4b4aa631e
--- /dev/null
+++ b/rt/share/html/NoAuth/Calendar/dhandler
@@ -0,0 +1,159 @@
+<%init>
+
+use Data::ICal;
+use Data::ICal::Entry::Todo;
+use Data::ICal::Entry::Event;
+use Date::ICal;
+
+$RT::ICalTicketType ||= "Data::ICal::Entry::Todo";
+$RT::ICalReminderType ||= "Data::ICal::Entry::Event";
+
+my ($UserId, $SearchId, $MagicNumber);
+my $arg = $m->dhandler_arg;
+
+if ($arg =~ m{^(\d+)@(\d+)/(.*)$}) {
+ $UserId = $1;
+ $SearchId = $2;
+ $MagicNumber = $3;
+} elsif ($arg =~ m{^(\d+)/(.*)}) {
+ $UserId = $1;
+ $MagicNumber = $2;
+} else {
+ Abort("Corrupted URL.");
+}
+
+my $CurrentUser = new RT::CurrentUser();
+$CurrentUser->LoadById($UserId);
+my $user = $CurrentUser->Name;
+
+# if no user, abort
+unless ($CurrentUser->Id) {
+ $RT::Logger->error("No such user id $UserId from $ENV{'REMOTE_ADDR'}");
+ $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n");
+ $m->abort;
+}
+
+# verify user has LoadSavedSearch right
+if ($SearchId and not $CurrentUser->HasRight( Right => 'LoadSavedSearch',
+ Object=> $RT::System )) {
+ $RT::Logger->error("not enough rights for user $user from $ENV{'REMOTE_ADDR'}");
+ $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n");
+ $m->abort;
+}
+
+
+# if MagicNumber doesn't match the one stored in database, abort
+my $Search;
+my $ICalAttribute;
+if ($SearchId) {
+ $Search = $CurrentUser->Attributes->WithId($SearchId);
+ $ICalAttribute = $Search->FirstAttribute('ICalURL');
+} else {
+ $ICalAttribute = $CurrentUser->UserObj->FirstAttribute('ICalURL');
+}
+
+unless ($ICalAttribute) {
+ $RT::Logger->error("No such ICal feed for $user from $ENV{'REMOTE_ADDR'}");
+ $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n");
+ $m->abort;
+}
+
+
+if ($MagicNumber ne $ICalAttribute->Content) {
+ $RT::Logger->error("FAILED LOGIN for $user from $ENV{'REMOTE_ADDR'}");
+ $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n");
+ $m->abort;
+}
+
+my $Tickets = RT::Tickets->new($CurrentUser);
+
+my $Query = "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
+ AND ( Owner = '" . $CurrentUser->Id ."' OR Owner = 'Nobody' )
+ AND ( Type = 'reminder' OR 'Type' = 'ticket' )";
+
+$Query = $Search->SubValue('Query')
+ if $Search;
+
+$Query .= " AND ( Due > '1970-01-01' OR Starts > '1970-01-01' )";
+
+$Tickets->FromSQL($Query);
+
+$Tickets->OrderBy(FIELD => 'Due', ORDER => 'ASC');
+
+my $calendar = Data::ICal->new();
+
+my ($uid) = $RT::WebURL =~ m{https?://([^:]+)};
+
+while (my $Ticket = $Tickets->Next ) {
+
+ my $event;
+ if ($Ticket->Type eq 'ticket') {
+ $event = add_todo($Ticket, $uid);
+ } else {
+ $event = add_event($Ticket, $uid);
+ }
+ next unless $event;
+ $calendar->add_entry($event);
+}
+
+my $cal = $calendar->as_string;
+
+$r->content_type('text/calendar;charset=utf-8');
+$m->clear_buffer();
+$m->out($cal);
+$m->abort;
+
+sub add_event {
+ my ($Reminder, $uid) = @_;
+
+ return unless defined $Reminder->RefersTo->First;
+ my $Ticket = $Reminder->RefersTo->First->TargetObj;
+
+ my %event = (
+ summary => $Reminder->Subject ? $Reminder->Subject : '',
+ url => "${RT::WebURL}/Ticket/Display.html?id=" . $Ticket->id,
+ uid => Date::ICal->new( epoch => time() )->ical() . "-" . $Reminder->Id . "@" . $uid,
+ categories => $Ticket->QueueObj->Name,
+ dtstart => Date::ICal->new( epoch => $Reminder->DueObj->Unix )->ical,
+ );
+
+ my $event = $RT::ICalReminderType->new();
+ $event->add_properties(%event);
+
+ return $event;
+}
+
+sub add_todo {
+ my ($Ticket, $uid) = @_;
+
+ my %vtodo = (
+ summary => $Ticket->Subject ? $Ticket->Subject : '',
+ dtstart => Date::ICal->new( epoch => $Ticket->CreatedObj->Unix )->ical,
+ url => "${RT::WebURL}/Ticket/Display.html?id=" . $Ticket->id,
+ uid => Date::ICal->new( epoch => time() )->ical() . "-" . $Ticket->Id . "@" . $uid,
+ categories => $Ticket->QueueObj->Name,
+ );
+
+ $vtodo{due} = Date::ICal->new( epoch => $Ticket->DueObj->Unix )->ical,
+ if $Ticket->DueObj;
+
+ if ($Ticket->OwnerObj->Id != $RT::Nobody->Id and $Ticket->OwnerObj->EmailAddress) {
+ $vtodo{organizer} = "MAILTO:" . $Ticket->OwnerObj->EmailAddress;
+ $vtodo{attendee} = "MAILTO:" . $Ticket->OwnerObj->EmailAddress;
+ } elsif ($Ticket->QueueObj->CommentAddress) {
+ $vtodo{organizer} = "MAILTO:" . $Ticket->QueueObj->CommentAddress;
+ $vtodo{attendee} = "MAILTO:" . $Ticket->QueueObj->CommentAddress;
+ }
+
+ $vtodo{priority} = $Ticket->Priority
+ if $Ticket->Priority;
+
+ my $vtodo = $RT::ICalTicketType->new();
+ $vtodo->add_properties(%vtodo);
+
+ return $vtodo;
+}
+
+
+
+</%init>
diff --git a/rt/share/html/NoAuth/css/calendar.css b/rt/share/html/NoAuth/css/calendar.css
new file mode 100644
index 000000000..c6b584e96
--- /dev/null
+++ b/rt/share/html/NoAuth/css/calendar.css
@@ -0,0 +1,75 @@
+.tooltip{position:relative;z-index:1;}
+.tooltip:hover{z-index:5;color:#000;}
+.tooltip span.tip{display: none; text-align:left;}
+
+div.tooltip:hover span.tip{
+display:block;
+position:absolute;
+top:12px; left:24px; width:350px;
+border:1px solid #555;
+background-color:#fff;
+padding: 4px;
+font-size: 0.8em;
+color:#505050;
+}
+
+.calendardate {
+ text-align: right;
+ background-color: #f8f8ff;
+ width:100%;
+}
+
+.offmonthcalendardate {
+ text-align: right;
+ background-color: #f8f8f8;
+ width:100%;
+}
+
+.todayscalendardate {
+ text-align: right;
+ background-color: #fc6; /*#fad163*/
+ width:100%;
+}
+
+table.rtxcalendar {
+ width:100%;
+ border-collapse: collapse;
+ border: 1px solid #d0d0d0;
+ margin-bottom: 6px;
+}
+
+table.rtxcalendar td {
+ border: 1px solid #d7d7d7;
+ background: #fff;
+ vertical-align: top;
+ width: 14%;
+}
+
+table.rtxcalendar th {
+ border: 1px solid #d7d7d7;
+ background: #eef;
+}
+table.rtxcalendar tbody th {
+ border: 1px solid #d7d7d7;
+ background: #eee;
+ font-weight: normal;
+}
+
+table.rtxcalendar td.offmonth {
+ background: #f8f8f8;
+ color: #aaa;
+}
+
+table.rtxcalendar td.today {
+ background: #ffe; /*#fed;*/
+ border: 1px solid #fc6;
+}
+
+table.rtxcalendar td.yesterday {
+ border-right: none;
+}
+
+table.rtxcalendar td.aweekago {
+ border-bottom: none;
+}
+
diff --git a/rt/html/Approvals/Elements/Tabs b/rt/share/html/NoAuth/css/freeside2.1/InHeader
index 3a4ba7c02..904535fbd 100644
--- a/rt/html/Approvals/Elements/Tabs
+++ b/rt/share/html/NoAuth/css/freeside2.1/InHeader
@@ -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,10 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<& /Elements/Tabs,
- tabs => $tabs,
- current_toptab => 'Approvals/',
- current_tab => $current_tab,
- Title => $Title &>
+<!--[if lt IE 8]>
+<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/freeside2.1/msie.css" type="text/css" media="all" />
-<%ARGS>
-$tabs => undef
-$current_tab => undef
-$Title => undef
-</%ARGS>
+<![endif]-->
+<!--[if lt IE 7]>
+<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/freeside2.1/msie6.css" type="text/css" media="all" />
+<![endif]-->
diff --git a/rt/html/NoAuth/css/3.5-default/ticket.css b/rt/share/html/NoAuth/css/freeside2.1/admin.css
index 7fa0e9e0a..63385bffa 100644
--- a/rt/html/NoAuth/css/3.5-default/ticket.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/admin.css
@@ -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 }}}
-.ticket-info-cfs .label {
- vertical-align: top;
+ul.list-menu .menu-item {
+ font-size: 1.25em;
}
+ul.list-menu {
+ list-style: none;
-.ticket-info-cfs ul {
- margin: 0;
- padding: 0;
- margin-left: 0.5em;
- list-style: none;
+}
+ul.list-menu .description {
+ display: block;
+ padding: 0.5em;
+ font-style: italic;
+ padding-left: 1em;
}
diff --git a/rt/html/NoAuth/css/3.5-default/logo.css b/rt/share/html/NoAuth/css/freeside2.1/base.css
index d2a173748..a38854fb5 100644
--- a/rt/html/NoAuth/css/3.5-default/logo.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/base.css
@@ -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,19 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-#logo {
- float: left;
- clear: left;
+a {
+ color: #000;
+ text-decoration: none;
+}
+
+
+div#body a:visited {
+ color: #666;
- margin: 0.5em 0 0.5em 10px;
}
-#logo img { border: none; }
-#logo div.rtname {
- text-align: center;
- font-weight: bold;
+a:hover {
+ text-decoration: underline;
}
+textarea:focus, input:focus { background-color: #ffd; }
diff --git a/rt/share/html/NoAuth/css/freeside2.1/boxes.css b/rt/share/html/NoAuth/css/freeside2.1/boxes.css
new file mode 100644
index 000000000..fbd9af108
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/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;
+
+}
+
+.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);
+}
+
+.titlebox hr.clear {
+ display: none;
+}
diff --git a/rt/html/NoAuth/css/3.4-compat/ticket.css b/rt/share/html/NoAuth/css/freeside2.1/collection.css
index b51c70198..cbc8cefd7 100644
--- a/rt/html/NoAuth/css/3.4-compat/ticket.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/collection.css
@@ -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,8 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-.value {
- font-weight: bold;
+
+table.collection td:first-child, table.collection th:first-child {
+ padding-left: 1em;
}
+
diff --git a/rt/share/html/NoAuth/css/freeside2.1/forms.css b/rt/share/html/NoAuth/css/freeside2.1/forms.css
new file mode 100755
index 000000000..8afedcb03
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/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/freeside2.1/freeside.css b/rt/share/html/NoAuth/css/freeside2.1/freeside.css
new file mode 100644
index 000000000..6e5f3b576
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/freeside.css
@@ -0,0 +1,9 @@
+
+%# div.titlebox {
+%# background: #d4d4d4;
+%# }
+%#
+%# div.titlebox-title {
+%# background: #e8e8e8;
+%# }
+
diff --git a/rt/share/html/NoAuth/css/freeside2.1/images/dhandler b/rt/share/html/NoAuth/css/freeside2.1/images/dhandler
new file mode 100644
index 000000000..6ec9dea05
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/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/freeside2.1/images/source/background-gradient.png b/rt/share/html/NoAuth/css/freeside2.1/images/source/background-gradient.png
new file mode 100644
index 000000000..9c126c7e3
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/images/source/background-gradient.png
Binary files differ
diff --git a/rt/share/html/NoAuth/css/freeside2.1/layout.css b/rt/share/html/NoAuth/css/freeside2.1/layout.css
new file mode 100644
index 000000000..0e7912d98
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/layout.css
@@ -0,0 +1,237 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license 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/freeside2.1/images/background-gradient.png) top left repeat-x ; */
+ background: #f8f8f8;
+ 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-left: .5em;
+ margin-top: 3.0em;
+ 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/freeside2.1/login.css b/rt/share/html/NoAuth/css/freeside2.1/login.css
new file mode 100644
index 000000000..2eb423876
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/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/html/NoAuth/css/3.5-default/main.css b/rt/share/html/NoAuth/css/freeside2.1/main.css
index 3a5fdfb5d..69e7f44e2 100644
--- a/rt/html/NoAuth/css/3.5-default/main.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/main.css
@@ -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,27 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-@import "misc.css";
-@import "login.css";
-@import "logo.css";
-@import "quickbar.css";
-@import "body.css";
-@import "approvals.css";
-@import "titlebox.css";
+% $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 "transactions.css";
-@import "nav.css";
-@import "header.css";
-@import "footer.css";
+@import "tools.css";
+@import "admin.css";
+@import "collection.css";
+@import "misc.css";
+
+@import "freeside.css";
+
+% $m->callback(CallbackName => 'End');
diff --git a/rt/html/NoAuth/css/3.4-compat/quickbar.css b/rt/share/html/NoAuth/css/freeside2.1/misc.css
index a7b23d5e5..80d7ce0b4 100644
--- a/rt/html/NoAuth/css/3.4-compat/quickbar.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/misc.css
@@ -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,38 +45,43 @@
%# 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;
-}
+@import "../base/misc.css";
-#quickbar #quick-personal span {
+#body.calpopup {
+ margin-left: 1em;
+ margin-top: 1em;
+}
+
+#body.calpopup a.today {
+ font-size: 1em;
font-weight: bold;
}
-#quickbar #quick-personal :link,
-#quickbar #quick-personal :visited
-{
- color: #888;
- font-weight: bold;
+#body.calpopup a {
+ font-size: 0.8em;
}
-#quickbar #quick-personal :link:hover,
-#quickbar #quick-personal :visited:hover
-{
- color: black;
+.calendar {
+ text-align: center;
+ margin: 0 0 0 0;
}
-#quickbar #topactions {
- color: white;
- font-size: 0.9em;
- position: relative;
- right: 1em;
- float: right;
+.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;
}
+
+.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/freeside2.1/msie.css b/rt/share/html/NoAuth/css/freeside2.1/msie.css
new file mode 100644
index 000000000..2297c304a
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/msie.css
@@ -0,0 +1,246 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license 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;
+}
+
+.plain-text-white-space {
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
+ white-space: pre; /* IE only hack to re-specify in addition to
+ word-wrap */
+}
+
diff --git a/rt/html/NoAuth/css/print.css b/rt/share/html/NoAuth/css/freeside2.1/msie6.css
index 80a0c780f..bf6b1ed6d 100644
--- a/rt/html/NoAuth/css/print.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/msie6.css
@@ -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,41 +45,44 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-* {
- float: none;
- position: static;
+.topaction .select-queue {
+ margin-top: 0;
}
-body {
- margin: 1em;
- font-size: 10pt;
+div#page-navigation ul#page-menu {
+ margin-top: -3.2em;
}
-#body {
- margin: 0;
+.titlebox-title .widget {
+ top: -1em;
+ left: 0.5em;
+
+}
+.titlebox .titlebox-title .right{
+ position: absolute;
+ top: 0.25em;
+ right: 1em;
}
-#header h1 {
- margin-bottom: 2em;
+/* nested things. like the ticket dates tab */
+.titlebox .titlebox .titlebox-title .right{
+ right: 1.3em;
}
-#header {
- padding: 0 !important;
+#login-box .titlebox .titlebox-title .right {
+ margin-top: -0.1em;
+ right: 0em;
}
-#quickbar,
-#nav,
-#header #page-menu,
-#header #actions-menu,
-.titlebox .title .widget,
-#footer
+.titlebox
{
-display: none;
+ height: auto !important;
+ height: 1.25em;
}
-a:link, a:visited {
- background: transparent;
- font-weight: bold !important;
- text-decoration: underline !important;
+
+.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/freeside2.1/nav.css b/rt/share/html/NoAuth/css/freeside2.1/nav.css
new file mode 100644
index 000000000..8a52e62c4
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/nav.css
@@ -0,0 +1,206 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license 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; */
+ float: left;
+ 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;
+ padding-right: 4em;
+ 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; */
+ float: right;
+ 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/html/NoAuth/css/3.4-compat/footer.css b/rt/share/html/NoAuth/css/freeside2.1/portlets.css
index 326ff647d..d96d5a9f0 100644
--- a/rt/html/NoAuth/css/3.4-compat/footer.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/portlets.css
@@ -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,27 @@
%# 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;
+table.myrt {
+ width: 100%;
+}
+
+table.dashboard {
+ width: 100%;
+ border: 0;
}
-#footer p {
- text-align: right;
- padding: 0 0.5em 0 0;
- margin: 0;
+.quick-create .select-queue {
+ width: 12em;
}
+.quick-create input[type="text"], .quick-create textarea {
+ width: 100%;
+
+}
+
+.reminders blockquote {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ margin-left: 1em;
+ margin-right: 1em;
+}
diff --git a/rt/html/NoAuth/css/3.5-default/forms.css b/rt/share/html/NoAuth/css/freeside2.1/ticket-lists.css
index 3b7f2d6fd..799a391e5 100755..100644
--- a/rt/html/NoAuth/css/3.5-default/forms.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/ticket-lists.css
@@ -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,92 +45,128 @@
%# 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;
+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;
+
+
}
-form input.button:active {
- border: 3px double #08c;
- border-top-color: #069;
- border-left-color: #069;
+table.queue-summary tr>*:first-child {
+ padding-left: 1em;
+
}
-form select {
- border: 1px solid #069;
- padding: 1px;
+
+table.queue-summary tr>*:last-child {
+ padding-right: 1em;
+
}
-form input.field, form input, form textarea {
- border: 1px solid #069;
- padding: 3px;
+table.ticket-list a, table.queue-summary a, table.collection a {
+ font-weight: bold;
}
-form input.checkbox, form input.radio {
- border: none;
- padding: 0;
+
+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;
+
}
-/* form .entry input, form .value input */
-.label, form label, .labeltop {
- font-weight: bold;
+table.queue-summary th.collection-as-table {
+ font-size: 0.9em;
+ margin-bottom: 0.5em;
+ text-align: right;
+
}
-.labeltop {
- vertical-align: top;
+table.queue-summary th.collection-as-table:first-child {
+ text-align: left;
+
}
-.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;
+
+tr.collection-as-table+tr.collection-as-table th {
+ border-bottom: 2px solid grey;
+
}
-.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;
+
+
+table.queue-summary td {
+ background: #efefef;
+ border-bottom: 1px solid #ccc;
}
-%# ComboBox styles... some properties like height and width must be dynamically
-%# set in the JS (at least for now).
-.combobox {
- border: 1px solid #069;
- padding: 4px;
+
+
+tr.evenline td {
+ background: #eee;
}
-.combobox .combo-button {
- padding: 0 2px 0 2px;
- margin: 0;
- background: ButtonFace;
- color: ButtonText;
- border: 2px outset ButtonHighlight;
- cursor: default;
- font-size: 8pt;
+tr.oddline td {
+ background: #fff;
+
}
-.combobox .combo-text {
- border: none;
- margin: 0;
- padding: 1px;
+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;
}
-.combobox .combo-list {
- border: 1px outset;
- z-index: 200;
+
+
+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/html/Search/Simple.html b/rt/share/html/NoAuth/css/freeside2.1/ticket-search.css
index c531bd1e8..7a31d3e82 100644
--- a/rt/html/Search/Simple.html
+++ b/rt/share/html/NoAuth/css/freeside2.1/ticket-search.css
@@ -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,63 +45,155 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<& /Elements/Header, Title => $title &>
-<& /Elements/Tabs,
- current_toptab => "Search/Simple.html",
- Title => $title
-&>
+#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;
+}
-<& /Elements/Callback, _CallbackName => 'PreForm', %ARGS &>
+#pick-criteria td.operator select {
+ text-align: right;
+}
-<div id="SimpleSearchForm">
-<form action="Simple.html" method="get">
+#pick-criteria td.value input,
+#pick-criteria td.value select {
+ width: 10em;
+}
-<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>
+#pick-criteria td.value #ValueOfDate {
+ width: 6em;
+}
-<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>
+#pick-criteria td.value #ValueOfTime {
+ width: 4em;
-</form>
+}
-<& /Elements/Callback, _CallbackName => 'PostForm', %ARGS &>
+#pick-criteria td.value #ValueOfTime-TimeUnits{
+ width: 5.5em;
+}
-</div>
+#pick-criteria td.value {
+ padding-right: 0.5em;
+ text-align: left;
+ font: message-box;
+}
-<%INIT>
-my $title = loc("Search for tickets");
-use RT::Search::Googleish;
+#editquery, #editsearches{
+ position: absolute;
+ margin-top: 0.2em;
+ right: 1em;
+ left: 60%;
+ top: 1em;
+/* margin-top: -1em; */
+}
+
+#editquery {
+ top: 1.3em;
+}
-if ($q) {
- my $tickets = new RT::Tickets( $session{'CurrentUser'} );
-
- $m->comp('/Elements/Callback', %ARGS, _CallbackName => 'ModifyQuery', query => \$q);
- if ($q =~ /^(\d+)$/) {
- RT::Interface::Web::Redirect($RT::WebURL."/Ticket/Display.html?id=".$q);
- }
+#editsearches {
+ top: 24em;
+}
- my %args = (
- Argument => $q,
- TicketsObj => $tickets,
- );
- $m->comp('/Elements/Callback', %ARGS, _CallbackName => 'SearchArgs', args => \%args);
+#pick-criteria {
+ width: 58%;
+ padding-top: 0em;
+ margin-top: 0em;
+}
- my $search = RT::Search::Googleish->new(%args);
+#pick-criteria .titlebox-content {
+ overflow-x: auto;
+}
- $m->comp( "Results.html", Query => $search->QueryToSQL() );
- $m->comp( "/Elements/Footer" );
- $m->abort();
+#comp-Search-Build .submit {
+ width: 58%;
}
-</%INIT>
-<%ARGS>
-$q => undef
-</%ARGS>
+
+#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/freeside2.1/ticket.css b/rt/share/html/NoAuth/css/freeside2.1/ticket.css
new file mode 100644
index 000000000..78477e0d4
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/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/html/NoAuth/css/3.4-compat/login.css b/rt/share/html/NoAuth/css/freeside2.1/tools.css
index 7b8fad6a7..843feb27f 100644
--- a/rt/html/NoAuth/css/3.4-compat/login.css
+++ b/rt/share/html/NoAuth/css/freeside2.1/tools.css
@@ -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,12 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-#body.login-body {
- width: 98%;
+table.myday td {
+ padding: 1em;
}
-#login-box {
- width: 30em;
+ol.dashboard-queries {
+ padding-left: 1.5em;
}
+
+
diff --git a/rt/share/html/NoAuth/css/freeside2.1/yui-fonts.css b/rt/share/html/NoAuth/css/freeside2.1/yui-fonts.css
new file mode 100644
index 000000000..fdae8d98f
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside2.1/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/images/created.png b/rt/share/html/NoAuth/images/created.png
new file mode 100644
index 000000000..4d5eeb9ea
--- /dev/null
+++ b/rt/share/html/NoAuth/images/created.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/created_due.png b/rt/share/html/NoAuth/images/created_due.png
new file mode 100644
index 000000000..52dfc96f0
--- /dev/null
+++ b/rt/share/html/NoAuth/images/created_due.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/due.png b/rt/share/html/NoAuth/images/due.png
new file mode 100644
index 000000000..30a3aff8a
--- /dev/null
+++ b/rt/share/html/NoAuth/images/due.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/reminder.png b/rt/share/html/NoAuth/images/reminder.png
new file mode 100644
index 000000000..4370b6902
--- /dev/null
+++ b/rt/share/html/NoAuth/images/reminder.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/resolved.png b/rt/share/html/NoAuth/images/resolved.png
new file mode 100644
index 000000000..09db36d5a
--- /dev/null
+++ b/rt/share/html/NoAuth/images/resolved.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/started.png b/rt/share/html/NoAuth/images/started.png
new file mode 100644
index 000000000..e177addea
--- /dev/null
+++ b/rt/share/html/NoAuth/images/started.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/starts.png b/rt/share/html/NoAuth/images/starts.png
new file mode 100644
index 000000000..88064ba50
--- /dev/null
+++ b/rt/share/html/NoAuth/images/starts.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/starts_due.png b/rt/share/html/NoAuth/images/starts_due.png
new file mode 100644
index 000000000..16a4de46f
--- /dev/null
+++ b/rt/share/html/NoAuth/images/starts_due.png
Binary files differ
diff --git a/rt/share/html/NoAuth/images/updated.png b/rt/share/html/NoAuth/images/updated.png
new file mode 100644
index 000000000..680e79a54
--- /dev/null
+++ b/rt/share/html/NoAuth/images/updated.png
Binary files differ
diff --git a/rt/share/html/Prefs/Calendar.html b/rt/share/html/Prefs/Calendar.html
new file mode 100644
index 000000000..5fbdd2717
--- /dev/null
+++ b/rt/share/html/Prefs/Calendar.html
@@ -0,0 +1,123 @@
+<%args>
+$ChangeURL => undef
+$ResetURL => undef
+$SearchType => 'Ticket'
+$HiddenField => undef
+</%args>
+
+<& /Elements/Header, Title => $title &>
+<& /User/Elements/Tabs,
+ current_tab => 'Prefs/Calendar.html',
+ Title => $title
+&>
+
+<&| /Widgets/TitleBox, title => loc('ICal Feeds (ics)') &>
+
+<&| /Widgets/TitleBox, title => 'Help' &>
+
+<h3>displaying reminders :</h3>
+<p>If you want to have reminders in a search you need to go in the <a
+href="<%$RT::WebPath%>/Search/Edit.html"><%loc("Edit Query")%></a> tab
+of the <%loc("query builder")%> and add something like that :
+
+ <pre>
+ AND ( Type = 'ticket' OR Type = 'reminder' )
+</pre>
+</p>
+
+<h3>displaying other kind of dates :</h3>
+<p>By default RTx::Calendar display Due and Starts dates. You can
+select other kind of events you want with the <%loc("Display
+Columns")%> section in the <a
+href="<%$RT::WebPath%>/Search/Build.html"><%loc("Query
+Builder")%></a>. The following one will display the two latter and
+LastUpdated dates :
+
+<pre>
+ '&lt;small&gt;__Due__&lt;/small&gt;',
+ '&lt;small&gt;__Starts__&lt;/small&gt;',
+ '&lt;small&gt;__LastUpdated__&lt;/small&gt;'
+</pre>
+</p>
+
+<h3>changing the default query :</h3>
+<p>You can change the default Query of Calendar.html and MyCalendar
+portlet by saving a query with the name <code>calendar</code> in the
+<a href="<%$RT::WebPath%>/Search/Build.html"><%loc("Query
+Builder")%></a>.</p>
+
+</&>
+
+<& /Prefs/Elements/CalendarFeed &>
+
+% # only allow this part if
+% if ($AllowSearch) {
+
+% my $search_count;
+
+% # I'm quite sure the loop isn't usefull but...
+% my @Objects = $session{CurrentUser}->UserObj;
+% for my $object (@Objects) {
+% next unless ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id;
+% my @searches = $object->Attributes->Named('SavedSearch');
+% for my $search (@searches) {
+% next if ($search->SubValue('SearchType')
+% && $search->SubValue('SearchType') ne $SearchType);
+% $search_count++;
+<& /Prefs/Elements/CalendarFeed, Object => $object, Search => $search &>
+
+% }
+% }
+% unless ($search_count) {
+
+<&| /Widgets/TitleBox, title => loc('Private Search ICal feeds')
+ , title_class=> 'inverse'
+ , color => "#993333" &>
+
+You can add private ICal feeds by saving new queries in <a
+href="<%$RT::WebPath . '/Search/Build.html'%>">the Query Builder</a>
+
+</&>
+
+% }
+% } else {
+%#<&| /Widgets/TitleBox, title => loc('Private Search ICal feeds')
+%# , title_class=> 'inverse'
+%# , color => "#993333" &>
+%#
+%#<%loc('Private search ICal feeds disabled. To enable them, ask your admin for "[_1]" and "[_2]" rights',
+%# loc('CreateSavedSearch'),
+%# loc('LoadSavedSearch') )%>
+%#
+%#</&>
+% }
+
+</&>
+
+<%INIT>
+use Digest::SHA1;
+use RT::SavedSearches;
+
+my $title = loc("Calendar Prefs");
+my $AllowSearch;
+
+$AllowSearch = 1
+ if $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch',
+ Object=> $RT::System );
+
+my $object;
+
+if ($HiddenField eq 'Private') {
+ $object = $session{CurrentUser}->UserObj;
+} elsif ($AllowSearch and my ($SearchId) = $HiddenField =~ m/SavedSearch\-(\d+)/) {
+ $object = $session{CurrentUser}->Attributes->WithId($SearchId);
+}
+
+if (defined $ChangeURL) {
+ my @args = $object->SetAttribute(Name => 'ICalURL', Content => Digest::SHA1::sha1_base64(time));
+} elsif (defined $ResetURL) {
+ my @args = $object->DeleteAttribute('ICalURL');
+}
+
+
+</%INIT>
diff --git a/rt/share/html/Prefs/Elements/CalendarFeed b/rt/share/html/Prefs/Elements/CalendarFeed
new file mode 100644
index 000000000..46893435e
--- /dev/null
+++ b/rt/share/html/Prefs/Elements/CalendarFeed
@@ -0,0 +1,68 @@
+<%args>
+$Search => undef
+$Object => undef
+$HiddenField => undef
+</%args>
+
+<&| /Widgets/TitleBox, title => $title &>
+
+% if ($FeedText) {
+<p><%$FeedText%></p>
+% } else {
+This feed will show tickets with due date find with query:<br />
+"<%$Search->SubValue('Query')%>".
+% }
+
+% if ($ICalURL) {
+<p>Your can paste this url in your calendar : <b><a href="<%$link%>"><%$link%></a></b><p>
+<table>
+<tr>
+<td>
+<form action="<%$RT::WebPath%>/Prefs/Calendar.html" method="post">
+<input type="hidden" name="HiddenField" value="<%$HiddenField%>" />
+<input type="submit" class="button" name="ResetURL" value="<%loc('Disable Feed')%>" />
+</form>
+</td>
+<td>
+<form action="<%$RT::WebPath%>/Prefs/Calendar.html" method="post">
+<input type="hidden" name="HiddenField" value="<%$HiddenField%>" />
+<input type="submit" class="button" name="ChangeURL" value="<%loc('Change Feed URL')%>" />
+</form>
+</td>
+</tr>
+</table>
+% } else {
+
+<form action="<%$RT::WebPath%>/Prefs/Calendar.html" method="post">
+<input type="hidden" name="HiddenField" value="<%$HiddenField%>" />
+<input type="submit" class="button" name="ChangeURL" value="<%loc('Enable Feed')%>" />
+</form>
+% }
+
+</&>
+
+<%init>
+my $title;
+my $ICalURL;
+my $Id;
+my $FeedText;
+my $link;
+
+if ($Object) {
+ $title = loc('Feed for "') . ($Search->Description || loc('Unnamed search')) . '" search';
+ $HiddenField = "SavedSearch-" . $Search->Id;
+ $ICalURL = $Search->FirstAttribute('ICalURL');
+ $Id = $session{CurrentUser}->Id . "@" . $Search->Id;
+ $title .= " (disabled)" unless $ICalURL;
+} else {
+ $title = loc('Feed for default calendar');
+ $HiddenField = "Private";
+ $ICalURL = $session{CurrentUser}->UserObj->FirstAttribute('ICalURL');
+ $Id = $session{CurrentUser}->Id;
+ $FeedText = "This feed will show yours and Nobody's tasks with due date.";
+}
+
+$link = $RT::WebURL . "NoAuth/Calendar/" . $Id . "/" . $ICalURL->Content
+ if $ICalURL;
+
+</%init> \ No newline at end of file
diff --git a/rt/share/html/Prefs/SavedSearches.html b/rt/share/html/Prefs/SavedSearches.html
new file mode 100644
index 000000000..fe9859ca4
--- /dev/null
+++ b/rt/share/html/Prefs/SavedSearches.html
@@ -0,0 +1,10 @@
+<& /Elements/Header, Title => $title, &>
+<& /Ticket/Elements/Tabs,
+ current_tab => "Prefs/SavedSearches.html",
+ Title => $title,
+&>
+<& /Elements/SavedSearches, %ARGS &>
+
+<%INIT>
+my $title = "Saved Searches";
+</%INIT>
diff --git a/rt/share/html/Prefs/SearchOptions.html b/rt/share/html/Prefs/SearchOptions.html
index 613a0f351..aeb27863f 100644
--- a/rt/share/html/Prefs/SearchOptions.html
+++ b/rt/share/html/Prefs/SearchOptions.html
@@ -45,7 +45,7 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<& /Elements/Header, Title => loc("Search Preferences") &>
+<& /Elements/Header, Title => loc("Ticketing Search Preferences") &>
<& /User/Elements/Tabs,
current_tab => "Prefs/SearchOptions.html",
Title => loc("Search Preferences")
diff --git a/rt/share/html/RTx/Statistics/CallsMultiQueue/Elements/Chart b/rt/share/html/RTx/Statistics/CallsMultiQueue/Elements/Chart
new file mode 100755
index 000000000..6a7279bdc
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/CallsMultiQueue/Elements/Chart
@@ -0,0 +1,39 @@
+<%perl>
+$r->content_type("image/$format");
+print $graph->plot(\@data)->$format();
+$m->abort();
+</%perl>
+<em><&|/l, $#data+1&>[_1] Plot Elements</&></em><p>
+% foreach my $value (@data) {
+<% $value %><p>
+% }
+<em><&|/l&>x_labels</&>:</em><p>
+<% $ARGS{x_labels} %>
+<p>
+<em><&|/l&>legend</&>:</em><p>
+<% $ARGS{set_legend} %>
+<p>
+<em><&|/l, (keys %ARGS) - 2&>[_1] data sets</&>:</em><p>
+
+% for (1..(scalar keys %ARGS)-2) {
+<% $_ %> <% $ARGS{"data$_"} %><p>
+% }
+
+<%INIT>
+use GD::Graph::lines;
+
+my @data;
+my $graph = GD::Graph::lines->new($Statistics::GraphWidth||500,$Statistics::GraphHeight||400);
+$graph->set(export_format => "png",
+ x_label => 'Day of Week',
+ y_label => 'Tickets per day');
+$graph->set_legend(split /,/ , $ARGS{set_legend});
+my $format = $graph->export_format;
+push @data, [split /,/ , $ARGS{x_labels}];
+for (1..((scalar keys %ARGS)-2)) {
+ push @data, [split /,/ , $ARGS{"data".$_}];
+}
+
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/CallsMultiQueue/index.html b/rt/share/html/RTx/Statistics/CallsMultiQueue/index.html
new file mode 100755
index 000000000..1b7a6592c
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/CallsMultiQueue/index.html
@@ -0,0 +1,325 @@
+<& /Elements/Header, Title => loc('Tickets per day in Multiple queues') &>
+<& /RTx/Statistics/Elements/Tabs, Title => loc('Tickets per day in Multiple Queues by status') &>
+
+<h3>Description</h3>
+<p>This chart shows details of tickets per day by their status. You can select multiple queues to display at the same time, but only one status. You can chose any of the defined status values.
+There is also the option to display all available queues at the same time.
+The default display shows tickets resolved in your default queue (General unless altered locally).
+The line chart below shows the same information in a graphical form.
+
+<br />
+
+<form method="POST" action="index.html">
+
+%# Build Legend
+% my @legend;
+% for (sort keys %queues_to_show) {
+% push @legend, $_;
+% }
+
+%my $title = "Tickets with Status $status in " . join(', ', @queues) . ", per day from " .
+% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " .
+% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]);
+
+<& /Elements/TitleBoxStart, title => $title, title_href => "/RTx/Statistics/OpenStalled/index.html?$QueryString"&>
+<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH="100%">
+% if ($ShowHeader) {
+<& /RTx/Statistics/Elements/CollectionAsTable/Header,
+ Format => \@RowFormat,
+ FormatString => $RowFormat,
+ AllowSorting => $AllowSorting,
+ Order => $Order,
+ Query => undef,
+ Rows => $Rows,
+ Page => $Page,
+ OrderBy => $OrderBy ,
+ BaseURL => $BaseURL,
+ maxitems => $maxitems &>
+% }
+% my $line = 0;
+% LINE: for my $d (0..$#dates) {
+% if ($d == $#dates ){
+% next LINE;
+% }
+% $line++;
+% my $x = 1;
+% $values{Statistics_Date} = Statistics::FormatDate($dateformat, $dates[$d]);
+% my $row_total=0;
+% foreach my $q (sort keys %queues_to_show) {
+% my $tix = new RT::Tickets($session{'CurrentUser'});
+% if ($status eq "resolved") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% }
+% elsif ($status eq "new") {
+% $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% }
+% elsif ($status eq "deleted") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% }
+% elsif ($status eq "stalled") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% }
+% elsif ($status eq "open") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% }
+% elsif ($status eq "rejected") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% }
+% $tix->LimitQueue (VALUE => $q);
+% $values{$q} = $tix->Count;
+% $row_total += $tix->Count;
+% $data[$x++][$d] = $tix->Count;
+% }
+% $values{Statistics_Totals} = $row_total;
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@RowFormat, i => $line, record => $record, maxitems => $maxitems &>
+% }
+</table>
+<& /Elements/TitleBoxEnd&>
+
+<!-- <td>Show:</td>
+ <td COLSPAN=2><SELECT NAME="status">
+% for (qw(resolved new deleted stalled rejected open)) {
+ <OPTION VALUE="<% $_ %>" <% $_ eq $status && "SELECTED" %>>
+ <% loc($_) %></OPTION>
+% }
+--!>
+
+<%perl>
+# Create the graph URL
+my $url = 'Elements/Chart?x_labels=';
+#$url .= join ",", @{ shift @data } . "&";
+for (0..$max) {
+ $url .= $m->interp->apply_escapes($data[0][$_],'u') . ",";
+}
+chop $url;
+$url .= "&";
+shift @data;
+$url .= 'set_legend='.(join ",", @legend)."&";
+for (0..$#data) {
+ $url .= "data".(1+$_)."=". (join ",", @{$data[$_]})."&";
+}
+chop $url;
+</%perl>
+
+<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &>
+
+<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox,
+ Title => "Change Status, Queues or Dates",
+ ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear,
+ eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear,
+ weekends => $weekends,
+ ShowMultiQueues => 1, queues_ref => \@queues,
+ ShowStatus => 1, Status => $status
+ &>
+
+</form>
+
+<a href="<%$RT::WebPath%>/RTx/Statistics/CallsMultiQueue/index.html?<% $QueryString %>"><&|/l&>Bookmarkable link</&></a>
+%# | <a href="<%$RT::WebPath%>/RTx/Statistics/CallsMultiQueue/Results.tsv?<%$QueryString%>"><&|/l&>spreadsheet</&></a>
+<BR>
+<BR>
+
+<%ARGS>
+$status => $Statistics::MultiQueueStatus
+$max => $Statistics::MultiQueueMaxRows
+@queues => @Statistics::MultiQueueQueueList
+$weekends => $Statistics::PerDayWeekends;
+$sMonth=>undef
+$sDay=>undef
+$sYear=>undef
+$eMonth=>undef
+$eDay=>undef
+$eYear=>undef
+$days=>undef
+$dateformat => $Statistics::MultiQueueDateFormat
+$currentMonth=>undef
+
+$AllowSorting => undef
+$Order => undef
+$OrderBy => undef
+$ShowNavigation => 1
+$ShowHeader => 1
+$Rows => 50
+$Page => 1
+$BaseURL => undef
+$AddAllCheck => undef
+</%ARGS>
+
+<%INIT>
+
+use RTx::Statistics;
+use Time::Local;
+my $n = 0;
+my @data = ([]);
+my @dates;
+my @msgs;
+my $selected;
+my $diff;
+my %queues_to_show;
+my $secsPerDay=86400;
+my $sEpoch;
+my $eEpoch;
+my $QueryString;
+my $maxitems;
+my $RowFormat;
+my $BoldRowFormat;
+my %record;
+my %values;
+my $record = \%record;
+
+$record{values} = \%values;
+
+Statistics::DebugClear();
+Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n");
+for my $key (keys %ARGS) {
+ Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n");
+}
+
+
+ # Handle the Add All Checkbox
+ if($AddAllCheck eq "on") {
+ $AddAllCheck = undef;
+ undef (@queues);
+ my $q=new RT::Queues($session{'CurrentUser'});
+ $q->UnLimit;
+ while (my $queue=$q->Next) {
+ next if !$queue->CurrentUserHasRight('SeeQueue');
+ push @queues, $queue->Name;
+ }
+ }
+
+ # If the user has the right to see the queue, put it into the map
+ for my $q (@queues) {
+ my $Queueobj = new RT::Queue($session{'CurrentUser'});
+ $Queueobj->Load($q);
+ next if !$Queueobj->CurrentUserHasRight('SeeQueue');
+ $queues_to_show{$q} = 1;
+ }
+
+ $maxitems = (scalar @queues) + 2;
+
+ # Build the format strings
+ $RowFormat = "'__Statistics_Date__'";
+ $BoldRowFormat = "'<B>__Statistics_Date__</B>'";
+ for my $q (@queues) {
+ $RowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'";
+ $BoldRowFormat .= ",'<B>__Statistics_Dynamic__</B>/KEY:$q/TITLE:$q/STYLE:text-align:right;'";
+ }
+ $RowFormat .= ",'<B>__Statistics_Totals__</B>/STYLE:text-align:right;'";
+ $BoldRowFormat .= ",'<B>__Statistics_Totals__</B>/STYLE:text-align:right;'";
+ # Parse the formats into structures.
+ my (@RowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $RowFormat);
+ my (@BoldRowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldRowFormat);
+
+if ($sDay > $Statistics::monthsMaxDay{$sMonth}) {
+ $sDay = $Statistics::monthsMaxDay{$sMonth};
+}
+
+if ($eDay > $Statistics::monthsMaxDay{$eMonth}) {
+ $eDay = $Statistics::monthsMaxDay{$eMonth};
+}
+
+if ($sYear){
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900);
+}
+if ($eYear){
+Statistics::DebugLog("eMonth = " . $eMonth . "\n");
+ $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900);
+} else {
+ # This case happens when the page is first loaded
+ my @local = localtime(time);
+ ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]);
+ $eYear += 1900;
+ $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]);
+Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n");
+}
+
+if (($eEpoch < $sEpoch) || ($sEpoch == 0)) {
+ # We have an end, but not a start, or, overlapping.
+
+ # if $currentMonth is set, just set the day to 1
+ if($currentMonth) {
+ # set start vars from end, but with day set to 1
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch);
+ $sDay=1;
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear);
+ } else {
+ # If the user has specified how many days back to go, use that,
+ # If not, set start to configured default period before end
+ if(defined $days) {
+ $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay);
+ } else {
+ $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay);
+ }
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch);
+ }
+ $sYear += 1900;
+}
+
+# Compute days to chart.
+# The +1 is because we need to generate one more date. If the user
+# selected a 10 day range, we need to generate 11 days.
+$diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1;
+Statistics::DebugLog("Setting diff=$diff\n");
+
+Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n");
+Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n");
+
+# Build the new query string
+$QueryString = "queues=" . join("&queues=", @queues);
+$QueryString .= "&sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends";
+
+
+
+
+# Set up the end date to be midnight(morning) of the date after the one the user wanted.
+my $endRange = $eEpoch + $Statistics::secsPerDay;
+$n = 0;
+until ($#dates == $diff) {
+ my $date = new RT::Date($session{CurrentUser});
+ $date->Set(Value=>$endRange - $n, Format => 'unix');
+ # Note: we used to adjust the time to local midnight, but
+ # none of the other date entry fields in RT seem to adjust, so we've stopped.
+ #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n");
+ $n+= $Statistics::secsPerDay;
+ # If we aren't showing weekends and this is one, decrement the number
+ # of days to show and skip to the next date.
+ if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;}
+ unshift @dates, $date;
+Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n");
+ unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date);
+}
+
+# We put an extra day into the lists to cover up till midnight of the next day,
+# But we don't want that to appear in the labels, so pop it off.
+pop( @{ $data[0] } );
+
+my $queue = new RT::Queues($session{CurrentUser});
+$queue->UnLimit;
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($queue);
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/CallsQueueDay/Elements/Chart b/rt/share/html/RTx/Statistics/CallsQueueDay/Elements/Chart
new file mode 100755
index 000000000..2d6b43c17
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/CallsQueueDay/Elements/Chart
@@ -0,0 +1,29 @@
+<%perl>
+$r->content_type("image/$format");
+print $graph->plot(\@data)->$format();
+$m->abort();
+print $#data+1 . " Elements:<p>";
+for (0..$#data) {
+print $data[$_];
+print "<p>";
+}
+</%perl>
+<%INIT>
+use GD::Graph::lines;
+
+my @data;
+my $graph = GD::Graph::lines->new($Statistics::GraphWidth||500,$Statistics::GraphHeight||400);
+$graph->set(export_format => "png",
+ x_label => 'Day of Week',
+ y_label => 'Tickets per Day',
+ x_labels_vertical => 1,
+ );
+my $format = $graph->export_format;
+$graph->set_legend(split /,/ , $ARGS{set_legend});
+push @data, [split /,/ , $ARGS{x_labels}];
+push @data, [split /,/ , $ARGS{data1}];
+push @data, [split /,/ , $ARGS{data2}];
+push @data, [split /,/ , $ARGS{data3}];
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/CallsQueueDay/Results.tsv b/rt/share/html/RTx/Statistics/CallsQueueDay/Results.tsv
new file mode 100644
index 000000000..23f0c699c
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/CallsQueueDay/Results.tsv
@@ -0,0 +1,191 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You 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 }}}
+<%ARGS>
+$Queue => undef
+$weekends => $Statistics::PerDayWeekends;
+$sMonth=>undef
+$sDay=>undef
+$sYear=>undef
+$eMonth=>undef
+$eDay=>undef
+$eYear=>undef
+$days=>undef
+$currentMonth=>undef
+</%ARGS>
+
+<%INIT>
+use RTx::Statistics;
+use Time::Local;
+my @dates;
+my $n = 0;
+my %Totals;
+my $now = new RT::Date($session{CurrentUser});
+my $sEpoch;
+my $eEpoch;
+
+if (!defined $Queue) {
+ $Queue = $Statistics::PerDayQueue;
+}
+
+if ($sDay > $Statistics::monthsMaxDay{$sMonth}) {
+ $sDay = $Statistics::monthsMaxDay{$sMonth};
+}
+
+if ($eDay > $Statistics::monthsMaxDay{$eMonth}) {
+ $eDay = $Statistics::monthsMaxDay{$eMonth};
+}
+
+if ($sYear){
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900);
+}
+if ($eYear){
+Statistics::DebugLog("eMonth = " . $eMonth . "\n");
+ $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900);
+} else {
+ # This case happens when the page is first loaded
+ my @local = localtime(time);
+ ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]);
+ $eYear += 1900;
+ $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]);
+Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n");
+}
+
+if (($eEpoch < $sEpoch) || ($sEpoch == 0)) {
+ # We have an end, but not a start, or, overlapping.
+
+ # if $currentMonth is set, just set the day to 1
+ if($currentMonth) {
+ # set start vars from end, but with day set to 1
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch);
+ $sDay=1;
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear);
+ } else {
+ # If the user has specified how many days back to go, use that,
+ # If not, set start to configured default period before end
+ if(defined $days) {
+ $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay);
+ } else {
+ $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay);
+ }
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch);
+ }
+ $sYear += 1900;
+}
+
+# set content type
+$r->content_type('application/vnd.ms-excel');
+
+# Put out some data about the generation of this file
+$m->out("Tickets per day for Queue:\t" . $Queue . "\tGenerated at:\t" . Statistics::FormatDate("%x %X", $now). "\n\n");
+
+
+# Compute days to chart.
+# The +1 is because we need to generate one more date. If the user
+# selected a 10 day range, we need to generate 11 days.
+my $diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1;
+
+# Build array of dates
+my $endRange = $eEpoch + $Statistics::secsPerDay;
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($Queue);
+until ($#dates == $diff) {
+ my $date = new RT::Date($session{CurrentUser});
+ $date->Set(Value=>$endRange - $n, Format => 'unix');
+ # Note: we used to adjust the time to local midnight, but
+ # none of the other date entry fields in RT seem to adjust, so we've stopped.
+ #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n");
+ $n+= $Statistics::secsPerDay;
+ # If we aren't showing weekends and this is one, decrement the number
+ # of days to show and skip to the next date.
+ if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;}
+ unshift @dates, $date;
+}
+
+# Output header row
+$m->out("Date\tcreate\tresolved\tdeleted\n");
+
+
+LINE: for my $d (0..$#dates) {
+ if ($d == $#dates){
+ next LINE;
+ }
+ my $x = 1;
+ # Output the date for this row
+ $m->out(Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d]));
+
+ # output the 3 columns for this row
+ for my $status (qw(created resolved deleted)) {
+ my $tix = new RT::Tickets($session{'CurrentUser'});
+ if ($status eq "created") {
+ $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+ if ($dates[$d+1]) {
+ $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+ }
+ } elsif ($status eq "resolved") {
+ $tix->LimitStatus(VALUE => $status);
+ $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+ if ($dates[$d+1]) {
+ $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+ }
+ } elsif ($status eq "deleted") {
+ $tix->LimitStatus(VALUE => $status);
+ $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+ if ($dates[$d+1]) {
+ $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+ }
+ }
+ $tix->LimitQueue (VALUE => $Queue);
+ $m->out( "\t" . $tix->Count );
+ $Totals{$status} += $tix->Count;
+ }
+ $m->out("\n");
+}
+
+# Output the totals
+$m->out("Totals\t$Totals{created}\t$Totals{resolved}\t$Totals{deleted}\n");
+
+$m->abort();
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/CallsQueueDay/index.html b/rt/share/html/RTx/Statistics/CallsQueueDay/index.html
new file mode 100755
index 000000000..5a4fe52f0
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/CallsQueueDay/index.html
@@ -0,0 +1,270 @@
+<& /Elements/Header, Title => loc("Tickets per day in Queue:" . $QueueObj->Name()) &>
+<& /RTx/Statistics/Elements/Tabs, Title => loc("Tickets by status per day in Queue:" . $QueueObj->Name()) &>
+
+<h3>Description</h3>
+<p>This page displays details about tickets in the selected queue over the date range chosen. It shows how many tickets were created on
+each day in the chosen range, and how many of those were either Resolved or Deleted.</p>
+<p>To always show the current month to date, bookmark this <a href="<%$RT::WebPath%>/RTx/Statistics/CallsQueueDay/index.html?currentMonth=1">link</a>, or
+for a spreadsheet, use this <a href="<%$RT::WebPath%>/RTx/Statistics/CallsQueueDay/Results.tsv?currentMonth=1">link</a>.</p>
+
+<form method="POST" action="index.html">
+
+% Statistics::DebugLog("queue name=" . $QueueObj->Name() . "\n");
+
+%my $title = "Ticket counts in " . $QueueObj->Name() . " by status per day from " .
+% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " .
+% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]);
+<&|/Elements/TitleBox,
+ title => $title,
+ title_href => "/RTx/Statistics/CallsQueueDay/index.html?$QueryString" &>
+<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%>
+% if ($ShowHeader) {
+<& /RTx/Statistics/Elements/CollectionAsTable/Header,
+ Format => \@Format,
+ FormatString => $Format,
+ AllowSorting => $AllowSorting,
+ Order => $Order,
+ Query => undef,
+ Rows => $Rows,
+ Page => $Page,
+ OrderBy => $OrderBy ,
+ BaseURL => $BaseURL,
+ maxitems => $maxitems &>
+% }
+% my $line = 1;
+% LINE: for my $d (0..$#dates) {
+% if ($d == $#dates){
+% next LINE;
+% }
+% my $x = 1;
+% $values{Statistics_Date} = Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d]);
+%# NOTE need to handle all status values here....
+% for my $status (qw(created resolved deleted)) {
+% my $tix = new RT::Tickets($session{'CurrentUser'});
+% $tix->LimitQueue (VALUE => $Queue);
+% if ($status eq "created") {
+% $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% $values{Statistics_Created_Count} = $tix->Count;
+% $Totals{Statistics_Created_Count} += $tix->Count;
+% }
+% elsif ($status eq "resolved") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% $values{Statistics_Resolved_Count} = $tix->Count;
+% $Totals{Statistics_Resolved_Count} += $tix->Count;
+% }
+% elsif ($status eq "deleted") {
+% $tix->LimitStatus(VALUE => $status);
+% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% $values{Statistics_Deleted_Count} = $tix->Count;
+% $Totals{Statistics_Deleted_Count} += $tix->Count;
+% }
+% $data[$x++][$d] = $tix->Count;
+% }
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &>
+% $line++;
+% }
+% $values {Statistics_Date} = "Totals";
+% $values {Statistics_Created_Count} = $Totals{Statistics_Created_Count};
+% $values {Statistics_Resolved_Count} = $Totals{Statistics_Resolved_Count};
+% $values {Statistics_Deleted_Count} = $Totals{Statistics_Deleted_Count};
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldFormat, i => $line, record => $record, maxitems => $maxitems &>
+</table>
+</&>
+
+<%perl>
+# Create the graph URL
+my $url= 'Elements/Chart?x_labels=';
+for (1..$diff) {
+ $url .= $data[0][$_] . ",";
+}
+chop $url;
+$url .= "&";
+shift @data;
+for (0..$#data) {
+ $url .= "data".(1+$_)."=".(join ",", @{$data[$_]})."&";
+}
+chop $url;
+$url .= "&set_legend=Created,Resolved,Deleted";
+</%perl>
+
+<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &>
+
+<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox,
+ Title => "Change Queue or Dates",
+ ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear,
+ eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear,
+ weekends => $weekends,
+ ShowSingleQueue => 1, Queue => $Queue
+ &>
+
+</form>
+
+<a href="<%$RT::WebPath%>/RTx/Statistics/CallsQueueDay/index.html?<% $QueryString %>"><&|/l&>Bookmarkable link</&></a> |
+<a href="<%$RT::WebPath%>/RTx/Statistics/CallsQueueDay/Results.tsv?<%$QueryString%>"><&|/l&>spreadsheet</&></a>
+<BR>
+<BR>
+
+
+% Statistics::DebugLog("ref of eMonth is " . ref($eMonth) . "\n");
+% Statistics::DebugInit( $m );
+
+<%ARGS>
+$Queue => undef
+$weekends => $Statistics::PerDayWeekends;
+$sMonth=>undef
+$sDay=>undef
+$sYear=>undef
+$eMonth=>undef
+$eDay=>undef
+$eYear=>undef
+$days=>undef
+$currentMonth=>undef
+
+$AllowSorting => undef
+$Order => undef
+$OrderBy => undef
+$ShowNavigation => 1
+$ShowHeader => 1
+$Rows => 50
+$Page => 1
+$BaseURL => undef
+</%ARGS>
+
+<%INIT>
+use RTx::Statistics;
+use Time::Local;
+my $selected;
+my $n = 0;
+my @data = ([]);
+my @dates;
+my @msgs;
+my $diff;
+my $sEpoch=0;
+my $eEpoch=0;
+my %Totals;
+my $QueryString;
+my $maxitems = 4;
+my %record;
+my %values;
+my $record = \%record;
+
+$record{values} = \%values;
+
+
+# If debugging, set things up and display all the args
+Statistics::DebugClear();
+Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n");
+for my $key (keys %ARGS) {
+ Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n");
+}
+
+my $Format = qq{ Statistics_Date,
+ '__Statistics_Created_Count__/STYLE:text-align:right;',
+ '__Statistics_Resolved_Count__/STYLE:text-align:right;',
+ '__Statistics_Deleted_Count__/STYLE:text-align:right;' };
+my $BoldFormat = qq{ '<B>__Statistics_Date__</B>',
+ '<B>__Statistics_Created_Count__</B>/STYLE:text-align:right;',
+ '<B>__Statistics_Resolved_Count__</B>/STYLE:text-align:right;',
+ '<B>__Statistics_Deleted_Count__</B>/STYLE:text-align:right;' };
+my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format);
+my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat);
+Statistics::DebugLog("CallsQueueDay/index.html Format array=" . join(',', @Format) . "\n");
+
+if (!defined $Queue) {
+ my $QueueObj = new RT::Queue($session{'CurrentUser'});
+ $QueueObj->Load($Statistics::PerDayQueue);
+ $Queue = $QueueObj->Id();
+}
+
+if ($sDay > $Statistics::monthsMaxDay{$sMonth}) {
+ $sDay = $Statistics::monthsMaxDay{$sMonth};
+}
+
+if ($eDay > $Statistics::monthsMaxDay{$eMonth}) {
+ $eDay = $Statistics::monthsMaxDay{$eMonth};
+}
+
+if ($sYear){
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900);
+}
+if ($eYear){
+Statistics::DebugLog("eMonth = " . $eMonth . "\n");
+ $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900);
+} else {
+ # This case happens when the page is first loaded
+ my @local = localtime(time);
+ ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]);
+ $eYear += 1900;
+ $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]);
+Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n");
+}
+
+if (($eEpoch < $sEpoch) || ($sEpoch == 0)) {
+ # We have an end, but not a start, or, overlapping.
+
+ # if $currentMonth is set, just set the day to 1
+ if($currentMonth) {
+ # set start vars from end, but with day set to 1
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch);
+ $sDay=1;
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear);
+ } else {
+ # If the user has specified how many days back to go, use that,
+ # If not, set start to configured default period before end
+ if(defined $days) {
+ $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay);
+ } else {
+ $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay);
+ }
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch);
+ }
+ $sYear += 1900;
+}
+
+# Compute days to chart.
+# The +1 is because we need to generate one more date. If the user
+# selected a 10 day range, we need to generate 11 days.
+$diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1;
+Statistics::DebugLog("Setting diff=$diff\n");
+
+Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n");
+Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n");
+
+# Set up the string for the current query for bookmarkable link
+$QueryString = "sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends&Queue=$Queue";
+
+# Set up the end date to be midnight(morning) of the date after the one the user wanted.
+my $endRange = $eEpoch + $Statistics::secsPerDay;
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($Queue);
+$n = 0;
+until ($#dates == $diff) {
+ my $date = new RT::Date($session{CurrentUser});
+ $date->Set(Value=>$endRange - $n, Format => 'unix');
+ # Note: we used to adjust the time to local midnight, but
+ # none of the other date entry fields in RT seem to adjust, so we've stopped.
+ #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n");
+ $n+= $Statistics::secsPerDay;
+ # If we aren't showing weekends and this is one, decrement the number
+ # of days to show and skip to the next date.
+ if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;}
+ unshift @dates, $date;
+Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n");
+ unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date);
+}
+
+# We put an extra day into the lists to cover up till midnight of the next day,
+# But we don't want that to appear in the labels, so pop it off.
+pop( @{ $data[0] } );
+
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/DayOfWeek/Elements/Chart b/rt/share/html/RTx/Statistics/DayOfWeek/Elements/Chart
new file mode 100755
index 000000000..7bdf56b80
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/DayOfWeek/Elements/Chart
@@ -0,0 +1,26 @@
+% $r->content_type("image/$format");
+% $m->print($graph->plot(\@data)->$format());
+% $m->abort();
+<&|/l, $#data+1&>[_1] Elements</&>:<p>
+% for (0..$#data) {
+<% $data[$_] %><p>
+% }
+<%INIT>
+use GD::Graph::bars;
+
+my @data;
+my $graph = GD::Graph::bars->new($Statistics::GraphWidth||500,$Statistics::GraphHeight||400);
+$graph->set(export_format => "png",
+ x_label => 'Day of Week',
+ y_label => 'Ticket actions per Day by type');
+$graph->set_legend(split /,/ , $ARGS{set_legend});
+push @data, [split /,/ , $ARGS{x_labels}];
+push @data, [split /,/ , $ARGS{data1}];
+push @data, [split /,/ , $ARGS{data2}];
+push @data, [split /,/ , $ARGS{data3}];
+
+my $format = $graph->export_format;
+$r->content_type("image/$format");
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/DayOfWeek/index.html b/rt/share/html/RTx/Statistics/DayOfWeek/index.html
new file mode 100755
index 000000000..6353abbdb
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/DayOfWeek/index.html
@@ -0,0 +1,150 @@
+<& /Elements/Header, Title =>loc('Tickets by Day Of Week in Queue:' . $QueueObj->Name()) &>
+<& /RTx/Statistics/Elements/Tabs, Title =>loc('Trends in ticket status by Day Of Week in Queue:' . $QueueObj->Name()) &>
+
+<h3>Description</h3>
+<p>The purpose of this page is to show historical trends for each day of the week.
+It displays details of number of tickets created in your
+selected queue for each day. It also hows how many of those created tickets were Resolved or Deleted</p>
+
+<form method="POST" action="index.html">
+
+
+%my $title = "Ticket counts by day of week in " . $QueueObj->Name();
+<&|/Elements/TitleBox,
+ title => $title,
+ title_href => "/RTx/Statistics/DayOfWeek/index.html?$QueryString" &>
+<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%>
+% if ($ShowHeader) {
+<& /RTx/Statistics/Elements/CollectionAsTable/Header,
+ Format => \@Format,
+ FormatString => $Format,
+ AllowSorting => $AllowSorting,
+ Order => $Order,
+ Query => undef,
+ Rows => $Rows,
+ Page => $Page,
+ OrderBy => $OrderBy ,
+ BaseURL => $BaseURL,
+ maxitems => $maxitems &>
+% }
+% my $line = 1;
+% for my $d (0..$#days) {
+% my $x = 1;
+% $values{Statistics_Date} = $days[$d];
+%# NOTE Show all status values???
+% $values{Statistics_Created_Count} = $counts[$d]{new};
+% $values{Statistics_Resolved_Count} = $counts[$d]{resolved};
+% $values{Statistics_Deleted_Count} = $counts[$d]{deleted};
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &>
+% $line++;
+% }
+% $values {Statistics_Date} = "Totals";
+% $values {Statistics_Created_Count} = $Totals{new};
+% $values {Statistics_Resolved_Count} = $Totals{resolved};
+% $values {Statistics_Deleted_Count} = $Totals{deleted};
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldFormat, i => $line, record => $record, maxitems => $maxitems &>
+</table>
+</&>
+
+<%perl>
+my $url = 'Elements/Chart?&x_labels=';
+for (0..$#days) {
+ $url .= $days[$_] . "," ;
+}
+chop $url;
+$url .= "&";
+
+my @things = qw(new resolved deleted);
+for my $th (0..$#things) {
+ $url .= "data".(1+$th)."=".(join ",", map { $counts[$_]{$things[$th]} } (0..6))."&";
+}
+chop $url;
+$url .= '&set_legend=Created,Resolved,Deleted';
+</%perl>
+
+<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &>
+
+% Statistics::DebugLog("queue name=" . $QueueObj->Id() . "\n");
+
+<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox,
+ Title => "Change Queue",
+ ShowSingleQueue => 1, Queue => $QueueObj->Id()
+ &>
+
+</form>
+
+% Statistics::DebugInit( $m );
+
+<%ARGS>
+$Queue => $Statistics::DayOfWeekQueue
+
+$AllowSorting => undef
+$Order => undef
+$OrderBy => undef
+$ShowNavigation => 1
+$ShowHeader => 1
+$Rows => 50
+$Page => 1
+$BaseURL => undef
+</%ARGS>
+
+<%INIT>
+use GD::Graph;
+use RTx::Statistics;
+my @days = qw(Sun Mon Tue Wed Thu Fri Sat);
+my $n = 0;
+my @data = ([]);
+my @msgs;
+my @counts;
+my %Totals = (
+ resolved => 0,
+ deleted => 0,
+ new => 0
+);
+my $QueryString = "Queue=$Queue";
+my $maxitems = 4;
+my %record;
+my %values;
+my $record = \%record;
+
+$record{values} = \%values;
+
+my $Format = qq{ Statistics_Date,
+ '__Statistics_Created_Count__/STYLE:text-align:right;',
+ '__Statistics_Resolved_Count__/STYLE:text-align:right;',
+ '__Statistics_Deleted_Count__/STYLE:text-align:right;' };
+my $BoldFormat = qq{ '<B>__Statistics_Date__</B>',
+ '<B>__Statistics_Created_Count__</B>/STYLE:text-align:right;',
+ '<B>__Statistics_Resolved_Count__</B>/STYLE:text-align:right;',
+ '<B>__Statistics_Deleted_Count__</B>/STYLE:text-align:right;' };
+my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format);
+my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat);
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($Queue);
+$RT::Logger->warning("Loaded queue $Queue, name=". $QueueObj->Name());
+
+my $tix = new RT::Tickets($session{'CurrentUser'});
+$tix->LimitQueue (VALUE => $Queue);
+$tix->UnLimit;
+if ($tix->Count) {
+ # Initialize the counters to zero, so that all the cells show up
+ foreach my $day (0..@days) {
+ $counts[$day]{resolved} = 0;
+ $counts[$day]{deleted} = 0;
+ $counts[$day]{new} = 0;
+ }
+ while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK
+ if($t->Status eq "resolved") {
+ $counts[(localtime($t->ResolvedObj->Unix))[6]]{resolved}++;
+ $Totals{resolved}++;
+ }
+ if($t->Status eq "deleted") {
+ $counts[(localtime($t->LastUpdatedObj->Unix))[6]]{deleted}++;
+ $Totals{deleted}++;
+ }
+ $counts[(localtime($t->CreatedObj->Unix))[6]]{new}++;
+ $Totals{new}++;
+ }
+}
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/DurationAsString b/rt/share/html/RTx/Statistics/DurationAsString
new file mode 100755
index 000000000..c0b4d9af4
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/DurationAsString
@@ -0,0 +1,18 @@
+<%$days|'00'%> days <%$hours|'00'%>:<%$minutes|'00'%>
+<%INIT>
+
+my $MINUTE = 60;
+my $HOUR = $MINUTE*60;
+my $DAY = $HOUR * 24;
+my $WEEK = $DAY * 7;
+my $days = int($Duration / $DAY);
+$Duration = $Duration % $DAY;
+my $hours = int($Duration / $HOUR);
+$hours = sprintf("%02d", $hours);
+$Duration = $Duration % $HOUR;
+my $minutes = int($Duration/$MINUTE);
+$minutes = sprintf("%02d", $minutes);
+</%INIT>
+<%ARGS>
+$Duration => undef
+</%ARGS>
diff --git a/rt/html/Elements/CollectionAsTable/Header b/rt/share/html/RTx/Statistics/Elements/CollectionAsTable/Header
index cdcd2fde0..cecb02eee 100644
--- a/rt/html/Elements/CollectionAsTable/Header
+++ b/rt/share/html/RTx/Statistics/Elements/CollectionAsTable/Header
@@ -2,7 +2,7 @@
%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
%# <jesse@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
@@ -22,9 +22,7 @@
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
@@ -56,7 +54,7 @@ $Rows => undef
$Page => undef
$maxitems => undef
</%ARGS>
-<tr class="collection-as-table">
+<TR class="collection-as-table">
<%perl>
my %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format => $FormatString );
@@ -64,22 +62,25 @@ my %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format
my $item = 0;
foreach my $col (@Format) {
$item++;
- if ( $col->{title} && ($col->{title} eq 'NEWLINE') ) {
+ if ( $col->{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">});
+ $m->out(qq{</TR>\n<TR class="collection-as-table">});
}
else {
- $m->out('<th class="collection-as-table">');
- my $title = $col->{title} || '';
+ $m->out('<TH class="collection-as-table" ');
+ $m->out( 'align="' . $col->{align} . '"' ) if ( $col->{align} );
+ $m->out( 'style="' . $col->{style} . '"' ) if ( $col->{style} );
+ $m->out('>');
+ my $title = $col->{title};
$title =~ s/^__(.*)__$/$1/o;
$title = (
$m->comp(
- '/Elements/RT__Ticket/ColumnMap',
+ '/RTx/Statistics/Elements/StatColumnMap',
Name => $title,
Attr => 'title'
)
@@ -89,7 +90,7 @@ foreach my $col (@Format) {
$AllowSorting
&& $col->{'attribute'}
&& $m->comp(
- '/Elements/RT__Ticket/ColumnMap',
+ '/RTx/Statistics/Elements/StatColumnMap',
Name => $col->{'attribute'},
Attr => 'attribute'
)
@@ -103,7 +104,7 @@ foreach my $col (@Format) {
%generic_query_args,
OrderBy => (
$m->comp(
- '/Elements/RT__Ticket/ColumnMap',
+ '/RTx/Statistics/Elements/StatColumnMap',
Name => $col->{'attribute'},
Attr => 'attribute'
)
@@ -118,8 +119,8 @@ foreach my $col (@Format) {
else {
$m->out( loc($title) );
}
- $m->out('</th>');
+ $m->out('</TH>');
}
}
</%perl>
-</tr>
+</TR>
diff --git a/rt/html/Elements/CollectionAsTable/ParseFormat b/rt/share/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat
index a85da31d4..a482f817e 100644
--- a/rt/html/Elements/CollectionAsTable/ParseFormat
+++ b/rt/share/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat
@@ -2,7 +2,7 @@
%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
%# <jesse@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
@@ -22,9 +22,7 @@
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
@@ -50,7 +48,7 @@ $Format
</%ARGS>
<%init>
-use Regexp::Common qw/delimited/;
+use Regexp::Common;
my @Columns;
while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
@@ -61,10 +59,15 @@ while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
substr($col,-1,1) = "";
}
- my $colref = {
- title => '',
- };
+ my $colref;
+ # kfh at mqsoftware.com added this to be able
+ # to create columns where the actual heading and value
+ # aren't know ahead of time. For instance queue names.
+ # it will work with subcols, but all subcols will have the same KEY
+ if ( $col =~ s!/KEY:([^/]+)!!io ) {
+ $colref->{'keyname'} = $1;
+ }
if ( $col =~ s!/STYLE:([^/]+)!!io ) {
$colref->{'style'} = $1;
}
@@ -92,7 +95,7 @@ while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
$colref->{'attribute'} = $col;
}
- if ( !$colref->{'title'} && grep { /^__(.+?)__$/io }
+ if ( !$colref->{'title'} && grep { /^__(.*?)__$/io }
@{ $colref->{'output'} } )
{
$colref->{'title'} = $1;
diff --git a/rt/html/Elements/CollectionAsTable/Row b/rt/share/html/RTx/Statistics/Elements/CollectionAsTable/Row
index bb9032149..bcfabe5c3 100644
--- a/rt/html/Elements/CollectionAsTable/Row
+++ b/rt/share/html/RTx/Statistics/Elements/CollectionAsTable/Row
@@ -2,7 +2,7 @@
%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
%# <jesse@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
@@ -22,9 +22,7 @@
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
@@ -55,26 +53,23 @@ $Warning => undef
</%ARGS>
<%PERL>
-use HTML::Entities;
-$m->out('<tr class="' . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) . '" >' );
+$m->out('<TR class="' . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) . '" >' );
my $item;
foreach my $column (@Format) {
- if ( defined $column->{title} && $column->{title} eq 'NEWLINE' ) {
+ if ( $column->{title} eq 'NEWLINE' ) {
while ( $item < $maxitems ) {
$m->out(qq{<td class="collection-as-table">&nbsp;</td>\n});
$item++;
}
$item = 0;
- $m->out('</tr>');
- $m->out('<tr class="'
+ $m->out('</TR>');
+ $m->out('<TR class="'
. ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' )
. '" >' );
next;
}
$item++;
- my $class = $column->{class}
- ? encode_entities($column->{class}, q{'"&<>}) : 'collection-as-table';
- $m->out(qq{<td class="$class" });
+ $m->out('<td class="collection-as-table" ');
$m->out( 'align="' . $column->{align} . '"' ) if ( $column->{align} );
$m->out( 'style="' . $column->{style} . '"' ) if ( $column->{style} );
$m->out('>');
@@ -82,7 +77,7 @@ foreach my $column (@Format) {
if ( $subcol =~ /^__(.*?)__$/o ) {
my $col = $1;
my $value = $m->comp(
- '/Elements/RT__Ticket/ColumnMap',
+ '/RTx/Statistics/Elements/StatColumnMap',
Name => $col,
Attr => 'value'
);
@@ -96,7 +91,7 @@ foreach my $column (@Format) {
@out =
map {
ref($_) ? $$_ : $m->interp->apply_escapes( $_ => 'h' )
- } &{$value}( $record, $i )
+ } &{$value}( $record, $i, $column->{keyname} );
;
}
else {
@@ -104,7 +99,7 @@ foreach my $column (@Format) {
# Simple value; just escape it.
@out = $m->interp->apply_escapes( $value => 'h' );
}
- s/\n/<br \/>/gs for @out;
+ s/\n/<br>/gs for @out;
$m->out( @out );
}
else {
@@ -113,5 +108,5 @@ foreach my $column (@Format) {
}
$m->out('</td>');
}
-$m->out('</tr>');
+$m->out('</TR>');
</%PERL>
diff --git a/rt/share/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox b/rt/share/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox
new file mode 100644
index 000000000..e2b5c1430
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox
@@ -0,0 +1,89 @@
+<TD VALIGN="top">
+
+<&/Widgets/TitleBoxStart, title => $Title, &>
+
+ <table border="0" cellpadding="1" cellspacing="0">
+% if (defined $ShowStatus) {
+ <tr>
+ <td class="collection-as-table" style="text-align:left;">Show Status:</td>
+ <td COLSPAN=3 class="collection-as-table" style="text-align:left;">
+ <& /Elements/SelectStatus, Name=>"status", Default => $Status, DefaultValue => undef &>
+ </td>
+ </tr>
+% }
+% if (defined $ShowSingleQueue) {
+ <tr>
+ <td class="collection-as-table" style="text-align:left;">Show Queue:</td>
+ <td COLSPAN=3 class="collection-as-table" style="text-align:left;">
+ <& /Elements/SelectQueue, Name=>"Queue", Default=>$Queue ,ShowNullOption=>0,
+ CheckQueueRight=>'SeeQueue' &>
+ </td>
+ </tr>
+% }
+% if (defined $ShowDates) {
+ <tr>
+ <& /RTx/Statistics/Elements/DateSelectRow, Label => "Start Date:",
+ refMonth => $sMonth, nameMonth => "sMonth",
+ refDay => $sDay, nameDay => "sDay",
+ refYear => $sYear, nameYear => "sYear" &>
+ </tr>
+ <tr>
+ <& /RTx/Statistics/Elements/DateSelectRow, Label => "End Date:",
+ refMonth => $eMonth, nameMonth => "eMonth",
+ refDay => $eDay, nameDay => "eDay",
+ refYear => $eYear, nameYear => "eYear" &>
+ </tr>
+ <tr>
+ <td class="collection-as-table" style="text-align:left;">Show Weekends:</td>
+ <td class="collection-as-table" style="text-align:left;">
+ <select name=weekends>
+ <option value=0 <% (!$weekends) && 'selected' %> >No</option>
+ <option value=1 <% $weekends && 'selected' %> >Yes</option>
+ </select>
+ </td>
+ </tr>
+% }
+% if (defined $ShowMultiQueues) {
+ <tr>
+% if (defined $ShowDates) {
+%# If we're showing the dates, we put these side by side.
+ <td COLSPAN=2 class="collection-as-table" style="text-align:left;">Select All Queues: <input type=checkbox name="AddAllCheck"></td>
+ <td COLSPAN=3 class="collection-as-table" >
+ <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref,
+ ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &>
+ </td>
+% } else {
+ <td COLSPAN=3 class="collection-as-table" style="text-align:left;">
+ <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref,
+ ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &>
+ </td>
+ </tr>
+ <tr>
+ <td class="collection-as-table" style="text-align:left;">Select All Queues: <input type=checkbox name="AddAllCheck"></td>
+% }
+ </tr>
+% }
+ <& /RTx/Statistics/Elements/ControlsAsTable/UpdatePage &>
+ </table>
+
+<&/Widgets/TitleBoxEnd&>
+
+</TD></TR></TABLE>
+<%args>
+$Title => undef
+$ShowMultiQueues => undef
+$queues_ref => undef
+$ShowDates => undef
+$sMonth => undef
+$sDay => undef
+$sYear => undef
+$eMonth => undef
+$eDay => undef
+$eYear => undef
+$weekends => undef
+$ShowSingleQueue => undef
+$Queue => undef
+$ShowStatus => undef
+$Status => undef
+</%args>
+
diff --git a/rt/share/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage b/rt/share/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage
new file mode 100644
index 000000000..dc173d444
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage
@@ -0,0 +1,5 @@
+<tr>
+ <td colspan="4" style="text-align:center;padding-top:3px;">
+ <INPUT TYPE="submit" VALUE="<&|/l&>Update Page</&>">
+ </td>
+</tr>
diff --git a/rt/share/html/RTx/Statistics/Elements/DateSelectRow b/rt/share/html/RTx/Statistics/Elements/DateSelectRow
new file mode 100644
index 000000000..325e168c9
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/DateSelectRow
@@ -0,0 +1,55 @@
+ <td class="collection-as-table" style="text-align:left;"><% $Label %></td>
+ <td class="collection-as-table" style="text-align:left;">
+ <select name=<% $nameMonth %> >
+% for ($n=0;$n<=$#Statistics::months;$n++){
+% if ($$refMonth eq $n){
+% $selected ="selected";
+% }else {
+% $selected ="";
+% }
+ <option value=<% $n %> <% $selected %> ><% $Statistics::months[$n] %></option>
+%}
+ </select>
+ </td>
+ <td class="collection-as-table" style="text-align:left;">
+ <select name=<% $nameDay %> >
+% for ($n=1;$n<=31;$n++){
+% if ($$refDay == $n ){
+% $selected ="selected";
+% }else {
+% $selected ="";
+% }
+ <option value=<% $n %> <% $selected %> ><% $n %></option>
+% }
+ </select>
+ </td>
+ <td class="collection-as-table" style="text-align:left;">
+ <select name=<% $nameYear %> >
+%
+% for ($n=0;$n <= scalar @Statistics::years-1;$n++){
+% if ($Statistics::years[$n] == $$refYear){
+% $selected ="selected";
+% }else{
+% $selected ="";
+% }
+ <option value=<% $Statistics::years[$n] %> <% $selected %> ><% $Statistics::years[$n] %></option>
+% }
+ </select>
+ </td>
+
+
+<%args>
+$Label => undef
+$refMonth => undef
+$nameMonth => undef
+$refDay => undef
+$nameDay => undef
+$refYear => undef
+$nameYear => undef
+</%args>
+<%init>
+use RTx::Statistics;
+my $n;
+my $selected;
+
+</%init>
diff --git a/rt/share/html/RTx/Statistics/Elements/DurationAsString b/rt/share/html/RTx/Statistics/Elements/DurationAsString
new file mode 100755
index 000000000..c0b4d9af4
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/DurationAsString
@@ -0,0 +1,18 @@
+<%$days|'00'%> days <%$hours|'00'%>:<%$minutes|'00'%>
+<%INIT>
+
+my $MINUTE = 60;
+my $HOUR = $MINUTE*60;
+my $DAY = $HOUR * 24;
+my $WEEK = $DAY * 7;
+my $days = int($Duration / $DAY);
+$Duration = $Duration % $DAY;
+my $hours = int($Duration / $HOUR);
+$hours = sprintf("%02d", $hours);
+$Duration = $Duration % $HOUR;
+my $minutes = int($Duration/$MINUTE);
+$minutes = sprintf("%02d", $minutes);
+</%INIT>
+<%ARGS>
+$Duration => undef
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/Elements/GraphBox b/rt/share/html/RTx/Statistics/Elements/GraphBox
new file mode 100644
index 000000000..14c502a9d
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/GraphBox
@@ -0,0 +1,13 @@
+<TABLE><TR><TD VALIGN="top">
+
+<&/Widgets/TitleBoxStart,
+ title => 'Download Chart as Image',
+ title_href => $GraphURL
+&>
+<img src="<% $GraphURL %>" ALT="Result Graph" >
+<&/Widgets/TitleBoxEnd&>
+
+</TD>
+<%args>
+$GraphURL => undef
+</%args>
diff --git a/rt/html/Ticket/Elements/ShowMemberOf b/rt/share/html/RTx/Statistics/Elements/SelectMultiQueue
index e443132bc..637f6dc80 100644..100755
--- a/rt/html/Ticket/Elements/ShowMemberOf
+++ b/rt/share/html/RTx/Statistics/Elements/SelectMultiQueue
@@ -43,15 +43,39 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<UL>
-% my $memberof = $Ticket->MemberOf;
-% while (my $member_of = $memberof->Next) {
-<LI><a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member_of->Id%>"><%$member_of->Id%></a>: <%$member_of->Subject%> [<%$member_of->Status%>]
+<SELECT NAME ="<%$Name%>" multiple size="<% $Size %>">
+% if ($ShowNullOption) {
+<OPTION VALUE="">-</OPTION>
% }
-</UL>
+% while (my $queue=$q->Next) {
+% if ($ShowAllQueues || $queue->CurrentUserHasRight($CheckQueueRight)) {
+% my $targ="," . $queue->Name . ",";
+<OPTION VALUE="<%($NamedValues ? $queue->Name : $queue->Id) %>" <%( ($sel_list =~ m/$targ/) ? '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
+$Selected => undef # ref to array containing selected queue names
+$Lite => 0
+$Size => 5
+</%ARGS>
<%INIT>
+
+# put list of queue names into string, starting and ending with commas
+my $sel_list = "," . join(",", @$Selected) . ",";
+
+my $q=new RT::Queues($session{'CurrentUser'});
+$q->UnLimit;
+
</%INIT>
-<%ARGS>
-$Ticket => undef
-</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/Elements/StatColumnMap b/rt/share/html/RTx/Statistics/Elements/StatColumnMap
new file mode 100644
index 000000000..aef9e2f3e
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/StatColumnMap
@@ -0,0 +1,173 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You 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 }}}
+<%ARGS>
+$Name => undef
+$Attr => undef
+</%ARGS>
+
+
+<%ONCE>
+our ( $STAT_COLUMN_MAP );
+
+sub StatColumnMap {
+ my $name = shift;
+ my $attr = shift;
+
+ # First deal with the simple things from the map
+ if ( $STAT_COLUMN_MAP->{$name} ) {
+ return ( $STAT_COLUMN_MAP->{$name}->{$attr} );
+ }
+
+ # now, let's deal with harder things, like Custom Fields
+
+ elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) {
+ my $field = $1;
+
+ if ( $attr eq 'attribute' ) {
+ return (undef);
+ }
+ elsif ( $attr eq 'title' ) {
+ return ( $field );
+ }
+ elsif ( $attr eq 'value' ) {
+ # Display custom field contents, separated by newlines.
+ # For Image custom fields we also show a thumbnail here.
+ return sub {
+ my $values = $_[0]->CustomFieldValues($field);
+ return map {
+ (
+ ($_->CustomFieldObj->Type eq 'Image')
+ ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ ))
+ : $_->Content
+ ),
+ \'<br>',
+ } @{ $values->ItemsArrayRef }
+ };
+ }
+ }
+}
+
+sub LinkCallback {
+ my $method = shift;
+
+ my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode};
+ my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type};
+ 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($mode,$type)->ItemsArrayRef }
+ }
+}
+
+$STAT_COLUMN_MAP = {
+ LastUpdated => {
+ attribute => 'LastUpdated',
+ title => 'Last Updated',
+ value => sub { return $_[0]->LastUpdatedObj->AsString }
+ },
+
+ Statistics_Date => {
+ title => 'Date',
+ value => sub { return $_[0]{values}{Statistics_Date} }
+ },
+
+ Statistics_Created_Count => {
+ title => 'Created',
+ value => sub { return $_[0]{values}{Statistics_Created_Count} }
+ },
+
+ Statistics_Resolved_Count => {
+ title => 'Resolved',
+ value => sub { return $_[0]{values}{Statistics_Resolved_Count} }
+ },
+
+ Statistics_Deleted_Count => {
+ title => 'Deleted',
+ value => sub { return $_[0]{values}{Statistics_Deleted_Count} }
+ },
+
+ Statistics_Totals => {
+ title => 'Totals',
+ value => sub { return $_[0]{values}{Statistics_Totals} }
+ },
+
+ Statistics_Status => {
+ title => 'Status',
+ value => sub { return $_[0]{values}{Statistics_Status} }
+ },
+
+ Statistics_Dynamic => {
+ # Depends on having a KEY as second param
+ value => sub {
+ my $record = shift;
+ my $line = shift;
+ my $key = shift;
+ return $$record{values}{$key}
+ }
+ },
+
+ # Everything from LINKTYPEMAP
+ (map {
+ $_ => { value => LinkCallback( $_ ) }
+ } keys %RT::Ticket::LINKTYPEMAP),
+
+ '_CLASS' => {
+ value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' }
+ },
+
+};
+</%ONCE>
+<%init>
+$m->comp( '/Elements/Callback', STAT_COLUMN_MAP => $STAT_COLUMN_MAP, _CallbackName => 'StatColumnMap');
+return StatColumnMap($Name, $Attr);
+</%init>
diff --git a/rt/share/html/RTx/Statistics/Elements/Tabs b/rt/share/html/RTx/Statistics/Elements/Tabs
new file mode 100755
index 000000000..4fde113ea
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Elements/Tabs
@@ -0,0 +1,72 @@
+%# BEGIN LICENSE BLOCK
+%#
+%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+%#
+%# (Except where explictly superceded by other copyright notices)
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# Unless otherwise specified, all modifications, corrections or
+%# extensions to this work which alter its source code become the
+%# property of Best Practical Solutions, LLC when submitted for
+%# inclusion in the work.
+%#
+%#
+%# END LICENSE BLOCK
+<& /Elements/Tabs,
+ tabs => $tabs,
+ current_toptab => 'RTx/Statistics/index.html',
+ current_tab => $current_tab,
+ Title => $Title &>
+
+<%INIT>
+ my $tabs = { A => { title => loc('Tickets per Day'),
+ path => 'RTx/Statistics/CallsQueueDay/index.html',
+ },
+ B => { title => loc('Tickets by status'),
+ path => 'RTx/Statistics/OpenStalled/index.html',
+ },
+ C => { title => loc('Multiple Queues'),
+ path => 'RTx/Statistics/CallsMultiQueue/index.html',
+ },
+ D => { title => loc('Ticket Trends by Day'),
+ path => 'RTx/Statistics/DayOfWeek/index.html',
+ },
+ E => { 'title' => loc('Time to Resolve'),
+ path => 'RTx/Statistics/Resolution/index.html',
+ },
+ F => { 'title' => loc('Resolve Time Graph'),
+ path => 'RTx/Statistics/TimeToResolve/index.html',
+ },
+ Z => { 'title' => loc('FAQ'),
+ path => 'RTx/Statistics/FAQ/index.html',
+ },
+ };
+
+ # Now let callbacks add their extra tabs
+ $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
+
+ 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/RTx/Statistics/FAQ/index.html b/rt/share/html/RTx/Statistics/FAQ/index.html
new file mode 100644
index 000000000..e7839eaad
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/FAQ/index.html
@@ -0,0 +1,23 @@
+<& /Elements/Header, Title => 'FAQ and known issues' &>
+<& /RTx/Statistics/Elements/Tabs, Title => loc("FAQ and Known Issues") &>
+<hr noshade size="1">
+<p>This page will be used to contain known issues and FAQ`s for the Statistics
+package<br />
+This will also be used to clarify limitations of the package as they stand.</p>
+
+<p><strong>What Version of the Statistics package is this?</strong></p>
+<p>0.1.8</p>
+
+<p><strong>What time zone are the charts set to?</strong></p>
+<p>Because of the new programming method of the date functions, the charts are currently built in GMT(UTC). This may once again be
+customisable in a future release.</p>
+
+<p><strong>What is the default date period and queue?</strong></p>
+<p>The default date period is the previous 10 days, except where the chart is over a fixed 7 day period. The default queue is either
+General, or another queue set in your local configuration.</p>
+
+<p><strong>What are the limitations of the date function?</strong></p>
+<p>It has few, but it will not let you chose less than one day. you cannot select an end date before the start date and it is not
+recommended to select a date in the future or an illegal date, such at 30th February. Code has been put in place to trap these, but it may
+not be fool proof.</p>
+<hr size="1" noshade>
diff --git a/rt/share/html/RTx/Statistics/OpenStalled/Elements/Chart b/rt/share/html/RTx/Statistics/OpenStalled/Elements/Chart
new file mode 100755
index 000000000..e9057ce73
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/OpenStalled/Elements/Chart
@@ -0,0 +1,27 @@
+<%perl>
+$r->content_type("image/$format");
+print $graph->plot(\@data)->$format();
+$m->abort();
+print $#data+1 . " Elements:<p>";
+for (0..$#data) {
+print $data[$_];
+print "<p>";
+}
+</%perl>
+<%INIT>
+use GD::Graph::bars;
+
+my @data;
+my $graph = GD::Graph::bars->new($Statistics::GraphWidth||500,$Statistics::GraphHeight||400);
+$graph->set(export_format => "png",
+ x_label => 'Queue name',
+ y_label => 'Total per queue by status');
+my $format = $graph->export_format;
+$graph->set_legend(split /,/ , $ARGS{set_legend});
+push @data, [split /,/ , $ARGS{x_labels}];
+push @data, [split /,/ , $ARGS{data1}];
+push @data, [split /,/ , $ARGS{data2}];
+push @data, [split /,/ , $ARGS{data3}];
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/html/Ticket/Elements/ShowReferences b/rt/share/html/RTx/Statistics/OpenStalled/Results.tsv
index bb323f66c..2ec1e0c4a 100644
--- a/rt/html/Ticket/Elements/ShowReferences
+++ b/rt/share/html/RTx/Statistics/OpenStalled/Results.tsv
@@ -43,30 +43,72 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<UL>
-% while (my $Link = $Ticket->RefersTo->Next) {
-<LI>
-% if ($Link->TargetURI->IsLocal) {
-% my $member = $Link->TargetObj;
+<%ARGS>
+@queues => @Statistics::OpenStalledQueueList
+</%ARGS>
-<a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br>
-% } else {
-<A HREF="<%$Link->TargetURI->HREF%>"><%$Link->Target%></A>
-% }
-%}
+<%INIT>
+use RTx::Statistics;
+use Time::Local;
+ my $n = 0;
+ my @data;
+ my @msgs;
+ my %totals;
+ my $QueryString;
+ my $now = new RT::Date($session{CurrentUser});
+ my $tix = new RT::Tickets($session{'CurrentUser'});
+ my %queues = map {
+ $_ => 1;
+ } (@queues);
-% while (my $Link = $Ticket->ReferredToBy->Next) {
-<LI>
-% if ($Link->BaseURI->IsLocal) {
-% my $member = $Link->BaseObj;
-<a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br>
-% } else {
-<A HREF="<%$Link->BaseURI->HREF%>"><%$Link->Base%></A>
-%}
-% }
-</UL>
-<%ARGS>
-$Ticket => undef
-</%ARGS>
+ # set content type
+ $r->content_type('application/vnd.ms-excel');
+
+ $QueryString = "queues=" . join("&queues=", @queues);
+
+ my $queue = new RT::Queues($session{CurrentUser});
+ $queue->UnLimit;
+
+ my $QueueObj = new RT::Queue($session{'CurrentUser'});
+ $QueueObj->Load($queue);
+
+ # Put out some data about the generation of this file
+ $m->out("Tickets by Status by Queue for Queues:\t" . join(',', @queues) . "\tGenerated at:\t" . Statistics::FormatDate("%x %X", $now). "\n\n");
+
+ # basically the same as index.html
+
+ # Output header row
+ $m->out("Status");
+ for ( sort keys %queues) {
+ push @data, $_;
+ my $Queueobj = new RT::Queue($session{'CurrentUser'});
+ $Queueobj->Load($_);
+ next if !$Queueobj->CurrentUserHasRight('SeeQueue');
+ $m->out("\t" . $_);
+ }
+ $m->out("\tTotals\n");
+
+ foreach my $s (qw(new open stalled)) {
+ $m->out("$s");
+ my $total=0;
+ foreach my $q (sort keys %queues) {
+ $tix = new RT::Tickets($session{'CurrentUser'});
+ $tix->LimitQueue(VALUE => "$q");
+ $tix->LimitStatus(VALUE => "$s");
+ $totals{$q} += $tix->Count; # Add up columns for each queue
+ $m->out("\t" . $tix->Count);
+ $total += $tix->Count;
+ }
+ $m->out("\t$total\n");
+ $totals{"Totals"} += $total;
+ }
+ $m->out("Totals");
+ foreach my $q (sort keys %queues) {
+ $m->out("\t" . $totals{$q});
+ }
+ $m->out("\t" . $totals{"Totals"} . "\n");
+
+ $m->abort();
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/OpenStalled/index.html b/rt/share/html/RTx/Statistics/OpenStalled/index.html
new file mode 100755
index 000000000..4a1badb7e
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/OpenStalled/index.html
@@ -0,0 +1,183 @@
+<& /Elements/Header, Title => loc('New, Open and Stalled tickets by Queue') &>
+<& /RTx/Statistics/Elements/Tabs, Title => loc('New, Open and Stalled tickets by Queue') &>
+
+<h3>Description</h3>
+<p>The purpose of this page is to show a snapshot of the current status of tickets by Queue. You can multi select Queues from the dropdown
+list or simply show all available queues. This will indicate how many tickets have not yet been viewed (New), how many have been at least
+viewed once (Open) and how many have had their status changed to stalled.</p>
+
+<form method="POST" action="index.html">
+
+%my $tix = new RT::Tickets($session{'CurrentUser'});
+%if ($queue) {
+% $tix->LimitQueue (VALUE => $queue);
+%}
+
+
+%my $title = "New, Open and Stalled Tickets in " . join(', ', @queues);
+<& /Elements/TitleBoxStart, title => $title, title_href => "/RTx/Statistics/OpenStalled/index.html?$QueryString"&>
+<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH="100%">
+% if ($ShowHeader) {
+<& /RTx/Statistics/Elements/CollectionAsTable/Header,
+ Format => \@RowFormat,
+ FormatString => $RowFormat,
+ AllowSorting => $AllowSorting,
+ Order => $Order,
+ Query => undef,
+ Rows => $Rows,
+ Page => $Page,
+ OrderBy => $OrderBy ,
+ BaseURL => $BaseURL,
+ maxitems => $maxitems &>
+% }
+
+% for ( sort keys %queues_to_show) {
+% push @data, $_;
+% }
+% my @legend;
+% my $total = 0;
+% my $line = 0;
+%# NOTE need to handle all status values (see share/html/Elements/SelectStatus).
+% foreach my $s (qw(new open stalled)) {
+% $line++;
+% push @legend, $s;
+% $total=0;
+% foreach my $q (sort keys %queues_to_show) {
+% $tix = new RT::Tickets($session{'CurrentUser'});
+% $tix->LimitQueue(VALUE => "$q");
+% $tix->LimitStatus(VALUE => "$s");
+% push @data, $tix->Count;
+% $totals{$q} += $tix->Count; # Add up columns for each queue
+% $total += $tix->Count;
+% $values{$q} = $tix->Count;
+% }
+% $totals{"Totals"} += $total;
+% $values{Statistics_Status} = $s;
+% $values{Statistics_Totals} = $total;
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@RowFormat, i => $line, record => $record, maxitems => $maxitems &>
+% }
+% $values{Statistics_Status} = "Totals";
+% foreach my $q (sort keys %queues_to_show) {
+% $values{$q} = $totals{$q};
+% }
+% $values{Statistics_Totals} = $totals{"Totals"};
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldRowFormat, i => $line+1, record => $record, maxitems => $maxitems &>
+</table>
+<& /Elements/TitleBoxEnd&>
+
+% use Data::Dumper;
+% Statistics::DebugLog("Dump of data array is " . Dumper(@data) . "\n");
+% my $url = 'Elements/Chart?x_labels=';
+% for (1..(scalar keys %queues_to_show)) {
+% $url .= $m->interp->apply_escapes((shift @data),'u') . ',';
+% }
+% chop $url;
+% $url .= '&data1=' ;
+% for (1..(scalar keys %queues_to_show)) {
+% $url .= $m->interp->apply_escapes((shift @data),'u') . ',';
+% }
+% chop $url;
+% $url .= '&data2=' ;
+% for (1..(scalar keys %queues_to_show)) {
+% $url .= $m->interp->apply_escapes((shift @data),'u') . ',';
+% }
+% chop $url;
+% $url .= '&data3=' ;
+% for (1..(scalar keys %queues_to_show)) {
+% $url .= $m->interp->apply_escapes((shift @data),'u') . ',';
+% }
+% $url .= '&set_legend='.(join ",", @legend);
+
+
+<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &>
+
+<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, Title => "Select Queues", ShowMultiQueues => 1, queues_ref => \@queues &>
+
+<a href="<%$RT::WebPath%>/RTx/Statistics/OpenStalled/index.html?<% $QueryString %>"><&|/l&>Bookmarkable link</&></a>
+%# | <a href="<%$RT::WebPath%>/RTx/Statistics/OpenStalled/Results.tsv?<%$QueryString%>"><&|/l&>spreadsheet</&></a>
+<BR>
+<BR>
+
+</FORM>
+
+% Statistics::DebugInit( $m );
+
+<%ARGS>
+@queues => @Statistics::OpenStalledQueueList
+$AllowSorting => undef
+$Order => undef
+$OrderBy => undef
+$ShowNavigation => 1
+$ShowHeader => 1
+$Rows => 50
+$Page => 1
+$BaseURL => undef
+$AddAllCheck => undef
+</%ARGS>
+
+<%INIT>
+ use RTx::Statistics;
+
+ my $n = 0;
+ my @data;
+ my @msgs;
+ my %totals;
+ my $QueryString;
+ my %queues_to_show;
+ my $maxitems;
+ my $RowFormat;
+ my $BoldRowFormat;
+ my %record;
+ my %values;
+ my $record = \%record;
+
+ $record{values} = \%values;
+
+ Statistics::DebugClear();
+
+ # Handle the Add All Checkbox
+ if($AddAllCheck eq "on") {
+ $AddAllCheck = undef;
+ undef (@queues);
+ my $q=new RT::Queues($session{'CurrentUser'});
+ $q->UnLimit;
+ while (my $queue=$q->Next) {
+ next if !$queue->CurrentUserHasRight('SeeQueue');
+ push @queues, $queue->Name;
+ }
+ }
+
+ # If the user has the right to see the queue, put it into the map
+ for my $q (@queues) {
+ my $Queueobj = new RT::Queue($session{'CurrentUser'});
+ $Queueobj->Load($q);
+ next if !$Queueobj->CurrentUserHasRight('SeeQueue');
+ $queues_to_show{$q} = 1;
+ }
+
+ $maxitems = (scalar @queues) + 2;
+
+ # Build the new query string
+ $QueryString = "queues=" . join("&queues=", @queues);
+
+ # Build the format strings
+ $RowFormat = "'__Statistics_Status__'";
+ $BoldRowFormat = "'<B>__Statistics_Status__</B>'";
+ for my $q (@queues) {
+ $RowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'";
+ $BoldRowFormat .= ",'<B>__Statistics_Dynamic__</B>/KEY:$q/TITLE:$q/STYLE:text-align:right;'";
+ }
+ $RowFormat .= ",'<B>__Statistics_Totals__</B>/STYLE:text-align:right;'";
+ $BoldRowFormat .= ",'<B>__Statistics_Totals__</B>/STYLE:text-align:right;'";
+ # Parse the formats into structures.
+ my (@RowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $RowFormat);
+ my (@BoldRowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldRowFormat);
+
+
+ my $queue = new RT::Queues($session{CurrentUser});
+ $queue->UnLimit;
+
+ my $QueueObj = new RT::Queue($session{'CurrentUser'});
+ $QueueObj->Load($queue);
+
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/Resolution/Elements/Chart b/rt/share/html/RTx/Statistics/Resolution/Elements/Chart
new file mode 100755
index 000000000..01196dc9d
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Resolution/Elements/Chart
@@ -0,0 +1,29 @@
+<%perl>
+$r->content_type("image/$format");
+print $graph->plot(\@data)->$format();
+$m->abort();
+print $#data+1 . " Elements:<p>";
+for (0..$#data) {
+print $data[$_];
+print "<p>";
+}
+</%perl>
+<%INIT>
+use GD::Graph::lines;
+
+my @data;
+my $graph = GD::Graph::lines->new($Statistics::GraphWidth||500,$Statistics::GraphHeight||400);
+$graph->set(export_format => "png",
+ x_label => 'Days',
+ y_label => 'Average time in Days');
+
+push @data, [split /,/ , $ARGS{x_labels}];
+push @data, [split /,/ , $ARGS{data1}];
+push @data, [split /,/ , $ARGS{data2}];
+push @data, [split /,/ , $ARGS{data3}];
+
+my $format = $graph->export_format;
+#$r->content_type("image/$format");
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/Resolution/index.html b/rt/share/html/RTx/Statistics/Resolution/index.html
new file mode 100644
index 000000000..838d27392
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/Resolution/index.html
@@ -0,0 +1,264 @@
+<& /Elements/Header, Title => 'Time to Resolution' &>
+<& /RTx/Statistics/Elements/Tabs, Title => loc("Time To Resolve tickets by Queue for : " .$QueueObj->Name()) &>
+<h3>Description</h3>
+<p>This page shows details of resolution of tickets in the selected queue. It displays tickets created on each day in your selected date
+range. Of those tickets created on that day, how many have been resolved and the total time it has taken for all tickets created on that
+day to be resolved.</p>
+<p>At the bottom of the chart is shows total time taken to resolve all tickets
+in the selected date range and the average time per ticket to
+resolve.</p>
+
+<form method="POST" action="index.html">
+
+%my $title = "Time to resolve in " . $QueueObj->Name() . " per day from " .
+% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " .
+% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]);
+<&|/Elements/TitleBox,
+ title => $title,
+ title_href => "/RTx/Statistics/Resolution/index.html?$QueryString" &>
+<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%>
+% if ($ShowHeader) {
+<& /RTx/Statistics/Elements/CollectionAsTable/Header,
+ Format => \@Format,
+ FormatString => $Format,
+ AllowSorting => $AllowSorting,
+ Order => $Order,
+ Query => undef,
+ Rows => $Rows,
+ Page => $Page,
+ OrderBy => $OrderBy ,
+ BaseURL => $BaseURL,
+ maxitems => $maxitems &>
+% }
+% my $line = 1;
+% LINE: for my $d (0..$#dates ) {
+% if ($d == $#dates ){
+% next LINE;
+% }
+% my $x = 1;
+% $values{Statistics_Date} = Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d]);
+% my $tix = new RT::Tickets($session{'CurrentUser'});
+% $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">=");
+% if ($dates[$d+1]) {
+% $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<=");
+% }
+% if ($Queue) {
+% $tix->LimitQueue (VALUE => $Queue);
+% }
+% $values{Statistics_Created_Count} = $tix->Count;
+% $tix->LimitStatus(VALUE => "resolved");
+% $values{Statistics_Resolved_Count} = $tix->Count;
+% if ($tix->Count) {
+% my @tix = @{$tix->ItemsArrayRef};
+% my $total;
+% $total += ($_->ResolvedObj->Unix - $_->CreatedObj->Unix) for @tix;
+% $size+= ($#tix +1);
+% $grandtotal += $total;
+% $values{Duration} = Statistics::DurationAsString($total);
+% $data[$x++][$d] = int ($total );
+% } else {
+% $values{Duration} = "N/A";
+% }
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &>
+% $line++;
+%}
+% $size =1 if $size==0;
+% $values{text} = "Average time to resolve = " . Statistics::DurationAsString($grandtotal / $size);
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@OneCellFormat, i => $line, record => $record, maxitems => $maxitems &>
+% $line++;
+% $values{text} = "Total time to resolve = " . Statistics::DurationAsString( $grandtotal );
+<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@OneCellFormat, i => $line, record => $record, maxitems => $maxitems &>
+% $line++;
+</table>
+</&>
+
+<%perl>
+# Create the graph URL
+
+# change the total time to resolve to a floating point number of days
+foreach my $dat(@{$data[1]} ){
+ $dat = ($dat / $Statistics::secsPerDay);
+ $dat = sprintf("%0.4f", $dat);
+}
+
+my $url = 'Elements/Chart?x_labels=';
+for (0..$diff-1) {
+ $url .= $data[0][$_] . ",";
+}
+chop $url;
+shift @data;
+$url .= "&data1=";
+for(0..$diff-1) {
+ $data[0][$_] = 0 if !$data[0][$_];
+ $url .= $data[0][$_] . ",";
+}
+</%perl>
+
+<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &>
+
+<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox,
+ Title => "Change Queue or Dates",
+ ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear,
+ eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear,
+ weekends => $weekends,
+ ShowSingleQueue => 1, Queue => $Queue
+ &>
+
+</form>
+
+<%ARGS>
+$max => $Statistics::TimeToResolveMaxRows
+$Queue => undef
+$weekends =>$Statistics::TimeToResolveWeekends
+$sMonth=>undef
+$sDay=>undef
+$sYear=>undef
+$eMonth=>undef
+$eDay=>undef
+$eYear=>undef
+$days=>undef
+$currentMonth=>undef
+
+$AllowSorting => undef
+$Order => undef
+$OrderBy => undef
+$ShowNavigation => 1
+$ShowHeader => 1
+$Rows => 50
+$Page => 1
+$BaseURL => undef
+</%ARGS>
+
+<%INIT>
+use RTx::Statistics;
+use Time::Local;
+my $n = 0;
+my @data = ([]);
+my @dates;
+my @msgs;
+my $size;
+my $selected;
+my $grandtotal = 0;
+my $diff;
+my $sEpoch=0;
+my $eEpoch=0;
+my $QueryString;
+
+my $maxitems = 4;
+my %record;
+my %values;
+my $record = \%record;
+
+$record{values} = \%values;
+
+
+# If debugging, set things up and display all the args
+Statistics::DebugClear();
+Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n");
+for my $key (keys %ARGS) {
+ Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n");
+}
+
+my $Format = qq{ Statistics_Date,
+ '__Statistics_Created_Count__/STYLE:text-align:right;',
+ '__Statistics_Resolved_Count__/STYLE:text-align:right;',
+ '__Statistics_Dynamic__/KEY:Duration/TITLE:Time To Resolve/STYLE:text-align:right;' };
+my $BoldFormat = qq{ '<B>__Statistics_Date__</B>',
+ '<B>__Statistics_Created_Count__</B>/STYLE:text-align:right;',
+ '<B>__Statistics_Resolved_Count__</B>/STYLE:text-align:right;',
+ '<B>__Statistics_Dynamic__</B>/KEY:Duration/TITLE:Time To Resolve/STYLE:text-align:right;' };
+
+# TODO need way to make this cell do colspan
+my $OneCellFormat = qq{ '<B>__Statistics_Dynamic__</B>/KEY:text/STYLE:text-align:left;','','','' };
+
+my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format);
+my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat);
+my (@OneCellFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $OneCellFormat);
+
+Statistics::DebugLog("CallsQueueDay/index.html Format array=" . join(',', @Format) . "\n");
+
+if ($sDay > $Statistics::monthsMaxDay{$sMonth}) {
+ $sDay = $Statistics::monthsMaxDay{$sMonth};
+}
+
+if ($eDay > $Statistics::monthsMaxDay{$eMonth}) {
+ $eDay = $Statistics::monthsMaxDay{$eMonth};
+}
+
+if ($sYear){
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900);
+}
+if ($eYear){
+Statistics::DebugLog("eMonth = " . $eMonth . "\n");
+ $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900);
+} else {
+ # This case happens when the page is first loaded
+ my @local = localtime(time);
+ ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]);
+ $eYear += 1900;
+ $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]);
+Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n");
+}
+
+if (($eEpoch < $sEpoch) || ($sEpoch == 0)) {
+ # We have an end, but not a start, or, overlapping.
+
+ # if $currentMonth is set, just set the day to 1
+ if($currentMonth) {
+ # set start vars from end, but with day set to 1
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch);
+ $sDay=1;
+ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear);
+ } else {
+ # If the user has specified how many days back to go, use that,
+ # If not, set start to configured default period before end
+ if(defined $days) {
+ $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay);
+ } else {
+ $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay);
+ }
+ (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch);
+ }
+ $sYear += 1900;
+}
+
+# Compute days to chart.
+# The +1 is because we need to generate one more date. If the user
+# selected a 10 day range, we need to generate 11 days.
+$diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1;
+Statistics::DebugLog("Setting diff=$diff\n");
+
+Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n");
+Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n");
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+if (!defined $Queue) {
+ $QueueObj->Load($Statistics::TimeToResolveQueue);
+ $Queue = $QueueObj->Id();
+}
+
+# Set up the string for the current query for bookmarkable link
+$QueryString = "sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends&Queue=$Queue";
+
+# Set up the end date to be midnight(morning) of the date after the one the user wanted.
+my $endRange = $eEpoch + $Statistics::secsPerDay;
+$QueueObj->Load($Queue);
+# NOTE: list loop starts at the end of the date range, unshifting dates onto
+# the arrays, so that they end up in start to finish order.
+$eEpoch += $Statistics::secsPerDay;
+$n = 0;
+until ($#dates == $diff ) {
+ my $date = new RT::Date($session{CurrentUser});
+ $date->Set(Value=>$endRange - $n, Format => 'unix');
+ # Note: we used to adjust the time to local midnight, but
+ # none of the other date entry fields in RT seem to adjust, so we've stopped.
+ #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n");
+ $n+= $Statistics::secsPerDay;
+ # If we aren't showing weekends and this is one, decrement the number
+ # of days to show and skip to the next date.
+ if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;}
+ unshift @dates, $date;
+Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n");
+ unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date);
+}
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/TimeToResolve/Elements/Chart b/rt/share/html/RTx/Statistics/TimeToResolve/Elements/Chart
new file mode 100755
index 000000000..a069a7bfb
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/TimeToResolve/Elements/Chart
@@ -0,0 +1,23 @@
+<%perl>
+print $graph->plot(\@data)->$format();
+$m->abort();
+</%perl>
+<%INIT>
+use GD::Graph::points;
+
+my @data;
+my $graph = GD::Graph::points->new(400,300);
+$graph->set(export_format => "png",
+ marker_size => $ARGS{marker_size},
+ x_label => 'Average time to resolve (Days)',
+ y_label => 'Number of tickets resolved' );
+#$r->content_type("image/$format");
+my $format = $graph->export_format;
+push @data, [split /,/ , $ARGS{x_labels}];
+for (1..((scalar keys %ARGS)-2)) {
+ push @data, [split /,/ , $ARGS{"data".$_}];
+}
+
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/TimeToResolve/index.html b/rt/share/html/RTx/Statistics/TimeToResolve/index.html
new file mode 100755
index 000000000..ad3e23ace
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/TimeToResolve/index.html
@@ -0,0 +1,70 @@
+<& /Elements/Header, Title => 'Time to Resolve in Queue' &>
+<& /RTx/Statistics/Elements/Tabs, Title => 'Time to Resolve, by ticket in Queue:' . $QueueObj->Name() &>
+
+<h3>Description</h3>
+<p>This page displays the same information as the Time to Resolve chart, but in a scattergraph format and only for the previous 7 calendar
+days. It only displays data for tickets which have been resolved. Each division on the Days axis is one day and the granularity of this chart
+is 30 minutes.</p>
+
+<form method="POST">
+
+% my $url = 'Elements/Chart?x_labels=';
+% my $i;
+% $url .= join ",", (map {(int($_/2) == $_/2 && (++$i)%2) ? $_/2 : ""} grep {$counts[$_]} 0..($#counts-1)), "longer";
+% $url .= '&';
+% $url .= "marker_size=1&";
+% $url .= "data1=".(join ",", map { $_ || () } @counts)."&";
+% chop $url;
+<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &>
+
+<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox,
+ Title => "Change Queue",
+ ShowSingleQueue => 1, Queue=>$Queue,
+&>
+
+</form>
+
+%Statistics::DebugInit($m);
+
+<%ARGS>
+$Queue => undef
+</%ARGS>
+
+<%INIT>
+use RTx::Statistics;
+
+my @days = qw(Sun Mon Tue Wed Thu Fri Sat);
+my $n = 0;
+my @data = ([]);
+my @msgs;
+my @counts;
+
+Statistics::DebugClear();
+Statistics::DebugLog("TimeToResolve/index.html ARGS:\n");
+for my $key (keys %ARGS) {
+ Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n");
+}
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+#if (!defined $queue) {
+# $QueueObj->Load($Statistics::TimeToResolveGraphQueue);
+# $queue = $QueueObj->Id();
+#} else {
+ $QueueObj->Load($Queue);
+#}
+
+
+my $tix = new RT::Tickets($session{'CurrentUser'});
+$tix->LimitQueue (VALUE => $Queue) if $Queue;
+$tix->LimitStatus(VALUE => "resolved");
+$tix->UnLimit;
+if ($tix->Count) {
+ while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK
+ my $when = $t->ResolvedObj->Unix - $t->CreatedObj->Unix;
+ next unless $when > 0; # Doubly bloody hack
+ my $max = (60*60*24*2) / 1800;
+ my $x = int($when / 1800);
+ $counts[$x > $max ? $max : $x]++;
+ }
+}
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/UserTest/Elements/Chart b/rt/share/html/RTx/Statistics/UserTest/Elements/Chart
new file mode 100755
index 000000000..99eb2a2b1
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/UserTest/Elements/Chart
@@ -0,0 +1,28 @@
+<%perl>
+print $graph->plot(\@data)->$format();
+$m->abort();
+print $#data+1 . " Elements:<p>";
+for (0..$#data) {
+print $data[$_];
+print "<p>";
+}
+</%perl>
+<%INIT>
+use GD::Graph::lines;
+
+my @data;
+my $graph = GD::Graph::lines->new(640,480);
+$graph->set(export_format => "png",
+ x_label => 'Days',
+ y_label => 'Average time in Days');
+
+push @data, [split /,/ , $ARGS{x_labels}];
+push @data, [split /,/ , $ARGS{data1}];
+push @data, [split /,/ , $ARGS{data2}];
+push @data, [split /,/ , $ARGS{data3}];
+
+my $format = $graph->export_format;
+#$r->content_type("image/$format");
+</%INIT>
+<%ARGS>
+</%ARGS>
diff --git a/rt/share/html/RTx/Statistics/UserTest/index.html b/rt/share/html/RTx/Statistics/UserTest/index.html
new file mode 100755
index 000000000..7bc25da70
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/UserTest/index.html
@@ -0,0 +1,54 @@
+<& /Elements/Header, Title => 'Time to Resolve in Queue' &>
+<& /RTx/Statistics/Elements/Tabs, Title => 'Time to Resolve, by ticket in Queue:' . $QueueObj->Name() &>
+
+
+<form method="POST">
+
+See Queue:<BR>
+<& /Elements/SelectQueue, Name=>"queue", Default => "$queue" &>
+<BR>
+<INPUT TYPE="submit" VALUE="Go!"</INPUT>
+</form>
+
+<BR>
+% my $url = 'Elements/Chart?x_labels=';
+% my $i;
+% $url .= join ",", (map {(int($_/2) == $_/2 && (++$i)%2) ? $_/2 : ""} grep {$counts[$_]} 0..($#counts-1)), "longer";
+% $url .= '&';
+% $url .= "marker_size=1&";
+% $url .= "data1=".(join ",", map { $_ || () } @counts)."&";
+% chop $url;
+<IMG SRC="<% $url %>">
+
+<BR>
+
+<%ARGS>
+$queue => $Statistics::TimeToResolveGraphQueue;
+</%ARGS>
+
+<%INIT>
+use RTx::Statistics;
+
+my @days = qw(Sun Mon Tue Wed Thu Fri Sat);
+my $n = 0;
+my @data = ([]);
+my @msgs;
+my @counts;
+
+my $QueueObj = new RT::Queue($session{'CurrentUser'});
+$QueueObj->Load($queue);
+
+my $tix = new RT::Tickets($session{'CurrentUser'});
+$tix->LimitQueue (VALUE => $queue) if $queue;
+$tix->LimitStatus(VALUE => "resolved");
+$tix->UnLimit;
+if ($tix->Count) {
+ while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK
+ my $when = $t->ResolvedObj->Unix - $t->CreatedObj->Unix;
+ next unless $when > 0; # Doubly bloody hack
+ my $max = (60*60*24*2) / 1800;
+ my $x = int($when / 1800);
+ $counts[$x > $max ? $max : $x]++;
+ }
+}
+</%INIT>
diff --git a/rt/share/html/RTx/Statistics/index.html b/rt/share/html/RTx/Statistics/index.html
new file mode 100755
index 000000000..41490de18
--- /dev/null
+++ b/rt/share/html/RTx/Statistics/index.html
@@ -0,0 +1,59 @@
+%# BEGIN LICENSE BLOCK
+%#
+%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+%#
+%# (Except where explictly superceded by other copyright notices)
+%#
+%# Copyright this file (c) 2003 Harald Wagener <hwagener@hamburg.fcb.com>
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# Unless otherwise specified, all modifications, corrections or
+%# extensions to this work which alter its source code become the
+%# property of Best Practical Solutions, LLC when submitted for
+%# inclusion in the work.
+%#
+%#
+%# END LICENSE BLOCK
+<& /Elements/Header, Title => loc('RT Statistics') &>
+<& /RTx/Statistics/Elements/Tabs, Title => loc('RT Statistics') &>
+
+<&|/l&><h2>Description</h2>
+<p>These 6 options below enable you to display management data from the RT Database in table and graphical forms, enabling trends, bottlenecks, load problems etc to be identified.
+Each contains a description of how the data is displayed and describes the options available to you.</p></&>
+<ul>
+<li><strong><a href="CallsQueueDay/index.html">
+<&|/l&>Tickets per day per Queue</&></a></strong><br />
+<&|/l&>View the number of tickets created, resolved or deleted in a<br /> specific Queue, over the requested period of days</&>
+</li>
+<li><strong><a href="OpenStalled/index.html">
+<&|/l&>Tickets status by Queue</&></a></strong><br>
+<&|/l&>View numbers of new, open and stalled tickets in a selected Queue</&>
+</li>
+<li><strong><a href="CallsMultiQueue/index.html">
+<&|/l&>Tickets per Day in Multiple Queues</&>
+</a></strong><br>
+<&|/l&>View tickets created, resolved or deleted on in one or more Queues<br /> over a specified time period</&>
+</li>
+<li><strong><a href="DayOfWeek/index.html">
+<&|/l&>Tickets per Day of Week (absolute)</&></a></strong><br>
+<&|/l&>View trends showing when tickets are created, resolved or deleted</&>
+</li>
+<li><strong><a href="Resolution/index.html">
+<&|/l&>Time to Resolve</&></a></strong><br>
+<&|/l&>View how long tickets take to be resolved by Queue</&>
+</li>
+</li>
+<li><strong><a href="TimeToResolve/index.html">
+<&|/l&>Time to Resolve (scatter graph)</&></a></strong><br>
+<&|/l&>View a detailed scatter graph of time to resolve tickets by Queue</&>
+</li>
+</ul>
diff --git a/rt/share/html/Search/Build.html b/rt/share/html/Search/Build.html
index 7b105e440..9507a2dbb 100644
--- a/rt/share/html/Search/Build.html
+++ b/rt/share/html/Search/Build.html
@@ -85,9 +85,9 @@
<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>
<div id="editquery">
diff --git a/rt/share/html/Search/Calendar.html b/rt/share/html/Search/Calendar.html
new file mode 100644
index 000000000..9d2b6f546
--- /dev/null
+++ b/rt/share/html/Search/Calendar.html
@@ -0,0 +1,238 @@
+<%args>
+$Month => (localtime)[4]
+$Year => (localtime)[5] + 1900
+$Query => undef
+$Format => undef
+$Order => undef
+$OrderBy => undef
+$RowsPerPage => undef
+$NewQuery => 0
+</%args>
+
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ current_tab => "Search/Calendar.html?$QueryString",
+ Title => $title &>
+<&| /Widgets/TitleBox,
+ title => loc('Calendar for ') . $rtdate->GetMonth($Month) . " $Year" ,
+ title_class=> 'inverse',
+ color => "#993333" &>
+
+<table width="100%">
+<tr>
+<td align="left">
+% my ($PMonth, $PYear) = ($Month - 1, $Year);
+% if ($PMonth < 0) {
+% $PYear--;
+% $PMonth = 11;
+% }
+<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a>
+</td>
+<th align="center">
+ <font size="+1"><% $rtdate->GetMonth($Month). " $Year" %></font>
+</th>
+<td align="right">
+% my ($NMonth, $NYear) = ($Month + 1, $Year);
+% if ($NMonth > 11) {
+% $NYear++;
+% $NMonth = 0;
+% }
+<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a>
+</td>
+</tr>
+</table>
+
+<table class="rtxcalendar">
+
+<thead>
+<tr>
+% for ( @{$week{$weekstart}} ) {
+<th width="14%"><%$rtdate->GetWeekday($_)%></th>
+% }
+</tr>
+</thead>
+
+<tbody>
+<tr>
+% while ($date <= $end) {
+%
+% my $offmonth = $date->month != ($Month + 1);
+% my $is_today = (DateTime->compare($today, $date) == 0);
+% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0);
+% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0);
+
+ <td class="<% $offmonth ? 'offmonth'
+ : $is_today ? 'today'
+ : $is_yesterday ? 'yesterday'
+ : $is_aweekago ? 'aweekago'
+ : ''
+ %>"
+ >
+ <div class="<% $is_today ? 'todays'
+ : $offmonth ? 'offmonth'
+ :'' %>calendardate"
+ ><%$date->day%></div>
+
+% my $sp = 3;
+% for my $t ( @{ $Tickets{$date->strftime("%F")} } ) {
+% $sp--;
+ <& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &>
+% }
+ <% ($sp>0) ? '<BR>'x$sp : '' |n %>
+
+ </td>
+
+% $date = $set->next($date);
+% if ( $date->day_of_week == $startday_of_week ) {
+ </tr><tr>
+% }
+
+% }
+</tr>
+</tbody>
+</table>
+
+<table width="100%">
+<tr>
+<td align="left">
+<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a>
+</td>
+
+<td valign="top" align="center">
+<form action="<%$RT::WebPath%>/Search/Calendar.html?<%$QueryString%>" method="post">
+
+<select name="Month">
+% for (0..11) {
+<option value="<%$_%>" <% $_ == $Month ? 'selected' : ''%> ><%$rtdate->GetMonth($_)%></option>
+% }
+</select>
+% my $year = (localtime)[5] + 1900;
+<select name="Year">
+% for ( ($year-5) .. ($year+5)) {
+<option value="<%$_%>" <% $_ == $Year ? 'selected' : ''%>><%$_%></option>
+% }
+</select>
+
+%# <& /Elements/Submit&>
+<input type="submit" value="<% loc('Submit') %>" class="button" />
+
+</form>
+</td>
+
+<td align="right">
+<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a>
+</td>
+</tr>
+</table>
+
+<table width="100%">
+<tr>
+
+<td valign="top" rowspan=9>
+ <BR>
+ <a href="<%$RT::WebPath%>/Prefs/Calendar.html">Calendar Preferences and Help</a>
+</td>
+
+% foreach my $legend (keys %legend) {
+ <tr>
+ <td align="right">
+ <img src="<%$RT::WebImagesURL%>/<%$legend%>.png" />
+ </td>
+ <td align="left">
+% my $more = 0;
+% foreach ( @{$legend{$legend}} ) {
+ <% $more++ ? ', ' : '' %>
+ <&|/l&><% $_ %></&>
+% }
+ </td>
+ </tr>
+% }
+
+</table>
+
+</&>
+
+<%ONCE>
+
+my %legend = (
+ 'created' => ['Created'],
+ 'due' => ['Due'],
+ 'resolved' => ['Resolved'],
+ 'updated' => ['Last Updated'],
+ 'created_due' => ['Created','Due'],
+ 'reminder' => ['Reminders'],
+ 'started' => ['Started'],
+ 'starts_due' => ['Starts','Due'],
+);
+
+</%ONCE>
+<%INIT>
+use RTx::Calendar qw(FirstDay LastDay);
+
+my $title = loc("Calendar");
+
+my @DateTypes = qw/Created Starts Started Due LastUpdated Resolved/;
+
+my $rtdate = RT::Date->new($session{'CurrentUser'});
+
+my $weekstart = 'Sunday'; #RT::SiteConfig? user pref?
+my %week = (
+ 'Saturday' => [6,0..5],
+ 'Sunday' => [0..6],
+ 'Monday' => [1..6,0],
+);
+my $startday_of_week = ${$week{$weekstart}}[0] || 7;
+my $endday_of_week = ${$week{$weekstart}}[-1] || 7;
+
+my $today = DateTime->today;
+my $yesterday = $today->clone->subtract( days=>1 );
+my $aweekago = $today->clone->subtract( days=>7 );
+my $date = FirstDay($Year, $Month + 1, $startday_of_week );
+my $end = LastDay ($Year, $Month + 1, $endday_of_week );
+
+# use this to loop over days until $end
+my $set = DateTime::Set->from_recurrence(
+ next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) }
+);
+
+my $QueryString =
+ $m->comp(
+ '/Elements/QueryString',
+ Query => $Query,
+ Format => $Format,
+ Order => $Order,
+ OrderBy => $OrderBy,
+ Rows => $RowsPerPage
+ )
+ if ($Query);
+
+$QueryString ||= 'NewQuery=1';
+
+# Default Query and Format
+my $TempFormat = "__Starts__ __Due__";
+my $TempQuery = "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
+ AND ( Owner = '" . $session{CurrentUser}->Id ."' OR Owner = 'Nobody' )
+ AND ( Type = 'reminder' OR 'Type' = 'ticket' )";
+
+if ( my $Search = RTx::Calendar::SearchDefaultCalendar($session{CurrentUser}) ) {
+ $TempFormat = $Search->SubValue('Format');
+ $TempQuery = $Search->SubValue('Query');
+}
+
+# we overide them if needed
+$TempQuery = $Query if $Query;
+$TempFormat = $Format if $Format;
+
+# we search all date types in Format string
+my @Dates = grep { $TempFormat =~ m/__${_}(Relative)?__/ } @DateTypes;
+
+# used to display or not a date in Element/CalendarEvent
+my %DateTypes = map { $_ => 1 } @Dates;
+
+$TempQuery .= RTx::Calendar::DatesClauses(\@Dates, $date->strftime("%F"), $end->strftime("%F"));
+
+# print STDERR ("-" x 30), "\n", $TempQuery, "\n";
+
+my %Tickets = RTx::Calendar::FindTickets($session{'CurrentUser'}, $TempQuery, \@Dates, $date->strftime("%F"), $end->strftime("%F"));
+
+</%INIT>
diff --git a/rt/share/html/Search/Elements/BuildFormatString b/rt/share/html/Search/Elements/BuildFormatString
index 89ac642a7..dc07c683b 100644
--- a/rt/share/html/Search/Elements/BuildFormatString
+++ b/rt/share/html/Search/Elements/BuildFormatString
@@ -71,6 +71,9 @@ $CurrentDisplayColumns => undef
# All the things we can display in the format string by default
my @fields = qw(
id QueueName Subject
+
+ Customer Agent CustomerClass CustomerTags
+
Status ExtendedStatus UpdateStatus
Type
@@ -96,6 +99,7 @@ my @fields = qw(
Bookmark
NEWLINE
+
); # loc_qw
$m->callback( CallbackOnce => 1, CallbackName => 'SetFieldsOnce', Fields => \@fields );
diff --git a/rt/share/html/Search/Elements/DisplayOptions b/rt/share/html/Search/Elements/DisplayOptions
index f69fb2630..c83035884 100644
--- a/rt/share/html/Search/Elements/DisplayOptions
+++ b/rt/share/html/Search/Elements/DisplayOptions
@@ -115,6 +115,8 @@ $fields{$_}=1 for @cfs;
# Add PAW sort
$fields{'Custom.Ownership'} = 1;
+$fields{"Customer.$_"} = 1 foreach qw( Number Name ); #Freeside
+
my @Order = split /\|/, $Order;
my @OrderBy = split /\|/, $OrderBy;
if ($Order =~ /\|/) {
diff --git a/rt/share/html/Search/Elements/PickCFs b/rt/share/html/Search/Elements/PickCFs
index 452014779..9abab4443 100644
--- a/rt/share/html/Search/Elements/PickCFs
+++ b/rt/share/html/Search/Elements/PickCFs
@@ -78,20 +78,41 @@ 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 },
- };
+
+ # Op
+ if ($CustomField->Type eq 'Date') {
+ $line{'Op'} = {
+ Type => 'component',
+ Path => '/Elements/SelectDateRelation',
+ Arguments => {},
+ };
+ } else {
+ $line{'Op'} = {
+ Type => 'component',
+ Path => '/Elements/SelectCustomFieldOperator',
+ Arguments => { True => loc("is"),
+ False => loc("isn't"),
+ TrueVal=> '=',
+ FalseVal => '!=',
+ },
+ };
+ }
+
+ # Value
+ if ($CustomField->Type eq 'Date') {
+ $line{'Value'} = {
+ Type => 'component',
+ Path => '/Elements/SelectDate',
+ Arguments => {},
+ };
+ } else {
+ $line{'Value'} = {
+ Type => 'component',
+ Path => '/Elements/SelectCustomFieldValue',
+ Arguments => { CustomField => $CustomField },
+ };
+ }
+
push @lines, \%line;
}
diff --git a/rt/share/html/Search/Elements/ResultViews b/rt/share/html/Search/Elements/ResultViews
index c146e6736..7f6d7de86 100644
--- a/rt/share/html/Search/Elements/ResultViews
+++ b/rt/share/html/Search/Elements/ResultViews
@@ -57,10 +57,11 @@ $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>
+<li><a href="<%RT->Config->Get('WebPath')%>/Search/Results.tsv<%$QueryString%>"><&|/l&>TSV</&></a></li>
+<li><a href="<%RT->Config->Get('WebPath')%>/Search/Results.csv<%$QueryString%>"><&|/l&>CSV</&></a></li>
% # Now let callbacks add their extra tools
% $m->callback( %ARGS, CallbackName => 'AfterTools' );
</ul>
diff --git a/rt/share/html/Search/Results.csv b/rt/share/html/Search/Results.csv
new file mode 100644
index 000000000..8551c9b80
--- /dev/null
+++ b/rt/share/html/Search/Results.csv
@@ -0,0 +1,172 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
+%# <sales@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Query => ''
+$OrderBy => 'id'
+$Order => 'ASC'
+</%ARGS>
+<%INIT>
+
+eval "use Text::CSV_XS";
+if ( $@ ) {
+ $m->comp('/Error', Why => "Error loading Text::CSV_XS.\n$@");
+ $m->abort;
+ return;
+}
+
+my $csv = Text::CSV_XS->new( { eol => "\n" } );
+
+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 LastUpdatedByObj->Name
+);
+
+$r->content_type('text/csv');
+$r->header_out('Content-Disposition' => 'attachment;filename="Results.csv"');
+{
+ 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{$b} } keys %cf_name_to_pos ) {
+ push @header, "CF-". $name;
+ }
+ $csv->combine(@header);
+ $m->out($csv->string());
+ $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;
+ }
+
+ $csv->combine(@row);
+ $m->out($csv->string());
+
+ unless (++$i%10) {
+ $i = 0;
+ $m->flush_buffer;
+ }
+}
+
+$m->abort();
+</%INIT>
diff --git a/rt/share/html/Search/Results.tsv b/rt/share/html/Search/Results.tsv
index 884628437..cdf1ebad0 100644
--- a/rt/share/html/Search/Results.tsv
+++ b/rt/share/html/Search/Results.tsv
@@ -95,7 +95,8 @@ my @attrs = qw(
ResolvedObj->ISO LastUpdatedObj->ISO LastUpdatedByObj->Name
);
-$r->content_type('application/vnd.ms-excel');
+$r->content_type('text/tab-separated-values');
+$r->header_out('Content-Disposition' => 'attachment;filename="Results.tsv"');
{
my @header;
foreach my $attr (@attrs) {
diff --git a/rt/html/Search/Results.tsv b/rt/share/html/Search/Results.xls
index b7c9a42e7..8b3f11b64 100644
--- a/rt/html/Search/Results.tsv
+++ b/rt/share/html/Search/Results.xls
@@ -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)
@@ -46,89 +46,128 @@
%#
%# END BPS TAGGED BLOCK }}}
<%ARGS>
+$Query => ''
$OrderBy => 'id'
$Order => 'ASC'
</%ARGS>
<%INIT>
+use Spreadsheet::WriteExcel;
+my $xls;
+my $fh;
+open ($fh, ">", \$xls) or die "$!";
+my $workbook = Spreadsheet::WriteExcel->new($fh) or die $!;
+my $worksheet = $workbook->add_worksheet();
+
my $Tickets = RT::Tickets->new( $session{'CurrentUser'} );
-$Tickets->FromSQL( $ARGS{'Query'} );
+$Tickets->FromSQL( $Query );
if ( $OrderBy =~ /\|/ ) {
-
- # Multiple Sorts
- my @OrderBy = split /\|/, $OrderBy;
- my @Order = split /\|/, $Order;
- $Tickets->OrderByCols(
- map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } }
- ( 0 .. $#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->OrderBy( FIELD => $OrderBy, ORDER => $Order );
}
-my @rows;
-my %known_cfs;
+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);
+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');
+$r->header_out('Content-Disposition' => 'attachment;filename="Results.xls"');
+{
+ 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{$b} } keys %cf_name_to_pos ) {
+ push @header, "CF-". $name;
+ }
+ my $ws_col = 0;
+ foreach my $ws_val ( @header ) {
+ $worksheet->write(0, $ws_col, $ws_val);
+ $ws_col++;
+ }
+}
+
+my $i = 0;
+my $ws_row = 1;
while ( my $Ticket = $Tickets->Next()) {
- my $row;
+ my @row;
foreach my $attr (@attrs) {
+ my $value;
if ($attr =~ /(.*)->ISO$/ and $Ticket->$1->Unix <= 0) {
- $row->{$attr} = "";
+ $value = '';
} else {
my $method = '$Ticket->'.$attr.'()';
- $row->{$attr} = eval $method;
+ $method =~ s/->ISO\(\)$/->ISO( Timezone => 'user' )/;
+ $value = eval $method;
if ($@) {die "Failed to find $attr - ". $@};
}
+ push @row, $value;
}
- my $cfs = $Ticket->QueueObj->TicketCustomFields();
- while (my $cf = $cfs->Next) {
- my @content;
- my $values = $Ticket->CustomFieldValues($cf->Id);
- while (my $value = $values->Next) {
- push @content, $value->Content;
- }
- $row->{'CustomField-'.$cf->Id} = join(', ',@content);
- if ($row->{'CustomField-'.$cf->Id}) {
- $known_cfs{$cf->Id} = $cf->Name;
- }
- }
- push @rows, $row;
-}
+ 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;
-{
- my @header;
- foreach my $attr (@attrs) {
- my $label = $attr;
- $label =~ s'Obj-.(?:AsString|Name|ISO)''g;
- $label =~ s'-\>MemberEmailAddressesAsString''g;
- push @header, $label;
+ $row[$pos] = '' unless defined $row[$pos];
+ $row[$pos] .= ', ' if $row[$pos];
+ $row[$pos] .= $value->Content;
}
- foreach my $id (sort keys %known_cfs) {
- push @header, "CF-".$known_cfs{$id};
- }
- $m->out(join("\t", @header));
- $m->out("\n");
-}
-foreach my $row (@rows) {
- my @row;
- foreach my $attr(@attrs) {
- push @row, $row->{"$attr"};
+ my $ws_col = 0;
+ foreach my $ws_val ( @row ) {
+ $worksheet->write($ws_row, $ws_col, $ws_val);
+ $ws_col++;
}
- foreach my $id (sort keys %known_cfs) {
- my $val = $row->{'CustomField-'.$id};
- $val =~ s/(\n|\r)//g;
- push @row, $val;
+ $ws_row++;
+
+ unless (++$i%10) {
+ $i = 0;
+ $m->flush_buffer;
}
- $m->out(join("\t",@row));
- $m->out("\n");
}
+$workbook->close;
+close($fh);
+$m->print($xls);
$m->abort();
</%INIT>
diff --git a/rt/share/html/Ticket/Checklist.html b/rt/share/html/Ticket/Checklist.html
new file mode 100644
index 000000000..7394b0c10
--- /dev/null
+++ b/rt/share/html/Ticket/Checklist.html
@@ -0,0 +1,30 @@
+<& /Elements/Header, Title => loc("Checklist for Ticket #[_1] [_2]", $Ticket->Id, $Ticket->Subject) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket, current_tab => 'Ticket/Checklist.html?id='.$Ticket->id,
+ Title => loc("Ticket Checklist # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &>
+
+<& /Ticket/Elements/ShowMembers_Checklist, Ticket => $Ticket &>
+
+% if ( $show_hint ) {
+
+<A HREF="ModifyLinks.html?id=<%$Ticket->id%>">Link</A>
+or <A HREF="Create.html?Queue=<%$Ticket->QueueObj->Id%>&new-MemberOf=<%$Ticket->id%>">create</A>
+create child tickets to make a checklist.
+
+% }
+
+<%ARGS>
+$id => undef
+</%ARGS>
+
+<%INIT>
+
+my $Ticket = LoadTicket ($id);
+
+unless ($Ticket->CurrentUserHasRight('ShowTicket')) {
+ Abort("No permission to view ticket");
+}
+
+my $show_hint = ! $Ticket->Members->Count;
+
+</%INIT>
diff --git a/rt/share/html/Ticket/Create.html b/rt/share/html/Ticket/Create.html
index 651c61041..5c6be7d47 100755
--- a/rt/share/html/Ticket/Create.html
+++ b/rt/share/html/Ticket/Create.html
@@ -64,8 +64,14 @@
<&| /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 class="value"><& Elements/ShowQueue, QueueObj => $QueueObj &>
+%#<input type="hidden" class="hidden" name="Queue" value="<% $QueueObj->Name %>" />
+<td class="value"><& /Elements/SelectQueue,
+ Name => 'Queue',
+ Default => $QueueObj->Name,
+ ShowNullOption => 0,
+ ShowAllQueues => 0,
+ OnChange => "document.getElementsByName('id')[0].value = ''; form.submit()" &>
</td>
<td class="label"><&|/l&>Status</&>:
</td>
diff --git a/rt/share/html/Ticket/Display.html b/rt/share/html/Ticket/Display.html
index 21be7953a..6fd8b85e6 100755
--- a/rt/share/html/Ticket/Display.html
+++ b/rt/share/html/Ticket/Display.html
@@ -46,12 +46,12 @@
%#
%# END BPS TAGGED BLOCK }}}
<& /Elements/Header,
- Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject),
+ Title => loc("Ticket #[_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) &>
+ Title => loc("Ticket #[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &>
% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@Actions, ARGSRef => \%ARGS, Ticket => $TicketObj);
@@ -155,7 +155,7 @@ if ($ARGS{'id'} eq 'new') {
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 );
+ push @Actions, ProcessTicketCustomFieldUpdates(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
diff --git a/rt/share/html/Ticket/Elements/AddCustomers b/rt/share/html/Ticket/Elements/AddCustomers
new file mode 100644
index 000000000..09acdfd3f
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/AddCustomers
@@ -0,0 +1,55 @@
+%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+%# Copyright (c) 2008 Freeside Internet Services, Inc.
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+<BR>
+<%$msg%><br>
+
+% if (@Customers) {
+
+<br><i>(Check box to link)<i>
+<table>
+% foreach my $customer (@Customers) {
+<tr>
+ <td>
+ <input type="checkbox" name="Ticket-AddCustomer-<% $customer->{'custnum'} %>" VALUE="1" <% scalar(@Customers) == 1 ? 'CHECKED' : '' %>>
+ <A HREF="<%$freeside_url%>/view/cust_main.cgi?<% $customer->{'custnum'} %>"><% &RT::URI::freeside::small_custview($customer->{'custnum'}, &RT::URI::freeside::FreesideGetConfig('countrydefault'), 1) |n %>
+ </td>
+</tr>
+% }
+</table>
+
+% }
+
+<%INIT>
+my ($msg);
+
+my $freeside_url = &RT::URI::freeside::FreesideURL();
+
+my @Customers = ();
+if ( $CustomerString ) {
+ @Customers = &RT::URI::freeside::smart_search(
+ 'search' => $CustomerString,
+ 'no_fuzzy_on_exact' => 1, #pref?
+ );
+}
+
+my @Services = ();
+if ($ServiceString) {
+ @Services = (); #service_search();
+}
+
+</%INIT>
+
+<%ARGS>
+$CustomerString => undef
+$ServiceString => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/BulkLinks b/rt/share/html/Ticket/Elements/BulkLinks
index b97270e43..181fbed56 100755
--- a/rt/share/html/Ticket/Elements/BulkLinks
+++ b/rt/share/html/Ticket/Elements/BulkLinks
@@ -163,7 +163,7 @@ $Tickets => undef
<%INIT>
my %hash;
if ( $Tickets && $Tickets->Count ) {
- my $first_ticket = $Tickets->Next;
+ my $first_ticket = $Tickets->Next or last; #avoid errors on bulk delete
# we only show current links that eixst on all the tickets
for my $type ( qw/DependsOn DependedOnBy Members MemberOf RefersTo
ReferredToBy/ ) {
diff --git a/rt/share/html/Ticket/Elements/CheckMandatoryFields b/rt/share/html/Ticket/Elements/CheckMandatoryFields
new file mode 100644
index 000000000..3d0324f98
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/CheckMandatoryFields
@@ -0,0 +1,9 @@
+<%init>
+
+my $TicketObj = $ARGS{'Ticket'} or return ();
+my $ARGSRef = $ARGS{'ARGSRef'};
+my @fields = grep { $_->Required }
+ @{ $TicketObj->CustomFields->ItemsArrayRef };
+return grep { !defined($TicketObj->FirstCustomFieldValue($_->id)) } @fields;
+
+</%init>
diff --git a/rt/share/html/Ticket/Elements/EditCustomers b/rt/share/html/Ticket/Elements/EditCustomers
new file mode 100644
index 000000000..0ba6e447b
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/EditCustomers
@@ -0,0 +1,63 @@
+%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+%# Copyright (c) 2008 Freeside Internet Services, Inc.
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+<TABLE width=100%>
+ <TR>
+ <TD VALIGN=TOP WIDTH=50%>
+ <h3><&|/l&>Current Customers</&></h3>
+
+<table>
+ <tr>
+ <td><i><&|/l&>(Check box to disassociate)</&></i></td>
+ </tr>
+ <tr>
+ <td class="value">
+% foreach my $link ( @{ $Ticket->Customers->ItemsArrayRef } ) {
+
+ <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>">
+%# <& ShowLink, URI => $link->TargetURI &><br>
+ <A HREF="<% $link->TargetURI->Resolver->HREF %>"><% $link->TargetURI->Resolver->AsStringLong |n %></A>
+ <BR>
+% }
+ </td>
+ </tr>
+</table>
+
+</TD>
+
+<TD VALIGN=TOP>
+<h3><&|/l&>New Customer Links</&></h3>
+<&|/l&>Find customer</&><BR>
+<input name="CustomerString">
+<input type=submit name="OnlySearchForCustomers" value="<&|/l&>Go!</&>">
+<br><i>cust #, name, company or phone</i>
+<BR>
+%#<BR>
+%#<&|/l&>Find service</&><BR>
+%#<input name="ServiceString">
+%#<input type=submit name="OnlySearchForServices" value="<&|/l&>Go!</&>">
+%#<br><i>username, username@domain, domain, or IP address</i>
+%#<BR>
+
+<& AddCustomers, Ticket => $Ticket,
+ CustomerString => $CustomerString,
+ ServiceString => $ServiceString, &>
+
+</TD>
+</TR>
+</TABLE>
+
+<%ARGS>
+$CustomerString => undef
+$ServiceString => undef
+$Ticket => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/EditTransactionCustomFields b/rt/share/html/Ticket/Elements/EditTransactionCustomFields
index e2f42b2c5..a4ade8721 100644
--- a/rt/share/html/Ticket/Elements/EditTransactionCustomFields
+++ b/rt/share/html/Ticket/Elements/EditTransactionCustomFields
@@ -48,19 +48,25 @@
% $m->callback( CallbackName => 'BeforeTransactionCustomFields', TicketObj => $TicketObj, QueueObj => $QueueObj, NamePrefix => $NamePrefix );
% if ($CustomFields->Count) {
% while (my $CF = $CustomFields->Next()) {
+% $CF->SetContextObject($TicketObj || $QueueObj);
% next unless $CF->CurrentUserHasRight('ModifyCustomField');
+% next unless $CF->UILocation eq $UILocation;
<tr>
-<td class="label"><% loc($CF->Name) %>:</td>
+<td class="label">
+<% loc($CF->Name) %>:
+</td>
<td>
<& /Elements/EditCustomField,
CustomField => $CF,
NamePrefix => $NamePrefix
&>
+% if ( $CF->Type ne 'TimeValue' ) {
<em><% $CF->FriendlyType %></em>
-% if (my $msg = $m->notes('InvalidField-' . $CF->Id)) {
+% }
+% if (my $msg = $m->notes('InvalidField-' . $CF->Id)) {
<br />
<span class="cfinvalidfield"><% $msg %></span>
-% }
+% }
</td>
</td></tr>
% }
@@ -83,5 +89,6 @@ $m->callback( CallbackName => 'MassageTransactionCustomFields', CustomFields =>
$NamePrefix => "Object-RT::Transaction--CustomField-"
$TicketObj => undef
$QueueObj => undef
+$UILocation => ''
</%ARGS>
diff --git a/rt/share/html/Ticket/Elements/ShowCustomers b/rt/share/html/Ticket/Elements/ShowCustomers
new file mode 100644
index 000000000..3acf92dd4
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowCustomers
@@ -0,0 +1,38 @@
+%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+<table>
+% my $cust = 0;
+% foreach my $custResolver ( map { $_->TargetURI->Resolver }
+% @{ $Ticket->Customers->ItemsArrayRef }
+% )
+% {
+% $cust++;
+% my $cust_main = '';
+ <tr>
+ <td class="value">
+ <A HREF="<% $custResolver->HREF %>"><% $custResolver->AsStringLong |n %></A>
+ </td>
+ </tr>
+% }
+% unless ( $cust ) {
+ <tr>
+ <td class="labeltop">
+ <i>(none)<i>
+ </td>
+ </tr>
+
+% }
+</table>
+<%ARGS>
+$Ticket => undef
+</%ARGS>
+
diff --git a/rt/share/html/Ticket/Elements/ShowMembers_Checklist b/rt/share/html/Ticket/Elements/ShowMembers_Checklist
new file mode 100644
index 000000000..68fb3b2c5
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/ShowMembers_Checklist
@@ -0,0 +1,29 @@
+
+<style type="text/css">
+ul.checklist {
+ list-style-type: none
+}
+</style>
+
+<ul class="checklist">
+% while (my $link = $members->Next) {
+<li><& /Elements/ShowLink_Checklist, URI => $link->BaseURI &><br />
+% if ($depth < 8) { #why only 8?
+<& /Ticket/Elements/ShowMembers_Checklist, 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/ShowSummary b/rt/share/html/Ticket/Elements/ShowSummary
index 24d8c4dfe..ef5960e01 100755
--- a/rt/share/html/Ticket/Elements/ShowSummary
+++ b/rt/share/html/Ticket/Elements/ShowSummary
@@ -66,6 +66,13 @@
</&>
% }
+ <&| /Widgets/TitleBox, title => loc('Customers'),
+ title_href => RT->Config->Get('WebPath')."/Ticket/ModifyCustomers.html?id=".$Ticket->Id,
+ class => 'ticket-info-customers'
+ &>
+ <& /Ticket/Elements/ShowCustomers, Ticket => $Ticket &>
+ </&>
+
<&| /Widgets/TitleBox, title => loc('People'),
title_href => RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$Ticket->Id,
class => 'ticket-info-people',
diff --git a/rt/share/html/Ticket/Elements/ShowTransactionAttachments b/rt/share/html/Ticket/Elements/ShowTransactionAttachments
index 161a4853f..625e124f8 100644
--- a/rt/share/html/Ticket/Elements/ShowTransactionAttachments
+++ b/rt/share/html/Ticket/Elements/ShowTransactionAttachments
@@ -210,8 +210,14 @@ my $render_attachment = sub {
# 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: $@" ) }
+ #don't want to use this even if it is installed, its
+ #segfaulting on weird characters and silently truncating the
+ #ticket history output
+ #see:
+ # r44838@pinglin: jesse | 2006-11-14 15:53:18 -0500
+ # * Move Text::Quoted back to being a run-time require. So that it's possible to turn off the feature if it causes your perl to segfault. (Text::Tabs is...not robust in the face of perl bugs)
+ #eval { require Text::Quoted; $content = Text::Quoted::extract($content); };
+ #if ($@) { $RT::Logger->warning( "Text::Quoted failed: $@" ) }
$m->comp(
'ShowMessageStanza',
diff --git a/rt/share/html/Ticket/Elements/Tabs b/rt/share/html/Ticket/Elements/Tabs
index d88a2ad91..3a8a176c4 100755
--- a/rt/share/html/Ticket/Elements/Tabs
+++ b/rt/share/html/Ticket/Elements/Tabs
@@ -142,6 +142,14 @@ if ($Ticket) {
title => loc('Links'),
path => "Ticket/ModifyLinks.html?id=" . $id,
},
+ _Ea => {
+ title => loc('Checklist'),
+ path => "Ticket/Checklist.html?id=" . $id,
+ },
+ _Eb=> {
+ title => loc('Customers'),
+ path => "Ticket/ModifyCustomers.html?id=" . $id,
+ },
_X => {
title => loc('Jumbo'),
path => "Ticket/ModifyAll.html?id=" . $id,
@@ -326,6 +334,11 @@ if ($has_query) {
title => loc('Graph'),
};
+ $tabs->{"l"} = {
+ path => "Prefs/SavedSearches.html",
+ title => 'Saved Searches',
+ };
+
}
foreach my $searchtab ( keys %{$searchtabs} ) {
diff --git a/rt/share/html/Ticket/ModifyCustomers.html b/rt/share/html/Ticket/ModifyCustomers.html
new file mode 100644
index 000000000..72d103b23
--- /dev/null
+++ b/rt/share/html/Ticket/ModifyCustomers.html
@@ -0,0 +1,49 @@
+%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am>
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+<& /Elements/Header, Title => loc("Customers for ticket #[_1]", $Ticket->Id) &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $Ticket,
+ current_tab => "Ticket/ModifyCustomers.html?id=".$Ticket->Id,
+ Title => loc("Customers for ticket #[_1]", $Ticket->Id) &>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="ModifyCustomers.html" method="post">
+<input type="hidden" name="id" value="<%$Ticket->id%>">
+
+<& /Elements/TitleBoxStart, title => loc('Edit Customer Links'), color => "#7f007b"&>
+<& Elements/EditCustomers, Ticket => $Ticket, CustomerString => $CustomerString, ServiceString => $ServiceString &>
+<& /Elements/TitleBoxEnd &>
+<& /Elements/Submit, color => "#7f007b", Label => loc('Save Changes') &>
+</form>
+
+
+<%INIT>
+
+my @results = ();
+my $Ticket = LoadTicket($id);
+
+# if we're trying to search for customers/services and nothing else
+unless ( $OnlySearchForCustomers || $OnlySearchForServices) {
+ @results = ProcessTicketCustomers( TicketObj => $Ticket, ARGSRef => \%ARGS);
+}
+
+</%INIT>
+
+
+<%ARGS>
+$OnlySearchForCustomers => undef
+$OnlySearchForServices => undef
+$CustomerString => undef
+$ServiceString => undef
+$id => undef
+</%ARGS>
diff --git a/rt/share/html/Ticket/Update.html b/rt/share/html/Ticket/Update.html
index 50c6f9327..62db0d1c3 100755
--- a/rt/share/html/Ticket/Update.html
+++ b/rt/share/html/Ticket/Update.html
@@ -65,8 +65,8 @@
<table width="100%" border="0">
% $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj);
-<tr><td class="label"><&|/l&>Status</&>:</td>
-<td>
+<tr><td valign="baseline" class="label"><&|/l&>Status</&>:</td>
+<td valign="baseline">
<& /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,
@@ -76,13 +76,23 @@
DefaultLabel => loc("[_1] (Unchanged)", $m->scomp('/Elements/ShowUser', User => $TicketObj->OwnerObj)),
Default => $ARGS{'Owner'}
&>
-<span class="label"><&|/l&>Worked</&>:</span>
-<& /Elements/EditTimeValue,
+</td>
+<td rowspan=4 valign="top">
+<table style="float:right;">
+<tr>
+<td class="label"><&|/l&>Worked</&>:</td>
+<td><& /Elements/EditTimeValue,
Name => 'UpdateTimeWorked',
Default => $ARGS{UpdateTimeWorked}||'',
InUnits => $ARGS{'UpdateTimeWorked-TimeUnits'}||'minutes',
&>
</td></tr>
+<& /Ticket/Elements/EditTransactionCustomFields,
+ %ARGS,
+ TicketObj => $TicketObj,
+ UILocation => 'TimeWorked',
+&>
+</table></td></tr>
% my $skip;
% $m->callback( %ARGS, CallbackName => 'BeforeUpdateType', skip => \$skip );
% if (!$skip) {
@@ -131,7 +141,7 @@
% }
% $m->callback( %ARGS, CallbackName => 'AfterGnuPG' );
-<tr><td class="label" valign="top"><&|/l&>Message</&>:</td><td>
+<tr><td class="label" valign="top"><&|/l&>Message</&>:</td><td colspan=2>
% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
% if (exists $ARGS{UpdateContent}) {
% # preserve QuoteTransaction so we can use it to set up sane references/in/reply to
diff --git a/rt/share/html/User/Prefs.html b/rt/share/html/User/Prefs.html
index f04b02f47..09875c99a 100755
--- a/rt/share/html/User/Prefs.html
+++ b/rt/share/html/User/Prefs.html
@@ -45,7 +45,7 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<& /Elements/Header, Title=>loc("Preferences") &>
+<& /Elements/Header, Title=>loc("Ticketing Preferences") &>
<& /User/Elements/Tabs,
current_tab => 'User/Prefs.html',
Title => loc("Preferences") &>
diff --git a/rt/share/html/Widgets/TitleBoxEnd b/rt/share/html/Widgets/TitleBoxEnd
index dab933166..d39512042 100755
--- a/rt/share/html/Widgets/TitleBoxEnd
+++ b/rt/share/html/Widgets/TitleBoxEnd
@@ -50,7 +50,7 @@
</div>
% #Manually flush the content buffer after each titlebox is displayed
-% $m->flush_buffer();
+% #wtf? this causes us to lose content #$m->flush_buffer();
<%ARGS>
$title => undef
diff --git a/rt/share/html/autohandler b/rt/share/html/autohandler
index f9314a942..5a618fbb1 100755
--- a/rt/share/html/autohandler
+++ b/rt/share/html/autohandler
@@ -52,7 +52,9 @@ $m->callback( ARGSRef => \%ARGS, CallbackName => 'Init', CallbackPage => '/autoh
RT::Interface::Web::HandleRequest(\%ARGS);
-$m->comp( '/Elements/Footer', %ARGS );
+$m->comp( '/Elements/Footer', %ARGS )
+ unless $r->content_type =~ qr<^(text|application)/(x-)?(css|javascript)>;
+
</%INIT>
<%ARGS>
$user => undef
diff --git a/rt/share/html/index.html b/rt/share/html/index.html
index 49d524a96..0a570e5c3 100755
--- a/rt/share/html/index.html
+++ b/rt/share/html/index.html
@@ -115,7 +115,11 @@ if ( $ARGS{'QuickCreate'} ) {
From => $session{'CurrentUser'}->EmailAddress,
Content => $ARGS{'Content'},
Subject => $ARGS{'Subject'});
- push @results, $msg;
+ if ( $t && $t->Id && RT->Config->Get('DisplayAfterQuickCreate', $session{'CurrentUser'}) ) {
+ RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Ticket/Display.html?id=". $t->Id);
+ } else {
+ push @results, $msg;
+ }
}
elsif ( !$ValidCFs ) {
push @results, "can't quickly create ticket in queue " .