From 5c96d46d56f2066bb40d9a34c4db56f53f43c6f2 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 31 Dec 2009 14:00:35 +0000 Subject: [PATCH] merging 3.8.7!!! --- rt/.gitignore | 42 - rt/Makefile | 377 +- rt/bin/mason_handler.fcgi | 13 +- rt/bin/mason_handler.scgi | 12 +- rt/bin/mason_handler.svc | 13 +- rt/bin/rt-crontool | 211 +- rt/bin/rt-mailgate | 164 +- rt/config.status | 408 +- rt/etc/RT_Config.pm | 1794 ++++- rt/etc/RT_Config.pm.in | 1808 ++++- rt/etc/RT_SiteConfig.pm | 1 + rt/etc/schema.Pg | 5 +- rt/etc/schema.mysql | 416 - rt/html/Admin/CustomFields/GroupRights.html | 119 - rt/html/Admin/CustomFields/Modify.html | 258 - rt/html/Admin/CustomFields/Objects.html | 147 - rt/html/Admin/CustomFields/UserRights.html | 170 - rt/html/Admin/CustomFields/index.html | 93 - rt/html/Admin/Elements/AddCustomFieldValue | 74 - rt/html/Admin/Elements/ConfigureMyRT | 80 - rt/html/Admin/Elements/CreateUserCalled | 50 - rt/html/Admin/Elements/CustomFieldTabs | 118 - rt/html/Admin/Elements/EditCustomField | 159 - rt/html/Admin/Elements/EditCustomFieldValues | 96 - rt/html/Admin/Elements/EditCustomFields | 205 - rt/html/Admin/Elements/EditQueueWatchers | 78 - rt/html/Admin/Elements/EditScrip | 183 - rt/html/Admin/Elements/EditScrips | 125 - rt/html/Admin/Elements/EditTemplates | 128 - rt/html/Admin/Elements/EditUserComments | 56 - rt/html/Admin/Elements/GlobalCustomFieldTabs | 95 - rt/html/Admin/Elements/GroupTabs | 102 - rt/html/Admin/Elements/Header | 52 - rt/html/Admin/Elements/ListGlobalCustomFields | 61 - rt/html/Admin/Elements/ListGlobalScrips | 76 - rt/html/Admin/Elements/ModifyTemplate | 84 - rt/html/Admin/Elements/ObjectCustomFields | 111 - rt/html/Admin/Elements/PickCustomFields | 98 - rt/html/Admin/Elements/PickObjects | 81 - rt/html/Admin/Elements/QueueRightsForUser | 64 - rt/html/Admin/Elements/QueueTabs | 120 - rt/html/Admin/Elements/SelectCustomFieldLookupType | 60 - rt/html/Admin/Elements/SelectCustomFieldType | 60 - rt/html/Admin/Elements/SelectGroups | 62 - rt/html/Admin/Elements/SelectModifyGroup | 57 - rt/html/Admin/Elements/SelectModifyQueue | 57 - rt/html/Admin/Elements/SelectModifyUser | 73 - rt/html/Admin/Elements/SelectNewGroupMembers | 99 - rt/html/Admin/Elements/SelectRights | 118 - rt/html/Admin/Elements/SelectScrip | 72 - rt/html/Admin/Elements/SelectScripAction | 73 - rt/html/Admin/Elements/SelectScripCondition | 72 - rt/html/Admin/Elements/SelectSingleOrMultiple | 67 - rt/html/Admin/Elements/SelectStage | 66 - rt/html/Admin/Elements/SelectTemplate | 87 - rt/html/Admin/Elements/SelectUsers | 64 - rt/html/Admin/Elements/SystemTabs | 97 - rt/html/Admin/Elements/Tabs | 93 - rt/html/Admin/Elements/ToolTabs | 80 - rt/html/Admin/Elements/UserTabs | 113 - rt/html/Admin/Global/CustomFields/Groups.html | 58 - .../Admin/Global/CustomFields/Queue-Tickets.html | 58 - .../Global/CustomFields/Queue-Transactions.html | 58 - rt/html/Admin/Global/CustomFields/Users.html | 58 - rt/html/Admin/Global/CustomFields/index.html | 93 - rt/html/Admin/Global/GroupRights.html | 123 - rt/html/Admin/Global/MyRT.html | 111 - rt/html/Admin/Global/Scrip.html | 87 - rt/html/Admin/Global/Scrips.html | 77 - rt/html/Admin/Global/Template.html | 122 - rt/html/Admin/Global/Templates.html | 77 - rt/html/Admin/Global/UserRights.html | 103 - rt/html/Admin/Global/index.html | 94 - rt/html/Admin/Groups/CustomFields.html | 48 - rt/html/Admin/Groups/GroupRights.html | 119 - rt/html/Admin/Groups/History.html | 68 - rt/html/Admin/Groups/Members.html | 168 - rt/html/Admin/Groups/Modify.html | 174 - rt/html/Admin/Groups/UserRights.html | 116 - rt/html/Admin/Groups/index.html | 113 - rt/html/Admin/Queues/CustomField.html | 87 - rt/html/Admin/Queues/CustomFields.html | 72 - rt/html/Admin/Queues/GroupRights.html | 134 - rt/html/Admin/Queues/Modify.html | 193 - rt/html/Admin/Queues/People.html | 210 - rt/html/Admin/Queues/Scrip.html | 100 - rt/html/Admin/Queues/Scrips.html | 87 - rt/html/Admin/Queues/Template.html | 130 - rt/html/Admin/Queues/Templates.html | 81 - rt/html/Admin/Queues/UserRights.html | 114 - rt/html/Admin/Queues/index.html | 86 - rt/html/Admin/Tools/Configuration.html | 100 - rt/html/Admin/Tools/index.html | 55 - rt/html/Admin/Users/CustomFields.html | 71 - rt/html/Admin/Users/History.html | 68 - rt/html/Admin/Users/Memberships.html | 67 - rt/html/Admin/Users/Modify.html | 445 -- rt/html/Admin/Users/MyRT.html | 132 - rt/html/Admin/Users/index.html | 115 - rt/html/Admin/autohandler | 53 - rt/html/Admin/index.html | 101 - rt/html/Approvals/Display.html | 72 - rt/html/Approvals/Elements/Approve | 94 - rt/html/Approvals/Elements/PendingMyApproval | 111 - rt/html/Approvals/Elements/ShowDependency | 109 - rt/html/Approvals/Elements/Tabs | 58 - rt/html/Approvals/index.html | 90 - rt/html/Download/CustomFieldValue/dhandler | 77 - rt/html/Download/Tabular/dhandler | 76 - rt/html/Elements/BevelBoxRaisedEnd | 50 - rt/html/Elements/BevelBoxRaisedStart | 50 - rt/html/Elements/Callback | 92 - rt/html/Elements/Checkbox | 63 - rt/html/Elements/CollectionAsTable/Header | 125 - rt/html/Elements/CollectionAsTable/ParseFormat | 106 - rt/html/Elements/CollectionAsTable/Row | 117 - rt/html/Elements/CreateTicket | 50 - rt/html/Elements/EditCustomField | 99 - rt/html/Elements/EditCustomFieldBinary | 62 - rt/html/Elements/EditCustomFieldCombobox | 68 - rt/html/Elements/EditCustomFieldFreeform | 74 - rt/html/Elements/EditCustomFieldImage | 62 - rt/html/Elements/EditCustomFieldSelect | 128 - rt/html/Elements/EditCustomFieldText | 67 - rt/html/Elements/EditCustomFieldWikitext | 67 - rt/html/Elements/EditLinks | 177 - rt/html/Elements/EmailInput | 47 - rt/html/Elements/Error | 86 - rt/html/Elements/Footer | 75 - rt/html/Elements/GotoTicket | 48 - rt/html/Elements/Header | 126 - rt/html/Elements/ListActions | 65 - rt/html/Elements/Login | 138 - rt/html/Elements/Logo | 56 - rt/html/Elements/Menu | 134 - rt/html/Elements/MessageBox | 74 - rt/html/Elements/MyAdminQueues | 54 - rt/html/Elements/MyRT | 100 - rt/html/Elements/MyReminders | 73 - rt/html/Elements/MyRequests | 49 - rt/html/Elements/MySupportQueues | 54 - rt/html/Elements/MyTickets | 49 - rt/html/Elements/PageLayout | 327 - rt/html/Elements/QueryString | 63 - rt/html/Elements/QueueSummary | 92 - rt/html/Elements/QuickCreate | 71 - rt/html/Elements/Quicksearch | 61 - rt/html/Elements/RT__Ticket/ColumnMap | 319 - rt/html/Elements/Refresh | 69 - rt/html/Elements/RefreshHomepage | 51 - rt/html/Elements/ScrubHTML | 73 - rt/html/Elements/Section | 51 - rt/html/Elements/SelectAttachmentField | 56 - rt/html/Elements/SelectBoolean | 71 - rt/html/Elements/SelectCustomFieldOperator | 64 - rt/html/Elements/SelectCustomFieldValue | 65 - rt/html/Elements/SelectDate | 86 - rt/html/Elements/SelectDateRelation | 60 - rt/html/Elements/SelectDateType | 60 - rt/html/Elements/SelectEqualityOperator | 64 - rt/html/Elements/SelectGroups | 62 - rt/html/Elements/SelectLang | 80 - rt/html/Elements/SelectLinkType | 61 - rt/html/Elements/SelectMatch | 82 - rt/html/Elements/SelectNewTicketQueue | 50 - rt/html/Elements/SelectOwner | 110 - rt/html/Elements/SelectQueue | 97 - rt/html/Elements/SelectResultsPerPage | 68 - rt/html/Elements/SelectSortOrder | 65 - rt/html/Elements/SelectStatus | 67 - rt/html/Elements/SelectTicketSortBy | 62 - rt/html/Elements/SelectTicketTypes | 58 - rt/html/Elements/SelectTimeUnits | 57 - rt/html/Elements/SelectUsers | 62 - rt/html/Elements/SelectWatcherType | 71 - rt/html/Elements/SetupSessionCookie | 133 - rt/html/Elements/ShowCustomFieldBinary | 51 - rt/html/Elements/ShowCustomFieldImage | 53 - rt/html/Elements/ShowCustomFieldWikitext | 58 - rt/html/Elements/ShowCustomFields | 115 - rt/html/Elements/ShowLink | 64 - rt/html/Elements/ShowLinks | 112 - rt/html/Elements/ShowMemberships | 88 - rt/html/Elements/ShowSearch | 125 - rt/html/Elements/SimpleSearch | 58 - rt/html/Elements/Submit | 86 - rt/html/Elements/Tabs | 120 - rt/html/Elements/TicketList | 179 - rt/html/Elements/TitleBox | 51 - rt/html/Elements/TitleBoxEnd | 51 - rt/html/Elements/TitleBoxStart | 51 - rt/html/Elements/ValidateCustomFields | 81 - rt/html/Helpers/CalPopup.html | 129 - rt/html/Helpers/EmailAutocomplete | 47 - rt/html/NoAuth/Logout.html | 74 - rt/html/NoAuth/Reminder.html | 50 - rt/html/NoAuth/css/3.4-compat/body.css | 75 - rt/html/NoAuth/css/3.4-compat/footer.css | 61 - rt/html/NoAuth/css/3.4-compat/forms.css | 104 - rt/html/NoAuth/css/3.4-compat/header.css | 88 - rt/html/NoAuth/css/3.4-compat/login.css | 54 - rt/html/NoAuth/css/3.4-compat/main.css | 69 - rt/html/NoAuth/css/3.4-compat/misc.css | 49 - rt/html/NoAuth/css/3.4-compat/nav.css | 106 - rt/html/NoAuth/css/3.4-compat/quickbar.css | 82 - rt/html/NoAuth/css/3.4-compat/ticket.css | 50 - rt/html/NoAuth/css/3.4-compat/titlebox.css | 103 - rt/html/NoAuth/css/3.4-compat/transactions.css | 83 - rt/html/NoAuth/css/3.5-default/approvals.css | 97 - rt/html/NoAuth/css/3.5-default/body.css | 81 - rt/html/NoAuth/css/3.5-default/footer.css | 91 - rt/html/NoAuth/css/3.5-default/forms.css | 136 - rt/html/NoAuth/css/3.5-default/header.css | 152 - rt/html/NoAuth/css/3.5-default/login.css | 85 - rt/html/NoAuth/css/3.5-default/logo.css | 60 - rt/html/NoAuth/css/3.5-default/main.css | 62 - rt/html/NoAuth/css/3.5-default/misc.css | 95 - rt/html/NoAuth/css/3.5-default/nav.css | 163 - rt/html/NoAuth/css/3.5-default/quickbar.css | 98 - rt/html/NoAuth/css/3.5-default/ticket.css | 57 - rt/html/NoAuth/css/3.5-default/titlebox.css | 180 - rt/html/NoAuth/css/3.5-default/transactions.css | 150 - rt/html/NoAuth/css/autohandler | 53 - rt/html/NoAuth/css/dhandler | 77 - rt/html/NoAuth/css/print.css | 85 - rt/html/NoAuth/images/autohandler | 28 - rt/html/NoAuth/images/bplogo.gif | Bin 755 -> 0 bytes rt/html/NoAuth/images/css/cb-light.gif | Bin 186 -> 0 bytes rt/html/NoAuth/images/css/cb.gif | Bin 110 -> 0 bytes rt/html/NoAuth/images/css/cbr-b2g.gif | Bin 135 -> 0 bytes rt/html/NoAuth/images/css/cbr-b2lb.gif | Bin 137 -> 0 bytes rt/html/NoAuth/images/css/cbr-gray.gif | Bin 137 -> 0 bytes rt/html/NoAuth/images/css/cbr-trans.gif | Bin 183 -> 0 bytes rt/html/NoAuth/images/css/cbr.gif | Bin 110 -> 0 bytes rt/html/NoAuth/images/css/ct-light.gif | Bin 162 -> 0 bytes rt/html/NoAuth/images/css/ct.gif | Bin 110 -> 0 bytes rt/html/NoAuth/images/css/ctr-b2g.gif | Bin 136 -> 0 bytes rt/html/NoAuth/images/css/ctr-b2lb.gif | Bin 114 -> 0 bytes rt/html/NoAuth/images/css/ctr-gray.gif | Bin 138 -> 0 bytes rt/html/NoAuth/images/css/ctr-trans.gif | Bin 182 -> 0 bytes rt/html/NoAuth/images/css/ctr.gif | Bin 111 -> 0 bytes rt/html/NoAuth/images/css/dark-arrow-up.png | Bin 346 -> 0 bytes rt/html/NoAuth/images/css/dark-arrow.png | Bin 337 -> 0 bytes rt/html/NoAuth/images/css/fieldbg-autocomplete.gif | Bin 1164 -> 0 bytes rt/html/NoAuth/images/css/light-arrow-up.png | Bin 348 -> 0 bytes rt/html/NoAuth/images/css/light-arrow.png | Bin 340 -> 0 bytes rt/html/NoAuth/images/css/rolldown-arrow.gif | Bin 83 -> 0 bytes rt/html/NoAuth/images/css/rolldown-arrow.png | Bin 259 -> 0 bytes rt/html/NoAuth/images/css/rollup-arrow.gif | Bin 82 -> 0 bytes rt/html/NoAuth/images/favicon.png | Bin 335 -> 0 bytes rt/html/NoAuth/js/ahah.js | 80 - rt/html/NoAuth/js/autohandler | 53 - rt/html/NoAuth/js/cascaded.js | 66 - rt/html/NoAuth/js/class.js | 62 - rt/html/NoAuth/js/combobox.js | 265 - rt/html/NoAuth/js/list.js | 159 - rt/html/NoAuth/js/scriptaculous/controls.js | 0 rt/html/NoAuth/js/scriptaculous/effects.js | 0 rt/html/NoAuth/js/scriptaculous/prototype.js | 0 rt/html/NoAuth/js/scriptaculous/scriptaculous.js | 0 rt/html/NoAuth/js/titlebox-state.js | 83 - rt/html/NoAuth/js/util.js | 250 - rt/html/Prefs/Elements/Tabs | 72 - rt/html/Prefs/MyRT.html | 151 - rt/html/Prefs/Quicksearch.html | 96 - rt/html/Prefs/Search.html | 108 - rt/html/Prefs/SearchOptions.html | 114 - rt/html/REST/1.0/Forms/queue/default | 170 - rt/html/REST/1.0/Forms/queue/ns | 62 - rt/html/REST/1.0/Forms/ticket/attachments | 135 - rt/html/REST/1.0/Forms/ticket/comment | 152 - rt/html/REST/1.0/Forms/ticket/default | 345 - rt/html/REST/1.0/Forms/ticket/history | 200 - rt/html/REST/1.0/Forms/ticket/links | 172 - rt/html/REST/1.0/Forms/ticket/merge | 96 - rt/html/REST/1.0/Forms/ticket/take | 135 - rt/html/REST/1.0/Forms/transaction/default | 143 - rt/html/REST/1.0/Forms/user/default | 188 - rt/html/REST/1.0/Forms/user/ns | 65 - rt/html/REST/1.0/NoAuth/mail-gateway | 84 - rt/html/REST/1.0/autohandler | 56 - rt/html/REST/1.0/dhandler | 316 - rt/html/REST/1.0/logout | 51 - rt/html/REST/1.0/search/dhandler | 56 - rt/html/REST/1.0/search/ticket | 158 - rt/html/REST/1.0/ticket/comment | 177 - rt/html/REST/1.0/ticket/link | 123 - rt/html/REST/1.0/ticket/merge | 102 - rt/html/Search/Build.html | 832 -- rt/html/Search/Bulk.html | 397 - rt/html/Search/Chart | 188 - rt/html/Search/Chart.html | 73 - rt/html/Search/Edit.html | 88 - rt/html/Search/Elements/BuildFormatString | 244 - rt/html/Search/Elements/Chart | 139 - rt/html/Search/Elements/DisplayOptions | 144 - rt/html/Search/Elements/EditFormat | 116 - rt/html/Search/Elements/EditQuery | 67 - rt/html/Search/Elements/EditSearches | 103 - rt/html/Search/Elements/NewListActions | 68 - rt/html/Search/Elements/PickBasics | 176 - rt/html/Search/Elements/PickCFs | 80 - rt/html/Search/Elements/PickCriteria | 82 - rt/html/Search/Elements/SearchPrivacy | 55 - rt/html/Search/Elements/SearchesForObject | 65 - rt/html/Search/Elements/SelectAndOr | 53 - rt/html/Search/Elements/SelectChartType | 56 - rt/html/Search/Elements/SelectGroup | 67 - rt/html/Search/Elements/SelectGroupBy | 63 - rt/html/Search/Elements/SelectLinks | 66 - rt/html/Search/Elements/SelectPersonType | 84 - rt/html/Search/Elements/SelectSearchObject | 60 - rt/html/Search/Elements/SelectSearchesForObjects | 69 - rt/html/Search/Results.html | 177 - rt/html/Search/Results.rdf | 87 - rt/html/Search/Results.tsv | 134 - rt/html/Search/Simple.html | 107 - rt/html/SelfService/Attachment/dhandler | 51 - rt/html/SelfService/Closed.html | 56 - rt/html/SelfService/Create.html | 177 - rt/html/SelfService/CreateTicketInQueue.html | 63 - rt/html/SelfService/Display.html | 235 - rt/html/SelfService/Elements/GotoTicket | 48 - rt/html/SelfService/Elements/Header | 49 - rt/html/SelfService/Elements/MyRequests | 84 - rt/html/SelfService/Elements/Tabs | 113 - rt/html/SelfService/Error.html | 70 - rt/html/SelfService/Prefs.html | 92 - rt/html/SelfService/Update.html | 129 - rt/html/SelfService/index.html | 54 - rt/html/Ticket/Attachment/dhandler | 94 - rt/html/Ticket/Create.html | 406 - rt/html/Ticket/Display.html | 184 - rt/html/Ticket/Elements/AddWatchers | 123 - rt/html/Ticket/Elements/BulkLinks | 77 - rt/html/Ticket/Elements/EditBasics | 117 - rt/html/Ticket/Elements/EditCustomField | 57 - rt/html/Ticket/Elements/EditCustomFields | 110 - rt/html/Ticket/Elements/EditDates | 77 - rt/html/Ticket/Elements/EditPeople | 93 - rt/html/Ticket/Elements/EditWatchers | 81 - rt/html/Ticket/Elements/FindAttachments | 95 - rt/html/Ticket/Elements/LoadTextAttachments | 94 - rt/html/Ticket/Elements/PreviewScrips | 133 - rt/html/Ticket/Elements/Reminders | 168 - rt/html/Ticket/Elements/ShowAttachments | 104 - rt/html/Ticket/Elements/ShowBasics | 85 - rt/html/Ticket/Elements/ShowCustomFields | 51 - rt/html/Ticket/Elements/ShowDates | 86 - rt/html/Ticket/Elements/ShowDependencies | 65 - rt/html/Ticket/Elements/ShowGroupMembers | 63 - rt/html/Ticket/Elements/ShowHistory | 166 - rt/html/Ticket/Elements/ShowMembers | 68 - rt/html/Ticket/Elements/ShowMessageHeaders | 92 - rt/html/Ticket/Elements/ShowMessageStanza | 84 - rt/html/Ticket/Elements/ShowPeople | 68 - rt/html/Ticket/Elements/ShowQueue | 56 - rt/html/Ticket/Elements/ShowRequestor | 89 - rt/html/Ticket/Elements/ShowSummary | 120 - rt/html/Ticket/Elements/ShowTime | 55 - rt/html/Ticket/Elements/ShowTransaction | 197 - rt/html/Ticket/Elements/ShowTransactionAttachments | 215 - rt/html/Ticket/Elements/ShowUserEntry | 61 - rt/html/Ticket/Elements/Tabs | 250 - rt/html/Ticket/History.html | 89 - rt/html/Ticket/Modify.html | 91 - rt/html/Ticket/ModifyAll.html | 225 - rt/html/Ticket/ModifyDates.html | 77 - rt/html/Ticket/ModifyLinks.html | 82 - rt/html/Ticket/ModifyPeople.html | 94 - rt/html/Ticket/Reminders.html | 71 - rt/html/Ticket/ShowEmailRecord.html | 73 - rt/html/Ticket/Update.html | 228 - rt/html/Tools/Elements/Tabs | 84 - rt/html/Tools/MyDay.html | 117 - rt/html/Tools/Offline.html | 166 - rt/html/Tools/Reports/CreatedByDates.html | 94 - rt/html/Tools/Reports/Elements/Tabs | 89 - rt/html/Tools/Reports/ResolvedByDates.html | 95 - rt/html/Tools/Reports/ResolvedByOwner.html | 70 - rt/html/Tools/Reports/index.html | 50 - rt/html/Tools/index.html | 52 - rt/html/User/Delegation.html | 107 - rt/html/User/Elements/DelegateRights | 109 - rt/html/User/Elements/GroupTabs | 84 - rt/html/User/Elements/Tabs | 89 - rt/html/User/Groups/Members.html | 160 - rt/html/User/Groups/Modify.html | 157 - rt/html/User/Groups/index.html | 67 - rt/html/User/Prefs.html | 289 - rt/html/Widgets/ComboBox | 70 - rt/html/Widgets/SavedSearch | 158 - rt/html/Widgets/SelectionBox | 243 - rt/html/Widgets/TitleBox | 54 - rt/html/Widgets/TitleBoxEnd | 59 - rt/html/Widgets/TitleBoxStart | 86 - rt/html/autohandler | 331 - rt/html/index.html | 117 - rt/html/l | 52 - rt/lib/RT.pm | 619 +- rt/lib/RT/Groups_Overlay.pm | 165 +- rt/lib/RT/I18N/no.po | 6563 --------------- rt/lib/RT/I18N/pt_br.po | 6528 --------------- rt/lib/RT/I18N/pt_pt.po | 5194 ------------ rt/lib/RT/I18N/zh_cn.po | 8423 -------------------- rt/lib/RT/I18N/zh_tw.po | 8360 ------------------- rt/lib/RT/Record.pm | 545 +- rt/lib/RT/SearchBuilder.pm | 94 +- rt/lib/RT/Ticket_Overlay.pm | 1412 ++-- rt/lib/RT/Transaction_Overlay.pm | 482 +- rt/lib/RT/User_Overlay.pm | 804 +- rt/lib/RT/Users_Overlay.pm | 84 +- rt/lib/t/00smoke.t | 13 - rt/lib/t/create_data.pl | 136 - rt/lib/t/data/8859-15-message-series/dir | 356 - rt/lib/t/data/8859-15-message-series/msg1 | 36 - rt/lib/t/data/8859-15-message-series/msg2 | 36 - rt/lib/t/data/8859-15-message-series/msg3 | 35 - rt/lib/t/data/8859-15-message-series/msg4 | 35 - rt/lib/t/data/8859-15-message-series/msg5 | 35 - rt/lib/t/data/8859-15-message-series/msg6 | 35 - rt/lib/t/data/8859-15-message-series/msg7 | 36 - rt/lib/t/data/crashes-file-based-parser | 193 - rt/lib/t/data/lorem-ipsum | 5 - rt/lib/t/data/multipart-alternative-with-umlaut | 62 - rt/lib/t/data/multipart-report | 66 - rt/lib/t/data/nested-mime-sample | 396 - rt/lib/t/data/nested-rfc-822 | 253 - rt/lib/t/data/new-ticket-from-iso-8859-1 | 31 - rt/lib/t/data/new-ticket-from-iso-8859-1-full | 38 - rt/lib/t/data/notes-uuencoded | 2368 ------ rt/lib/t/data/rt-send-cc | 5 - rt/lib/t/data/russian-subject-no-content-type | 42 - rt/lib/t/data/subject-with-folding-ws | 10 - rt/lib/t/data/text-html-in-russian | 87 - rt/lib/t/data/text-html-with-umlaut | 35 - rt/lib/t/data/very-long-subject | 12 - rt/lib/t/regression/00-mason-syntax.t | 43 - rt/lib/t/regression/01ticket_link_searching.t | 159 - rt/lib/t/regression/02basic_web.t | 159 - rt/lib/t/regression/03web_compiliation_errors.t | 64 - rt/lib/t/regression/04send_email.t | 549 -- rt/lib/t/regression/05cronsupport.t | 91 - rt/lib/t/regression/06-mime_decoding.t | 64 - rt/lib/t/regression/06mailgateway.t | 663 -- rt/lib/t/regression/07acl.t | 138 - rt/lib/t/regression/07rights.t | 140 - rt/lib/t/regression/08web_cf_access.t | 119 - rt/lib/t/regression/09record_cf_api.t | 204 - rt/lib/t/regression/10merge.t | 72 - rt/lib/t/regression/11-template-insert.t | 27 - rt/lib/t/regression/12-search.t | 281 - rt/lib/t/regression/13-attribute-tests.t | 87 - rt/lib/t/regression/14linking.t | 243 - rt/lib/t/regression/14merge.t | 31 - rt/lib/t/regression/15cf_combo_cascade.t | 49 - rt/lib/t/regression/15cf_pattern.t | 54 - .../t/regression/15cf_single_values_are_single.t | 39 - rt/lib/t/regression/16-transaction_cf_tests.t | 61 - rt/lib/t/regression/17custom_search.t | 88 - rt/lib/t/regression/17multiple_deleg_revocation.t | 135 - rt/lib/t/regression/18custom_frontpage.t | 75 - rt/lib/t/regression/18stale_delegations_cleanup.t | 458 -- rt/lib/t/regression/19-rtname.t | 38 - rt/lib/t/regression/19quicksearch.t | 39 - rt/lib/t/regression/20-sort-by-queue.t | 103 - rt/lib/t/regression/20-sort-by-requestor.t | 143 - rt/lib/t/regression/20-sort-by-user.t | 155 - rt/lib/t/regression/20savedsearch.t | 180 - rt/lib/t/regression/21query-builder.t | 247 - rt/lib/t/regression/22search_tix_by_txn.t | 38 - rt/lib/t/regression/22search_tix_by_watcher.t | 279 - rt/lib/t/regression/23-batch-upload-csv.t | 47 - rt/lib/t/regression/23-web_attachments.t | 60 - rt/lib/t/regression/23cfsort-freeform-multiple.t | 137 - rt/lib/t/regression/23cfsort-freeform-single.t | 191 - rt/lib/t/regression/23cfsort.t | 177 - rt/lib/t/regression/24-watchers.t | 157 - rt/lib/t/regression/24pawsort.t | 104 - rt/lib/t/regression/25scrip_order.t | 57 - rt/lib/t/regression/26command_line.t | 450 -- rt/lib/t/regression/27verp.t | 9 - rt/lib/t/regression/mime_tests | 19 - rt/lib/t/setup_regression.t | 34 - rt/sbin/extract_pod_tests | 159 - rt/sbin/regression_harness | 56 - rt/sbin/rt-setup-database.in | 866 +- 487 files changed, 6038 insertions(+), 87918 deletions(-) delete mode 100644 rt/.gitignore delete mode 100755 rt/etc/schema.mysql delete mode 100644 rt/html/Admin/CustomFields/GroupRights.html delete mode 100644 rt/html/Admin/CustomFields/Modify.html delete mode 100644 rt/html/Admin/CustomFields/Objects.html delete mode 100644 rt/html/Admin/CustomFields/UserRights.html delete mode 100644 rt/html/Admin/CustomFields/index.html delete mode 100644 rt/html/Admin/Elements/AddCustomFieldValue delete mode 100644 rt/html/Admin/Elements/ConfigureMyRT delete mode 100644 rt/html/Admin/Elements/CreateUserCalled delete mode 100644 rt/html/Admin/Elements/CustomFieldTabs delete mode 100644 rt/html/Admin/Elements/EditCustomField delete mode 100644 rt/html/Admin/Elements/EditCustomFieldValues delete mode 100644 rt/html/Admin/Elements/EditCustomFields delete mode 100644 rt/html/Admin/Elements/EditQueueWatchers delete mode 100644 rt/html/Admin/Elements/EditScrip delete mode 100644 rt/html/Admin/Elements/EditScrips delete mode 100644 rt/html/Admin/Elements/EditTemplates delete mode 100644 rt/html/Admin/Elements/EditUserComments delete mode 100755 rt/html/Admin/Elements/GlobalCustomFieldTabs delete mode 100644 rt/html/Admin/Elements/GroupTabs delete mode 100644 rt/html/Admin/Elements/Header delete mode 100644 rt/html/Admin/Elements/ListGlobalCustomFields delete mode 100644 rt/html/Admin/Elements/ListGlobalScrips delete mode 100644 rt/html/Admin/Elements/ModifyTemplate delete mode 100644 rt/html/Admin/Elements/ObjectCustomFields delete mode 100644 rt/html/Admin/Elements/PickCustomFields delete mode 100644 rt/html/Admin/Elements/PickObjects delete mode 100644 rt/html/Admin/Elements/QueueRightsForUser delete mode 100644 rt/html/Admin/Elements/QueueTabs delete mode 100644 rt/html/Admin/Elements/SelectCustomFieldLookupType delete mode 100644 rt/html/Admin/Elements/SelectCustomFieldType delete mode 100644 rt/html/Admin/Elements/SelectGroups delete mode 100644 rt/html/Admin/Elements/SelectModifyGroup delete mode 100644 rt/html/Admin/Elements/SelectModifyQueue delete mode 100644 rt/html/Admin/Elements/SelectModifyUser delete mode 100644 rt/html/Admin/Elements/SelectNewGroupMembers delete mode 100644 rt/html/Admin/Elements/SelectRights delete mode 100644 rt/html/Admin/Elements/SelectScrip delete mode 100644 rt/html/Admin/Elements/SelectScripAction delete mode 100644 rt/html/Admin/Elements/SelectScripCondition delete mode 100644 rt/html/Admin/Elements/SelectSingleOrMultiple delete mode 100644 rt/html/Admin/Elements/SelectStage delete mode 100644 rt/html/Admin/Elements/SelectTemplate delete mode 100644 rt/html/Admin/Elements/SelectUsers delete mode 100644 rt/html/Admin/Elements/SystemTabs delete mode 100644 rt/html/Admin/Elements/Tabs delete mode 100755 rt/html/Admin/Elements/ToolTabs delete mode 100644 rt/html/Admin/Elements/UserTabs delete mode 100644 rt/html/Admin/Global/CustomFields/Groups.html delete mode 100755 rt/html/Admin/Global/CustomFields/Queue-Tickets.html delete mode 100755 rt/html/Admin/Global/CustomFields/Queue-Transactions.html delete mode 100644 rt/html/Admin/Global/CustomFields/Users.html delete mode 100644 rt/html/Admin/Global/CustomFields/index.html delete mode 100644 rt/html/Admin/Global/GroupRights.html delete mode 100644 rt/html/Admin/Global/MyRT.html delete mode 100644 rt/html/Admin/Global/Scrip.html delete mode 100644 rt/html/Admin/Global/Scrips.html delete mode 100644 rt/html/Admin/Global/Template.html delete mode 100644 rt/html/Admin/Global/Templates.html delete mode 100644 rt/html/Admin/Global/UserRights.html delete mode 100644 rt/html/Admin/Global/index.html delete mode 100644 rt/html/Admin/Groups/CustomFields.html delete mode 100644 rt/html/Admin/Groups/GroupRights.html delete mode 100644 rt/html/Admin/Groups/History.html delete mode 100644 rt/html/Admin/Groups/Members.html delete mode 100644 rt/html/Admin/Groups/Modify.html delete mode 100644 rt/html/Admin/Groups/UserRights.html delete mode 100644 rt/html/Admin/Groups/index.html delete mode 100644 rt/html/Admin/Queues/CustomField.html delete mode 100644 rt/html/Admin/Queues/CustomFields.html delete mode 100644 rt/html/Admin/Queues/GroupRights.html delete mode 100644 rt/html/Admin/Queues/Modify.html delete mode 100644 rt/html/Admin/Queues/People.html delete mode 100644 rt/html/Admin/Queues/Scrip.html delete mode 100644 rt/html/Admin/Queues/Scrips.html delete mode 100644 rt/html/Admin/Queues/Template.html delete mode 100644 rt/html/Admin/Queues/Templates.html delete mode 100644 rt/html/Admin/Queues/UserRights.html delete mode 100644 rt/html/Admin/Queues/index.html delete mode 100644 rt/html/Admin/Tools/Configuration.html delete mode 100644 rt/html/Admin/Tools/index.html delete mode 100644 rt/html/Admin/Users/CustomFields.html delete mode 100644 rt/html/Admin/Users/History.html delete mode 100644 rt/html/Admin/Users/Memberships.html delete mode 100644 rt/html/Admin/Users/Modify.html delete mode 100644 rt/html/Admin/Users/MyRT.html delete mode 100644 rt/html/Admin/Users/index.html delete mode 100644 rt/html/Admin/autohandler delete mode 100644 rt/html/Admin/index.html delete mode 100644 rt/html/Approvals/Display.html delete mode 100644 rt/html/Approvals/Elements/Approve delete mode 100644 rt/html/Approvals/Elements/PendingMyApproval delete mode 100644 rt/html/Approvals/Elements/ShowDependency delete mode 100644 rt/html/Approvals/Elements/Tabs delete mode 100644 rt/html/Approvals/index.html delete mode 100644 rt/html/Download/CustomFieldValue/dhandler delete mode 100644 rt/html/Download/Tabular/dhandler delete mode 100644 rt/html/Elements/BevelBoxRaisedEnd delete mode 100644 rt/html/Elements/BevelBoxRaisedStart delete mode 100644 rt/html/Elements/Callback delete mode 100644 rt/html/Elements/Checkbox delete mode 100644 rt/html/Elements/CollectionAsTable/Header delete mode 100644 rt/html/Elements/CollectionAsTable/ParseFormat delete mode 100644 rt/html/Elements/CollectionAsTable/Row delete mode 100644 rt/html/Elements/CreateTicket delete mode 100644 rt/html/Elements/EditCustomField delete mode 100644 rt/html/Elements/EditCustomFieldBinary delete mode 100644 rt/html/Elements/EditCustomFieldCombobox delete mode 100644 rt/html/Elements/EditCustomFieldFreeform delete mode 100644 rt/html/Elements/EditCustomFieldImage delete mode 100644 rt/html/Elements/EditCustomFieldSelect delete mode 100644 rt/html/Elements/EditCustomFieldText delete mode 100644 rt/html/Elements/EditCustomFieldWikitext delete mode 100755 rt/html/Elements/EditLinks delete mode 100644 rt/html/Elements/EmailInput delete mode 100644 rt/html/Elements/Error delete mode 100644 rt/html/Elements/Footer delete mode 100644 rt/html/Elements/GotoTicket delete mode 100644 rt/html/Elements/Header delete mode 100644 rt/html/Elements/ListActions delete mode 100644 rt/html/Elements/Login delete mode 100644 rt/html/Elements/Logo delete mode 100644 rt/html/Elements/Menu delete mode 100644 rt/html/Elements/MessageBox delete mode 100644 rt/html/Elements/MyAdminQueues delete mode 100644 rt/html/Elements/MyRT delete mode 100755 rt/html/Elements/MyReminders delete mode 100644 rt/html/Elements/MyRequests delete mode 100644 rt/html/Elements/MySupportQueues delete mode 100644 rt/html/Elements/MyTickets delete mode 100644 rt/html/Elements/PageLayout delete mode 100644 rt/html/Elements/QueryString delete mode 100644 rt/html/Elements/QueueSummary delete mode 100644 rt/html/Elements/QuickCreate delete mode 100644 rt/html/Elements/Quicksearch delete mode 100644 rt/html/Elements/RT__Ticket/ColumnMap delete mode 100644 rt/html/Elements/Refresh delete mode 100644 rt/html/Elements/RefreshHomepage delete mode 100644 rt/html/Elements/ScrubHTML delete mode 100644 rt/html/Elements/Section delete mode 100644 rt/html/Elements/SelectAttachmentField delete mode 100644 rt/html/Elements/SelectBoolean delete mode 100644 rt/html/Elements/SelectCustomFieldOperator delete mode 100644 rt/html/Elements/SelectCustomFieldValue delete mode 100644 rt/html/Elements/SelectDate delete mode 100644 rt/html/Elements/SelectDateRelation delete mode 100644 rt/html/Elements/SelectDateType delete mode 100644 rt/html/Elements/SelectEqualityOperator delete mode 100644 rt/html/Elements/SelectGroups delete mode 100644 rt/html/Elements/SelectLang delete mode 100644 rt/html/Elements/SelectLinkType delete mode 100644 rt/html/Elements/SelectMatch delete mode 100644 rt/html/Elements/SelectNewTicketQueue delete mode 100644 rt/html/Elements/SelectOwner delete mode 100644 rt/html/Elements/SelectQueue delete mode 100644 rt/html/Elements/SelectResultsPerPage delete mode 100644 rt/html/Elements/SelectSortOrder delete mode 100644 rt/html/Elements/SelectStatus delete mode 100644 rt/html/Elements/SelectTicketSortBy delete mode 100644 rt/html/Elements/SelectTicketTypes delete mode 100755 rt/html/Elements/SelectTimeUnits delete mode 100644 rt/html/Elements/SelectUsers delete mode 100644 rt/html/Elements/SelectWatcherType delete mode 100644 rt/html/Elements/SetupSessionCookie delete mode 100644 rt/html/Elements/ShowCustomFieldBinary delete mode 100644 rt/html/Elements/ShowCustomFieldImage delete mode 100644 rt/html/Elements/ShowCustomFieldWikitext delete mode 100644 rt/html/Elements/ShowCustomFields delete mode 100644 rt/html/Elements/ShowLink delete mode 100755 rt/html/Elements/ShowLinks delete mode 100644 rt/html/Elements/ShowMemberships delete mode 100644 rt/html/Elements/ShowSearch delete mode 100644 rt/html/Elements/SimpleSearch delete mode 100644 rt/html/Elements/Submit delete mode 100644 rt/html/Elements/Tabs delete mode 100644 rt/html/Elements/TicketList delete mode 100644 rt/html/Elements/TitleBox delete mode 100644 rt/html/Elements/TitleBoxEnd delete mode 100644 rt/html/Elements/TitleBoxStart delete mode 100644 rt/html/Elements/ValidateCustomFields delete mode 100644 rt/html/Helpers/CalPopup.html delete mode 100644 rt/html/Helpers/EmailAutocomplete delete mode 100644 rt/html/NoAuth/Logout.html delete mode 100644 rt/html/NoAuth/Reminder.html delete mode 100644 rt/html/NoAuth/css/3.4-compat/body.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/footer.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/forms.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/header.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/login.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/main.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/misc.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/nav.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/quickbar.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/ticket.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/titlebox.css delete mode 100644 rt/html/NoAuth/css/3.4-compat/transactions.css delete mode 100644 rt/html/NoAuth/css/3.5-default/approvals.css delete mode 100755 rt/html/NoAuth/css/3.5-default/body.css delete mode 100644 rt/html/NoAuth/css/3.5-default/footer.css delete mode 100755 rt/html/NoAuth/css/3.5-default/forms.css delete mode 100644 rt/html/NoAuth/css/3.5-default/header.css delete mode 100644 rt/html/NoAuth/css/3.5-default/login.css delete mode 100644 rt/html/NoAuth/css/3.5-default/logo.css delete mode 100644 rt/html/NoAuth/css/3.5-default/main.css delete mode 100755 rt/html/NoAuth/css/3.5-default/misc.css delete mode 100644 rt/html/NoAuth/css/3.5-default/nav.css delete mode 100644 rt/html/NoAuth/css/3.5-default/quickbar.css delete mode 100644 rt/html/NoAuth/css/3.5-default/ticket.css delete mode 100644 rt/html/NoAuth/css/3.5-default/titlebox.css delete mode 100755 rt/html/NoAuth/css/3.5-default/transactions.css delete mode 100644 rt/html/NoAuth/css/autohandler delete mode 100644 rt/html/NoAuth/css/dhandler delete mode 100644 rt/html/NoAuth/css/print.css delete mode 100644 rt/html/NoAuth/images/autohandler delete mode 100644 rt/html/NoAuth/images/bplogo.gif delete mode 100644 rt/html/NoAuth/images/css/cb-light.gif delete mode 100644 rt/html/NoAuth/images/css/cb.gif delete mode 100644 rt/html/NoAuth/images/css/cbr-b2g.gif delete mode 100644 rt/html/NoAuth/images/css/cbr-b2lb.gif delete mode 100644 rt/html/NoAuth/images/css/cbr-gray.gif delete mode 100644 rt/html/NoAuth/images/css/cbr-trans.gif delete mode 100644 rt/html/NoAuth/images/css/cbr.gif delete mode 100644 rt/html/NoAuth/images/css/ct-light.gif delete mode 100644 rt/html/NoAuth/images/css/ct.gif delete mode 100644 rt/html/NoAuth/images/css/ctr-b2g.gif delete mode 100644 rt/html/NoAuth/images/css/ctr-b2lb.gif delete mode 100644 rt/html/NoAuth/images/css/ctr-gray.gif delete mode 100644 rt/html/NoAuth/images/css/ctr-trans.gif delete mode 100644 rt/html/NoAuth/images/css/ctr.gif delete mode 100644 rt/html/NoAuth/images/css/dark-arrow-up.png delete mode 100644 rt/html/NoAuth/images/css/dark-arrow.png delete mode 100644 rt/html/NoAuth/images/css/fieldbg-autocomplete.gif delete mode 100644 rt/html/NoAuth/images/css/light-arrow-up.png delete mode 100644 rt/html/NoAuth/images/css/light-arrow.png delete mode 100644 rt/html/NoAuth/images/css/rolldown-arrow.gif delete mode 100644 rt/html/NoAuth/images/css/rolldown-arrow.png delete mode 100644 rt/html/NoAuth/images/css/rollup-arrow.gif delete mode 100644 rt/html/NoAuth/images/favicon.png delete mode 100644 rt/html/NoAuth/js/ahah.js delete mode 100644 rt/html/NoAuth/js/autohandler delete mode 100644 rt/html/NoAuth/js/cascaded.js delete mode 100644 rt/html/NoAuth/js/class.js delete mode 100644 rt/html/NoAuth/js/combobox.js delete mode 100644 rt/html/NoAuth/js/list.js delete mode 100644 rt/html/NoAuth/js/scriptaculous/controls.js delete mode 100644 rt/html/NoAuth/js/scriptaculous/effects.js delete mode 100644 rt/html/NoAuth/js/scriptaculous/prototype.js delete mode 100644 rt/html/NoAuth/js/scriptaculous/scriptaculous.js delete mode 100644 rt/html/NoAuth/js/titlebox-state.js delete mode 100644 rt/html/NoAuth/js/util.js delete mode 100644 rt/html/Prefs/Elements/Tabs delete mode 100644 rt/html/Prefs/MyRT.html delete mode 100644 rt/html/Prefs/Quicksearch.html delete mode 100644 rt/html/Prefs/Search.html delete mode 100644 rt/html/Prefs/SearchOptions.html delete mode 100644 rt/html/REST/1.0/Forms/queue/default delete mode 100644 rt/html/REST/1.0/Forms/queue/ns delete mode 100644 rt/html/REST/1.0/Forms/ticket/attachments delete mode 100755 rt/html/REST/1.0/Forms/ticket/comment delete mode 100644 rt/html/REST/1.0/Forms/ticket/default delete mode 100644 rt/html/REST/1.0/Forms/ticket/history delete mode 100644 rt/html/REST/1.0/Forms/ticket/links delete mode 100755 rt/html/REST/1.0/Forms/ticket/merge delete mode 100755 rt/html/REST/1.0/Forms/ticket/take delete mode 100644 rt/html/REST/1.0/Forms/transaction/default delete mode 100644 rt/html/REST/1.0/Forms/user/default delete mode 100644 rt/html/REST/1.0/Forms/user/ns delete mode 100644 rt/html/REST/1.0/NoAuth/mail-gateway delete mode 100644 rt/html/REST/1.0/autohandler delete mode 100644 rt/html/REST/1.0/dhandler delete mode 100644 rt/html/REST/1.0/logout delete mode 100644 rt/html/REST/1.0/search/dhandler delete mode 100644 rt/html/REST/1.0/search/ticket delete mode 100644 rt/html/REST/1.0/ticket/comment delete mode 100644 rt/html/REST/1.0/ticket/link delete mode 100644 rt/html/REST/1.0/ticket/merge delete mode 100644 rt/html/Search/Build.html delete mode 100644 rt/html/Search/Bulk.html delete mode 100644 rt/html/Search/Chart delete mode 100644 rt/html/Search/Chart.html delete mode 100755 rt/html/Search/Edit.html delete mode 100644 rt/html/Search/Elements/BuildFormatString delete mode 100644 rt/html/Search/Elements/Chart delete mode 100644 rt/html/Search/Elements/DisplayOptions delete mode 100644 rt/html/Search/Elements/EditFormat delete mode 100644 rt/html/Search/Elements/EditQuery delete mode 100644 rt/html/Search/Elements/EditSearches delete mode 100644 rt/html/Search/Elements/NewListActions delete mode 100644 rt/html/Search/Elements/PickBasics delete mode 100644 rt/html/Search/Elements/PickCFs delete mode 100644 rt/html/Search/Elements/PickCriteria delete mode 100644 rt/html/Search/Elements/SearchPrivacy delete mode 100644 rt/html/Search/Elements/SearchesForObject delete mode 100644 rt/html/Search/Elements/SelectAndOr delete mode 100644 rt/html/Search/Elements/SelectChartType delete mode 100644 rt/html/Search/Elements/SelectGroup delete mode 100644 rt/html/Search/Elements/SelectGroupBy delete mode 100644 rt/html/Search/Elements/SelectLinks delete mode 100644 rt/html/Search/Elements/SelectPersonType delete mode 100644 rt/html/Search/Elements/SelectSearchObject delete mode 100644 rt/html/Search/Elements/SelectSearchesForObjects delete mode 100755 rt/html/Search/Results.html delete mode 100644 rt/html/Search/Results.rdf delete mode 100644 rt/html/Search/Results.tsv delete mode 100644 rt/html/Search/Simple.html delete mode 100644 rt/html/SelfService/Attachment/dhandler delete mode 100644 rt/html/SelfService/Closed.html delete mode 100644 rt/html/SelfService/Create.html delete mode 100755 rt/html/SelfService/CreateTicketInQueue.html delete mode 100644 rt/html/SelfService/Display.html delete mode 100644 rt/html/SelfService/Elements/GotoTicket delete mode 100644 rt/html/SelfService/Elements/Header delete mode 100644 rt/html/SelfService/Elements/MyRequests delete mode 100644 rt/html/SelfService/Elements/Tabs delete mode 100644 rt/html/SelfService/Error.html delete mode 100644 rt/html/SelfService/Prefs.html delete mode 100644 rt/html/SelfService/Update.html delete mode 100644 rt/html/SelfService/index.html delete mode 100644 rt/html/Ticket/Attachment/dhandler delete mode 100644 rt/html/Ticket/Create.html delete mode 100644 rt/html/Ticket/Display.html delete mode 100644 rt/html/Ticket/Elements/AddWatchers delete mode 100644 rt/html/Ticket/Elements/BulkLinks delete mode 100644 rt/html/Ticket/Elements/EditBasics delete mode 100644 rt/html/Ticket/Elements/EditCustomField delete mode 100644 rt/html/Ticket/Elements/EditCustomFields delete mode 100644 rt/html/Ticket/Elements/EditDates delete mode 100644 rt/html/Ticket/Elements/EditPeople delete mode 100644 rt/html/Ticket/Elements/EditWatchers delete mode 100755 rt/html/Ticket/Elements/FindAttachments delete mode 100755 rt/html/Ticket/Elements/LoadTextAttachments delete mode 100755 rt/html/Ticket/Elements/PreviewScrips delete mode 100644 rt/html/Ticket/Elements/Reminders delete mode 100644 rt/html/Ticket/Elements/ShowAttachments delete mode 100644 rt/html/Ticket/Elements/ShowBasics delete mode 100644 rt/html/Ticket/Elements/ShowCustomFields delete mode 100644 rt/html/Ticket/Elements/ShowDates delete mode 100644 rt/html/Ticket/Elements/ShowDependencies delete mode 100644 rt/html/Ticket/Elements/ShowGroupMembers delete mode 100644 rt/html/Ticket/Elements/ShowHistory delete mode 100644 rt/html/Ticket/Elements/ShowMembers delete mode 100644 rt/html/Ticket/Elements/ShowMessageHeaders delete mode 100644 rt/html/Ticket/Elements/ShowMessageStanza delete mode 100644 rt/html/Ticket/Elements/ShowPeople delete mode 100644 rt/html/Ticket/Elements/ShowQueue delete mode 100644 rt/html/Ticket/Elements/ShowRequestor delete mode 100644 rt/html/Ticket/Elements/ShowSummary delete mode 100644 rt/html/Ticket/Elements/ShowTime delete mode 100644 rt/html/Ticket/Elements/ShowTransaction delete mode 100644 rt/html/Ticket/Elements/ShowTransactionAttachments delete mode 100644 rt/html/Ticket/Elements/ShowUserEntry delete mode 100644 rt/html/Ticket/Elements/Tabs delete mode 100644 rt/html/Ticket/History.html delete mode 100644 rt/html/Ticket/Modify.html delete mode 100644 rt/html/Ticket/ModifyAll.html delete mode 100644 rt/html/Ticket/ModifyDates.html delete mode 100644 rt/html/Ticket/ModifyLinks.html delete mode 100644 rt/html/Ticket/ModifyPeople.html delete mode 100755 rt/html/Ticket/Reminders.html delete mode 100644 rt/html/Ticket/ShowEmailRecord.html delete mode 100644 rt/html/Ticket/Update.html delete mode 100644 rt/html/Tools/Elements/Tabs delete mode 100644 rt/html/Tools/MyDay.html delete mode 100644 rt/html/Tools/Offline.html delete mode 100644 rt/html/Tools/Reports/CreatedByDates.html delete mode 100644 rt/html/Tools/Reports/Elements/Tabs delete mode 100644 rt/html/Tools/Reports/ResolvedByDates.html delete mode 100644 rt/html/Tools/Reports/ResolvedByOwner.html delete mode 100644 rt/html/Tools/Reports/index.html delete mode 100644 rt/html/Tools/index.html delete mode 100644 rt/html/User/Delegation.html delete mode 100644 rt/html/User/Elements/DelegateRights delete mode 100644 rt/html/User/Elements/GroupTabs delete mode 100644 rt/html/User/Elements/Tabs delete mode 100644 rt/html/User/Groups/Members.html delete mode 100644 rt/html/User/Groups/Modify.html delete mode 100644 rt/html/User/Groups/index.html delete mode 100644 rt/html/User/Prefs.html delete mode 100644 rt/html/Widgets/ComboBox delete mode 100644 rt/html/Widgets/SavedSearch delete mode 100644 rt/html/Widgets/SelectionBox delete mode 100644 rt/html/Widgets/TitleBox delete mode 100755 rt/html/Widgets/TitleBoxEnd delete mode 100755 rt/html/Widgets/TitleBoxStart delete mode 100644 rt/html/autohandler delete mode 100644 rt/html/index.html delete mode 100644 rt/html/l delete mode 100644 rt/lib/RT/I18N/no.po delete mode 100644 rt/lib/RT/I18N/pt_br.po delete mode 100644 rt/lib/RT/I18N/pt_pt.po delete mode 100644 rt/lib/RT/I18N/zh_cn.po delete mode 100644 rt/lib/RT/I18N/zh_tw.po delete mode 100644 rt/lib/t/00smoke.t delete mode 100644 rt/lib/t/create_data.pl delete mode 100644 rt/lib/t/data/8859-15-message-series/dir delete mode 100644 rt/lib/t/data/8859-15-message-series/msg1 delete mode 100644 rt/lib/t/data/8859-15-message-series/msg2 delete mode 100644 rt/lib/t/data/8859-15-message-series/msg3 delete mode 100644 rt/lib/t/data/8859-15-message-series/msg4 delete mode 100644 rt/lib/t/data/8859-15-message-series/msg5 delete mode 100644 rt/lib/t/data/8859-15-message-series/msg6 delete mode 100644 rt/lib/t/data/8859-15-message-series/msg7 delete mode 100644 rt/lib/t/data/crashes-file-based-parser delete mode 100644 rt/lib/t/data/lorem-ipsum delete mode 100644 rt/lib/t/data/multipart-alternative-with-umlaut delete mode 100644 rt/lib/t/data/multipart-report delete mode 100644 rt/lib/t/data/nested-mime-sample delete mode 100644 rt/lib/t/data/nested-rfc-822 delete mode 100644 rt/lib/t/data/new-ticket-from-iso-8859-1 delete mode 100644 rt/lib/t/data/new-ticket-from-iso-8859-1-full delete mode 100644 rt/lib/t/data/notes-uuencoded delete mode 100644 rt/lib/t/data/rt-send-cc delete mode 100644 rt/lib/t/data/russian-subject-no-content-type delete mode 100644 rt/lib/t/data/subject-with-folding-ws delete mode 100644 rt/lib/t/data/text-html-in-russian delete mode 100644 rt/lib/t/data/text-html-with-umlaut delete mode 100644 rt/lib/t/data/very-long-subject delete mode 100644 rt/lib/t/regression/00-mason-syntax.t delete mode 100644 rt/lib/t/regression/01ticket_link_searching.t delete mode 100644 rt/lib/t/regression/02basic_web.t delete mode 100644 rt/lib/t/regression/03web_compiliation_errors.t delete mode 100644 rt/lib/t/regression/04send_email.t delete mode 100644 rt/lib/t/regression/05cronsupport.t delete mode 100644 rt/lib/t/regression/06-mime_decoding.t delete mode 100644 rt/lib/t/regression/06mailgateway.t delete mode 100644 rt/lib/t/regression/07acl.t delete mode 100644 rt/lib/t/regression/07rights.t delete mode 100644 rt/lib/t/regression/08web_cf_access.t delete mode 100644 rt/lib/t/regression/09record_cf_api.t delete mode 100644 rt/lib/t/regression/10merge.t delete mode 100644 rt/lib/t/regression/11-template-insert.t delete mode 100644 rt/lib/t/regression/12-search.t delete mode 100644 rt/lib/t/regression/13-attribute-tests.t delete mode 100644 rt/lib/t/regression/14linking.t delete mode 100644 rt/lib/t/regression/14merge.t delete mode 100644 rt/lib/t/regression/15cf_combo_cascade.t delete mode 100644 rt/lib/t/regression/15cf_pattern.t delete mode 100644 rt/lib/t/regression/15cf_single_values_are_single.t delete mode 100644 rt/lib/t/regression/16-transaction_cf_tests.t delete mode 100644 rt/lib/t/regression/17custom_search.t delete mode 100644 rt/lib/t/regression/17multiple_deleg_revocation.t delete mode 100644 rt/lib/t/regression/18custom_frontpage.t delete mode 100644 rt/lib/t/regression/18stale_delegations_cleanup.t delete mode 100644 rt/lib/t/regression/19-rtname.t delete mode 100644 rt/lib/t/regression/19quicksearch.t delete mode 100644 rt/lib/t/regression/20-sort-by-queue.t delete mode 100644 rt/lib/t/regression/20-sort-by-requestor.t delete mode 100644 rt/lib/t/regression/20-sort-by-user.t delete mode 100644 rt/lib/t/regression/20savedsearch.t delete mode 100644 rt/lib/t/regression/21query-builder.t delete mode 100644 rt/lib/t/regression/22search_tix_by_txn.t delete mode 100644 rt/lib/t/regression/22search_tix_by_watcher.t delete mode 100644 rt/lib/t/regression/23-batch-upload-csv.t delete mode 100644 rt/lib/t/regression/23-web_attachments.t delete mode 100644 rt/lib/t/regression/23cfsort-freeform-multiple.t delete mode 100644 rt/lib/t/regression/23cfsort-freeform-single.t delete mode 100644 rt/lib/t/regression/23cfsort.t delete mode 100644 rt/lib/t/regression/24-watchers.t delete mode 100644 rt/lib/t/regression/24pawsort.t delete mode 100644 rt/lib/t/regression/25scrip_order.t delete mode 100644 rt/lib/t/regression/26command_line.t delete mode 100644 rt/lib/t/regression/27verp.t delete mode 100644 rt/lib/t/regression/mime_tests delete mode 100644 rt/lib/t/setup_regression.t delete mode 100644 rt/sbin/extract_pod_tests delete mode 100644 rt/sbin/regression_harness 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/Makefile b/rt/Makefile index 580721231..01a883819 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -51,19 +51,22 @@ # -PERL = /usr/bin/perl +PERL = /usr/bin/perl +INSTALL = install-sh + +RT_LAYOUT = relative CONFIG_FILE_PATH = /opt/rt3/etc -CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm -SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm +CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm +SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm RT_VERSION_MAJOR = 3 -RT_VERSION_MINOR = 6 -RT_VERSION_PATCH = 10 +RT_VERSION_MINOR = 8 +RT_VERSION_PATCH = 7 -RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH) -TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH) +RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH) +TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH) # This is the group that all of the installed files will be chgrp'ed to. @@ -88,11 +91,13 @@ APACHECTL = # {{{ Files and directories # DESTDIR allows you to specify that RT be installed somewhere other than -# where it will eventually reside +# where it will eventually reside. DESTDIR _must_ have a trailing slash +# if it's defined. DESTDIR = + RT_PATH = /opt/rt3 RT_ETC_PATH = /opt/rt3/etc RT_BIN_PATH = /opt/rt3/bin @@ -102,6 +107,7 @@ RT_MAN_PATH = /opt/rt3/man RT_VAR_PATH = /opt/rt3/var RT_DOC_PATH = /opt/rt3/share/doc RT_LOCAL_PATH = /opt/rt3/local +LOCAL_PLUGIN_PATH = /opt/rt3/local/plugins LOCAL_ETC_PATH = /opt/rt3/local/etc LOCAL_LIB_PATH = /opt/rt3/local/lib LOCAL_LEXICON_PATH = /opt/rt3/local/po @@ -109,7 +115,7 @@ MASON_HTML_PATH = /var/www/freeside/rt MASON_LOCAL_HTML_PATH = /opt/rt3/local/html MASON_DATA_PATH = /usr/local/etc/freeside/masondata MASON_SESSION_PATH = /opt/rt3/var/session_data -RT_LOG_PATH = /opt/rt3/var/log +RT_LOG_PATH = /opt/rt3/var/log # RT_READABLE_DIR_MODE is the mode of directories that are generally meant # to be accessable @@ -121,34 +127,69 @@ RT_READABLE_DIR_MODE = 0755 # {{{ all these define the places that RT's binaries should get installed # RT_MODPERL_HANDLER is the mason handler script for mod_perl -RT_MODPERL_HANDLER = $(RT_BIN_PATH)/webmux.pl +RT_MODPERL_HANDLER = webmux.pl # RT_STANDALONE_SERVER is a stand-alone HTTP server -RT_STANDALONE_SERVER = $(RT_BIN_PATH)/standalone_httpd +RT_STANDALONE_SERVER = standalone_httpd # RT_SPEEDYCGI_HANDLER is the mason handler script for SpeedyCGI -RT_SPEEDYCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.scgi +RT_SPEEDYCGI_HANDLER = mason_handler.scgi # RT_FASTCGI_HANDLER is the mason handler script for FastCGI -RT_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.fcgi +RT_FASTCGI_HANDLER = mason_handler.fcgi # RT_WIN32_FASTCGI_HANDLER is the mason handler script for FastCGI -RT_WIN32_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.svc +RT_WIN32_FASTCGI_HANDLER = mason_handler.svc # RT's CLI -RT_CLI_BIN = $(RT_BIN_PATH)/rt +RT_CLI_BIN = rt # RT's mail gateway -RT_MAILGATE_BIN = $(RT_BIN_PATH)/rt-mailgate +RT_MAILGATE_BIN = rt-mailgate # RT's cron tool -RT_CRON_BIN = $(RT_BIN_PATH)/rt-crontool +RT_CRON_BIN = rt-crontool # }}} -BINARIES = $(DESTDIR)/$(RT_MODPERL_HANDLER) \ - $(DESTDIR)/$(RT_MAILGATE_BIN) \ - $(DESTDIR)/$(RT_CLI_BIN) \ - $(DESTDIR)/$(RT_CRON_BIN) \ - $(DESTDIR)/$(RT_STANDALONE_SERVER) \ - $(DESTDIR)/$(RT_SPEEDYCGI_HANDLER) \ - $(DESTDIR)/$(RT_FASTCGI_HANDLER) \ - $(DESTDIR)/$(RT_WIN32_FASTCGI_HANDLER) -SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/ +BINARIES = $(RT_MODPERL_HANDLER) \ + $(RT_MAILGATE_BIN) \ + $(RT_CLI_BIN) \ + $(RT_CRON_BIN) \ + $(RT_STANDALONE_SERVER) \ + $(RT_SPEEDYCGI_HANDLER) \ + $(RT_FASTCGI_HANDLER) \ + $(RT_WIN32_FASTCGI_HANDLER) + + + + + +SYSTEM_BINARIES = rt-dump-database \ + rt-setup-database \ + rt-email-digest \ + rt-email-dashboards \ + rt-email-group-admin \ + rt-server \ + rt-test-dependencies \ + rt-clean-sessions \ + rt-shredder \ + rt-validator + + +ETC_FILES = acl.Informix \ + acl.Pg \ + acl.Oracle \ + acl.mysql \ + acl.Sybase \ + schema.Informix \ + schema.Pg \ + schema.Oracle \ + schema.mysql-4.0 \ + schema.mysql-4.1 \ + schema.Sybase \ + schema.SQLite \ + initialdata + +# }}} + +# {{{ Web frontend + +WEB_HANDLER = standalone # }}} @@ -205,18 +246,21 @@ DB_RT_PASS = # }}} +TEST_FILES = t/*.t t/*/*.t +TEST_VERBOSE = 0 + + #################################################################### all: default default: - @echo "Please read RT's readme before installing. Not doing so could" - @echo "be dangerous." + @echo "Please read RT's README before beginning your installation." instruct: - @echo "Congratulations. RT has been installed. " + @echo "Congratulations. RT is now installed." @echo "" @echo "" @echo "You must now configure RT by editing $(SITE_CONFIG_FILE)." @@ -230,244 +274,214 @@ instruct: @echo "After that, you need to initialize RT's database by running" @echo " 'make initialize-database'" -# @echo " or by executing " -# @echo " '$(RT_SBIN_PATH)/rt-setup-database --action init \ " -# @echo " --dba $(DB_DBA) --prompt-for-dba-password'" - - upgrade-instruct: - @echo "Congratulations. RT has been upgraded. You should now check-over" + @echo "Congratulations. RT has been upgraded. You should now check over" @echo "$(CONFIG_FILE) for any necessary site customization. Additionally," @echo "you should update RT's system database objects by running " - @echo " ls etc/upgrade" - @echo "" - @echo "For each item in that directory whose name is greater than" - @echo "your previously installed RT version, run:" - @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action schema --datadir etc/upgrade/" - @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action acl --datadir etc/upgrade/" - @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action insert --datadir etc/upgrade/" + @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action upgrade" -upgrade: config-install dirs files-install fixperms upgrade-instruct +upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct -upgrade-noclobber: config-install libs-install html-install bin-install local-install doc-install fixperms +upgrade-noclobber: config-install dirs libs-install html-install bin-install local-install doc-install fixperms # {{{ dependencies + +my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"') testdeps: - $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) + $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers) depends: fixdeps fixdeps: - $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) + $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers) #}}} # {{{ fixperms fixperms: # Make the libraries readable - chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_PATH) - chown -R $(LIBS_OWNER) $(DESTDIR)/$(RT_LIB_PATH) - chgrp -R $(LIBS_GROUP) $(DESTDIR)/$(RT_LIB_PATH) - chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(RT_LIB_PATH) + chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH) + chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH) + chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH) + chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH) - chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_BIN_PATH) - chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)/$(RT_BIN_PATH) + chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH) - chmod 0755 $(DESTDIR)/$(RT_ETC_PATH) - chmod 0500 $(DESTDIR)/$(RT_ETC_PATH)/* + chmod 0755 $(DESTDIR)$(RT_ETC_PATH) + cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES) #TODO: the config file should probably be able to have its # owner set separately from the binaries. - chown -R $(BIN_OWNER) $(DESTDIR)/$(RT_ETC_PATH) - chgrp -R $(RTGROUP) $(DESTDIR)/$(RT_ETC_PATH) + chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH) + chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH) + + chmod 0440 $(DESTDIR)$(CONFIG_FILE) + chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE) - chmod 0550 $(DESTDIR)/$(CONFIG_FILE) - chmod 0550 $(DESTDIR)/$(SITE_CONFIG_FILE) + # Make the system binaries + cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES); chgrp $(RTGROUP) $(BINARIES)) - # Make the interfaces executable - chown $(BIN_OWNER) $(BINARIES) - chgrp $(RTGROUP) $(BINARIES) - chmod 0755 $(BINARIES) + # Make the system binaries executable also + cd $(DESTDIR)$(RT_SBIN_PATH) && ( chmod 0755 $(SYSTEM_BINARIES) ; chown $(BIN_OWNER) $(SYSTEM_BINARIES); chgrp $(RTGROUP) $(SYSTEM_BINARIES)) # Make the web ui readable by all. - chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(MASON_HTML_PATH) \ - $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) \ - $(DESTDIR)/$(LOCAL_LEXICON_PATH) - chown -R $(LIBS_OWNER) $(DESTDIR)/$(MASON_HTML_PATH) \ - $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) - chgrp -R $(LIBS_GROUP) $(DESTDIR)/$(MASON_HTML_PATH) \ - $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) + chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \ + $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ + $(DESTDIR)$(LOCAL_LEXICON_PATH) + chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \ + $(DESTDIR)$(MASON_LOCAL_HTML_PATH) + chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \ + $(DESTDIR)$(MASON_LOCAL_HTML_PATH) # Make the web ui's data dir writable - chmod 0770 $(DESTDIR)/$(MASON_DATA_PATH) \ - $(DESTDIR)/$(MASON_SESSION_PATH) - chown -R $(WEB_USER) $(DESTDIR)/$(MASON_DATA_PATH) \ - $(DESTDIR)/$(MASON_SESSION_PATH) - chgrp -R $(WEB_GROUP) $(DESTDIR)/$(MASON_DATA_PATH) \ - $(DESTDIR)/$(MASON_SESSION_PATH) + chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \ + $(DESTDIR)$(MASON_SESSION_PATH) + chown -R $(WEB_USER) $(DESTDIR)$(MASON_DATA_PATH) \ + $(DESTDIR)$(MASON_SESSION_PATH) + chgrp -R $(WEB_GROUP) $(DESTDIR)$(MASON_DATA_PATH) \ + $(DESTDIR)$(MASON_SESSION_PATH) # }}} # {{{ dirs dirs: - mkdir -p $(DESTDIR)/$(RT_LOG_PATH) - mkdir -p $(DESTDIR)/$(MASON_DATA_PATH) - mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/cache - mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/etc - mkdir -p $(DESTDIR)/$(MASON_DATA_PATH)/obj - mkdir -p $(DESTDIR)/$(MASON_SESSION_PATH) - mkdir -p $(DESTDIR)/$(MASON_HTML_PATH) - mkdir -p $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) - mkdir -p $(DESTDIR)/$(LOCAL_ETC_PATH) - mkdir -p $(DESTDIR)/$(LOCAL_LIB_PATH) - mkdir -p $(DESTDIR)/$(LOCAL_LEXICON_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH) + $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH) + $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache + $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc + $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj + $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH) # }}} -install: config-install dirs files-install fixperms instruct +install: testdeps config-install dirs files-install fixperms instruct -files-install: libs-install etc-install bin-install sbin-install html-install local-install doc-install +files-install: libs-install etc-install config-install bin-install sbin-install html-install local-install doc-install config-install: - mkdir -p $(DESTDIR)/$(CONFIG_FILE_PATH) - -cp etc/RT_Config.pm $(DESTDIR)/$(CONFIG_FILE) - [ -f $(DESTDIR)/$(SITE_CONFIG_FILE) ] || cp etc/RT_SiteConfig.pm $(DESTDIR)/$(SITE_CONFIG_FILE) - - chgrp $(RTGROUP) $(DESTDIR)/$(CONFIG_FILE) - chown $(BIN_OWNER) $(DESTDIR)/$(CONFIG_FILE) - - chgrp $(RTGROUP) $(DESTDIR)/$(SITE_CONFIG_FILE) - chown $(BIN_OWNER) $(DESTDIR)/$(SITE_CONFIG_FILE) - - @echo "Installed configuration. about to install rt in $(RT_PATH)" + $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH) + -$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE) + [ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE) + @echo "Installed configuration. About to install RT in $(RT_PATH)" test: - $(PERL) -Ilib lib/t/00smoke.t - -regression-install: config-install - $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)/$(CONFIG_FILE) + $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES) -regression: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms apachectl run-regression +parallel-test: test-parallel -run-regression: - prove -Ilib lib/t/setup_regression.t lib/t/autogen/ lib/t/regression/ - - -regression-noapache: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms start-httpd run-regression - -regression-quiet: - $(PERL) sbin/regression_harness - -regression-instruct: - @echo "About to wipe your database for a regression test. ABORT NOW with Control-C" +test-parallel: + RT_TEST_PARALLEL=1 HARNESS_OPTIONS="j4" $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES) +regression-install: config-install + $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)$(CONFIG_FILE) # {{{ database-installation -regression-reset-db: - $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force - $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --dba-password '' +regression-reset-db: force-dropdb + $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba $(DB_DBA) --dba-password '' initdb :: initialize-database initialize-database: - $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password + $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password dropdb: - $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --prompt-for-dba-password + $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba $(DB_DBA) --prompt-for-dba-password + +force-dropdb: + $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force -insert-approval-data: - $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/insert_approval_scrips # }}} # {{{ libs-install libs-install: - [ -d $(DESTDIR)/$(RT_LIB_PATH) ] || mkdir -p $(DESTDIR)/$(RT_LIB_PATH) - -cp -rp lib/* $(DESTDIR)/$(RT_LIB_PATH) + [ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH) + -( cd lib && find . -type d -print ) | while read dir ; do \ + $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \ + done + -( cd lib && find . -type f -print ) | while read file ; do \ + $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \ + done # }}} # {{{ html-install html-install: - [ -d $(DESTDIR)/$(MASON_HTML_PATH) ] || mkdir -p $(DESTDIR)/$(MASON_HTML_PATH) - -cp -rp ./html/* $(DESTDIR)/$(MASON_HTML_PATH) + [ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) + -( cd share/html && find . -type d -print ) | while read dir ; do \ + $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \ + done + -( cd share/html && find . -type f -print ) | while read file ; do \ + $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \ + done # }}} # {{{ doc-install doc-install: # RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir - -[ -f $(DESTDIR)/$(RT_DOC_PATH) ] && rm $(DESTDIR)/$(RT_DOC_PATH) - [ -d $(DESTDIR)/$(RT_DOC_PATH) ] || mkdir -p $(DESTDIR)/$(RT_DOC_PATH) - -cp -rp ./README $(DESTDIR)/$(RT_DOC_PATH) + -[ -f $(DESTDIR)$(RT_DOC_PATH) ] && rm $(DESTDIR)$(RT_DOC_PATH) + [ -d $(DESTDIR)$(RT_DOC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH) + -$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/ # }}} # {{{ etc-install etc-install: - mkdir -p $(DESTDIR)/$(RT_ETC_PATH) - -cp -rp \ - etc/acl.* \ - etc/initialdata \ - etc/schema.* \ - $(DESTDIR)/$(RT_ETC_PATH) + [ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH) + for file in $(ETC_FILES) ; do \ + $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \ + done # }}} # {{{ sbin-install sbin-install: - mkdir -p $(DESTDIR)/$(RT_SBIN_PATH) - chmod +x \ - sbin/rt-dump-database \ - sbin/rt-setup-database \ - sbin/rt-test-dependencies - -cp -rp \ - sbin/rt-dump-database \ - sbin/rt-setup-database \ - sbin/rt-test-dependencies \ - $(DESTDIR)/$(RT_SBIN_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH) + for file in $(SYSTEM_BINARIES) ; do \ + $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \ + done # }}} # {{{ bin-install bin-install: - mkdir -p $(DESTDIR)/$(RT_BIN_PATH) - chmod +x bin/rt-mailgate \ - bin/rt-crontool - -cp -rp \ - bin/rt-mailgate \ - bin/mason_handler.fcgi \ - bin/mason_handler.scgi \ - bin/standalone_httpd \ - bin/mason_handler.svc \ - bin/rt \ - bin/webmux.pl \ - bin/rt-crontool \ - $(DESTDIR)/$(RT_BIN_PATH) -# }}} + $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH) + for file in $(BINARIES) ; do \ + $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \ + done # {{{ local-install local-install: - -cp -rp ./local/html/* $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) - -cp -rp ./local/po/* $(DESTDIR)/$(LOCAL_LEXICON_PATH) - -cp -rp ./local/etc/* $(DESTDIR)/$(LOCAL_ETC_PATH) + -( cd local/html && find . -type d -print ) | while read dir ; do \ + $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_LOCAL_HTML_PATH)/$$dir" ; \ + done + -( cd local/html && find . -type f -print ) | while read file ; do \ + $(INSTALL) -m 0644 "local/html/$$file" "$(DESTDIR)$(MASON_LOCAL_HTML_PATH)/$$file" ; \ + done + -( cd local/po && find . -type d -print ) | while read dir ; do \ + $(INSTALL) -m 0755 -d "$(DESTDIR)$(LOCAL_LEXICON_PATH)/$$dir" ; \ + done + -( cd local/po && find . -type f -print ) | while read file ; do \ + $(INSTALL) -m 0644 "local/po/$$file" "$(DESTDIR)$(LOCAL_LEXICON_PATH)/$$file" ; \ + done + -( cd local/etc && find . -type d -print ) | while read dir ; do \ + $(INSTALL) -m 0755 -d "$(DESTDIR)$(LOCAL_ETC_PATH)/$$dir" ; \ + done + -( cd local/etc && find . -type f -print ) | while read file ; do \ + $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(LOCAL_ETC_PATH)/$$file" ; \ + done # }}} # {{{ Best Practical Build targets -- no user servicable parts inside - -POD2TEST_EXE = sbin/extract_pod_tests - -testify-pods: - [ -d lib/t/autogen ] || mkdir lib/t/autogen - find lib -name \*pm |grep -v .svn | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE) - find bin -type f |grep -v .svn | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE) - find lib -name \*pm |grep -v .svn | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE) - find bin -type f |grep -v .svn | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE) - - - regenerate-catalogs: $(PERL) sbin/extract-message-catalog @@ -486,9 +500,20 @@ reconfigure: start-httpd: $(PERL) bin/standalone_httpd & +start-server: + $(PERL) sbin/rt-server & + apachectl: $(APACHECTL) stop sleep 10 $(APACHECTL) start sleep 5 + +SNAPSHOT=$(shell git describe --tags) +snapshot: + git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf - + ( cd $(SNAPSHOT) && autoconf && ./configure ) + tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/" + rm -fr "$(SNAPSHOT)/" + # }}} diff --git a/rt/bin/mason_handler.fcgi b/rt/bin/mason_handler.fcgi index 38f590124..8092455c1 100755 --- a/rt/bin/mason_handler.fcgi +++ b/rt/bin/mason_handler.fcgi @@ -2,8 +2,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -51,12 +51,17 @@ package RT::Mason; use strict; use vars '$Handler'; use File::Basename; -require ('/opt/rt3/bin/webmux.pl'); + +require (dirname(__FILE__) . '/webmux.pl'); # Enter CGI::Fast mode, which should also work as a vanilla CGI script. require CGI::Fast; RT::Init(); +$Handler ||= RT::Interface::Web::Handler->new( + RT->Config->Get('MasonParameters') +); + while ( my $cgi = CGI::Fast->new ) { # the whole point of fastcgi requires the env to get reset here.. @@ -67,7 +72,7 @@ while ( my $cgi = CGI::Fast->new ) { $ENV{'ENV'} = '' if defined $ENV{'ENV'}; $ENV{'IFS'} = '' if defined $ENV{'IFS'}; - Module::Refresh->refresh if $RT::DevelMode; + Module::Refresh->refresh if RT->Config->Get('DevelMode'); RT::ConnectToDatabase(); if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) ) diff --git a/rt/bin/mason_handler.scgi b/rt/bin/mason_handler.scgi index faff8a5db..105086681 100755 --- a/rt/bin/mason_handler.scgi +++ b/rt/bin/mason_handler.scgi @@ -2,8 +2,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -50,11 +50,17 @@ package RT::Mason; use strict; use vars '$Handler'; -require ('/opt/rt3/bin/webmux.pl'); +use File::Basename; + +require (dirname(__FILE__) . '/webmux.pl'); require CGI; RT::Init(); +$Handler ||= RT::Interface::Web::Handler->new( + RT->Config->Get('MasonParameters') +); + my $cgi = CGI->new; if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) ) diff --git a/rt/bin/mason_handler.svc b/rt/bin/mason_handler.svc index fc97da9b9..4276b6ea1 100644 --- a/rt/bin/mason_handler.svc +++ b/rt/bin/mason_handler.svc @@ -2,8 +2,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -111,7 +111,7 @@ BEGIN { $Win32::TieRegistry::Registry->{ 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\\'. 'W3SVC\Parameters\Virtual Roots\\' - }->{$RT::WebPath || '/'} = "$path,,205"; + }->{RT->Config->Get('WebPath') || '/'} = "$path,,205"; $Win32::TieRegistry::Registry->{ 'HKEY_LOCAL_MACHINE\Software\FASTCGI\.html\\' @@ -225,13 +225,18 @@ warn "Begin listening on $ENV{'FCGI_SOCKET_PATH'}\n"; require CGI::Fast; RT::Init(); +$Handler ||= RT::Interface::Web::Handler->new( + RT->Config->Get('MasonParameters') +); + # Response loop while( my $cgi = CGI::Fast->new ) { my $comp = $ENV{'PATH_INFO'}; $comp = $1 if ($comp =~ /^(.*)$/); - $comp =~ s|^$RT::WebPath\b||i; + my $web_path = RT->Config->Get('WebPath'); + $comp =~ s|^\Q$web_path\E\b||i; $comp .= "index.html" if ($comp =~ /\/$/); $comp =~ s/.pl$/.html/g; diff --git a/rt/bin/rt-crontool b/rt/bin/rt-crontool index 8fcd63111..13c11bfd7 100644 --- a/rt/bin/rt-crontool +++ b/rt/bin/rt-crontool @@ -2,8 +2,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,9 +49,32 @@ use strict; use Carp; -use lib ("/opt/rt3/local/lib", "/opt/rt3/lib"); +# fix lib paths, some may be relative +BEGIN { + require File::Spec; + my @libs = ("lib", "local/lib"); + my $bin_path; + + for my $lib (@libs) { + unless ( File::Spec->file_name_is_absolute($lib) ) { + unless ($bin_path) { + if ( File::Spec->file_name_is_absolute(__FILE__) ) { + $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; + } + else { + require FindBin; + no warnings "once"; + $bin_path = $FindBin::Bin; + } + } + $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); + } + unshift @INC, $lib; + } -package RT; +} + +use RT; use Getopt::Long; @@ -62,54 +85,66 @@ use RT::Template; #Clean out all the nasties from the environment CleanEnv(); +my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg, + $template, $template_id, $transaction, $transaction_type, $help, $log, $verbose ); +GetOptions( + "search=s" => \$search, + "search-arg=s" => \$search_arg, + "condition=s" => \$condition, + "condition-arg=s" => \$condition_arg, + "action-arg=s" => \$action_arg, + "action=s" => \$action, + "template=s" => \$template, + "template-id=s" => \$template_id, + "transaction=s" => \$transaction, + "transaction-type=s" => \$transaction_type, + "log=s" => \$log, + "verbose|v" => \$verbose, + "help" => \$help, +); + # Load the config file RT::LoadConfig(); +# adjust logging to the screen according to options +RT->Config->Set( LogToScreen => $log ) if $log; + #Connect to the database and get RT::SystemUser and RT::Nobody loaded RT::Init(); #Get the current user all loaded my $CurrentUser = GetCurrentUser(); +# show help even if there is no current user +help() if $help; + unless ( $CurrentUser->Id ) { print loc("No RT user found. Please consult your RT administrator.\n"); exit(1); } -my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg, - $template_id, $transaction, $transaction_type, $help, $verbose ); -GetOptions( "search=s" => \$search, - "search-arg=s" => \$search_arg, - "condition=s" => \$condition, - "condition-arg=s" => \$condition_arg, - "action-arg=s" => \$action_arg, - "action=s" => \$action, - "template-id=s" => \$template_id, - "transaction=s" => \$transaction, - "transaction-type=s" => \$transaction_type, - "help" => \$help, - "verbose|v" => \$verbose ); - -help() if $help or not $search or not $action; - -$transaction ||= 'first'; -unless ( $transaction =~ /^(first|last)$/i ) { - print STDERR loc("--transaction argument could be only 'first' or 'last'"); +help() unless $search && $action; + +$transaction = lc( $transaction||'' ); +if ( $transaction && $transaction !~ /^(first|all|last)$/i ) { + print STDERR loc("--transaction argument could be only 'first', 'last' or 'all'"); + exit 1; +} + +if ( $template && $template_id ) { + print STDERR loc("--template-id is deprecated argument and can not be used with --template"); exit 1; } -$transaction = lc($transaction) eq 'first'? 'ASC': 'DESC'; +elsif ( $template_id ) { +# don't warn + $template = $template_id; +} # We _must_ have a search object load_module($search); load_module($action) if ($action); load_module($condition) if ($condition); -# load template if specified -my $template_obj; -if ($template_id) { - $template_obj = RT::Template->new($CurrentUser); - $template_obj->Load($template_id); -} my $void_scrip = RT::Scrip->new( $CurrentUser ); my $void_scrip_action = RT::ScripAction->new( $CurrentUser ); @@ -132,9 +167,31 @@ my $tickets = $search->TicketsObj; while ( my $ticket = $tickets->Next() ) { print $ticket->Id() . ": " if ($verbose); - my $transaction = get_transaction($ticket); - print loc("Using transaction #[_1]...", $transaction->id) - if $verbose && $transaction; + my $template_obj = get_template( $ticket ); + + if ( $transaction ) { + my $txns = get_transactions($ticket); + my $found = 0; + while ( my $txn = $txns->Next ) { + print loc("Using transaction #[_1]...", $txn->id) + if $verbose; + process($ticket, $txn, $template_obj); + $found = 1; + } + print loc("Couldn't find suitable transaction, skipping") + if $verbose && !$found; + } else { + print loc("Processing without transaction, some conditions and actions may fail. Consider using --transaction argument") + if $verbose; + + process($ticket, undef, $template_obj); + } +} + +sub process { + my $ticket = shift; + my $transaction = shift; + my $template_obj = shift; # perform some more advanced check if ($condition) { @@ -149,8 +206,8 @@ while ( my $ticket = $tickets->Next() ) { # if the condition doesn't apply, get out of here - next unless ( $condition_obj->IsApplicable ); - print loc("Condition matches...") if ($verbose); + return unless $condition_obj->IsApplicable; + print loc("Condition matches...") if $verbose; } #prepare our action @@ -165,34 +222,76 @@ while ( my $ticket = $tickets->Next() ) { ); #if our preparation, move onto the next ticket - next unless ( $action_obj->Prepare ); - print loc("Action prepared...") if ($verbose); + return unless $action_obj->Prepare; + print loc("Action prepared...") if $verbose; #commit our action. - next unless ( $action_obj->Commit ); - print loc("Action committed.\n") if ($verbose); + return unless $action_obj->Commit; + print loc("Action committed.\n") if $verbose; } -=head2 get_transaction +=head2 get_transactions -Takes ticket and returns its transaction acording to command -line arguments C<--transaction> and <--transaction-type>. +Takes ticket and returns L object with transactions +of the ticket according to command line arguments C<--transaction> +and <--transaction-type>. =cut -sub get_transaction { +sub get_transactions { my $ticket = shift; my $txns = $ticket->Transactions; + my $order = $transaction eq 'last'? 'DESC': 'ASC'; $txns->OrderByCols( - { FIELD => 'Created', ORDER => $transaction }, - { FIELD => 'id', ORDER => $transaction }, + { FIELD => 'Created', ORDER => $order }, + { FIELD => 'id', ORDER => $order }, ); - $txns->Limit( FIELD => 'Type', VALUE => $transaction_type ) - if $transaction_type; - $txns->RowsPerPage(1); - return $txns->First; + if ( $transaction_type ) { + $transaction_type =~ s/^\s+//; + $transaction_type =~ s/\s+$//; + foreach my $type ( split /\s*,\s*/, $transaction_type ) { + $txns->Limit( FIELD => 'Type', VALUE => $type, ENTRYAGGREGATOR => 'OR' ); + } + } + $txns->RowsPerPage(1) unless $transaction eq 'all'; + return $txns; } +=head2 get_template + +Takes a ticket and returns a template according to command line options. + +=cut + +{ my $cache = undef; +sub get_template { + my $ticket = shift; + return undef unless $template; + + unless ( $template =~ /\D/ ) { + # by id + return $cache if $cache; + + my $cache = RT::Template->new( $RT::SystemUser ); + $cache->Load( $template ); + die "Failed to load template '$template'" + unless $cache->id; + return $cache; + } + + my $queue = $ticket->Queue; + return $cache->{ $queue } if $cache->{ $queue }; + + my $res = RT::Template->new( $RT::SystemUser ); + $res->LoadQueueTemplate( Queue => $queue, Name => $template ); + unless ( $res->id ) { + $res->LoadGlobalTemplate( $template ); + die "Failed to load template '$template', either for queue #$queue or global" + unless $res->id; + } + return $cache->{ $queue } = $res; +} } + # {{{ load_module =head2 load_module @@ -236,31 +335,33 @@ sub help { . loc( "[_1] - Specify the search module you want to use", "--search" ) . "\n"; print " " - . loc( "[_1] - An argument to pass to [_2]", "--search-argument", "--search" ) + . loc( "[_1] - An argument to pass to [_2]", "--search-arg", "--search" ) . "\n"; print " " . loc( "[_1] - Specify the condition module you want to use", "--condition" ) . "\n"; print " " - . loc( "[_1] - An argument to pass to [_2]", "--condition-argument", "--condition" ) + . loc( "[_1] - An argument to pass to [_2]", "--condition-arg", "--condition" ) . "\n"; print " " . loc( "[_1] - Specify the action module you want to use", "--action" ) . "\n"; print " " - . loc( "[_1] - An argument to pass to [_2]", "--action-argument", "--action" ) + . loc( "[_1] - An argument to pass to [_2]", "--action-arg", "--action" ) . "\n"; print " " - . loc( "[_1] - Specify id of the template you want to use", "--template-id" ) + . loc( "[_1] - Specify name or id of template(s) you want to use", "--template" ) . "\n"; print " " - . loc( "[_1] - Specify if you want to use either 'first' or 'last' transaction", "--transaction" ) + . loc( "[_1] - Specify if you want to use either 'first', 'last' or 'all' transactions", "--transaction" ) . "\n"; print " " - . loc( "[_1] - Specify the type of a transaction you want to use", "--transaction-type" ) + . loc( "[_1] - Specify the comma separated list of transactions' types you want to use", "--transaction-type" ) . "\n"; print " " + . loc( "[_1] - Adjust LogToScreen config option", "--log" ) . "\n"; + print " " . loc( "[_1] - Output status updates to STDOUT", "--verbose" ) . "\n"; print "\n"; print "\n"; diff --git a/rt/bin/rt-mailgate b/rt/bin/rt-mailgate index 8db26dbe3..d9e85a7b9 100755 --- a/rt/bin/rt-mailgate +++ b/rt/bin/rt-mailgate @@ -2,8 +2,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -52,30 +52,34 @@ rt-mailgate - Mail interface to RT3. =cut - use strict; use warnings; + use Getopt::Long; use LWP::UserAgent; +use HTTP::Request::Common qw($DYNAMIC_FILE_UPLOAD); +$DYNAMIC_FILE_UPLOAD = 1; use constant EX_TEMPFAIL => 75; +use constant BUFFER_SIZE => 8192; my %opts; GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s", "timeout=i" ); -if ( $opts{help} ) { +if ( $opts{'help'} ) { require Pod::Usage; import Pod::Usage; pod2usage("RT Mail Gateway\n"); exit 1; # Don't want to succeed if this is really an email! } -for (qw(url)) { - die "$0 invoked improperly\n\nNo $_ provided to mail gateway!\n" unless $opts{$_}; +unless ( $opts{'url'} ) { + print STDERR "$0 invoked improperly\n\nNo 'url' provided to mail gateway!\n"; + exit 1; } -my $ua = LWP::UserAgent->new(); -$ua->cookie_jar( { file => $opts{jar} } ); +my $ua = new LWP::UserAgent; +$ua->cookie_jar( { file => $opts{'jar'} } ) if $opts{'jar'}; my %args = ( SessionType => 'REST', # Surpress login box @@ -84,37 +88,54 @@ foreach ( qw(queue action) ) { $args{$_} = $opts{$_} if defined $opts{$_}; }; -# Read the message in from STDIN -$args{'message'} = do { local (@ARGV, $/); <> }; - -unless ( $args{message} =~ /\S/ ) { - print STDERR "$0: no message passed on STDIN!\n"; - exit 0; +if ( ($opts{'extension'} || '') =~ /^(?:action|queue|ticket)$/i ) { + $args{ lc $opts{'extension'} } = $ENV{'EXTENSION'} || $opts{$opts{'extension'}}; +} elsif ( $opts{'extension'} && $ENV{'EXTENSION'} ) { + print STDERR "Value of the --extension argument is not action, queue or ticket" + .", but environment variable EXTENSION is also defined. The former is ignored.\n"; } -if ($opts{'extension'}) { - $args{$opts{'extension'}} = $ENV{'EXTENSION'}; +# add ENV{'EXTENSION'} as X-RT-MailExtension to the message header +if ( my $value = ( $ENV{'EXTENSION'} || $opts{'extension'} ) ) { + # prepare value to avoid MIME format breakage + # strip trailing newline symbols + $value =~ s/(\r*\n)+$//; + # make a correct multiline header field, + # with tabs in the beginning of each line + $value =~ s/(\r*\n)/$1\t/g; + $opts{'headers'} .= "X-RT-Mail-Extension: $value\n"; } -# Set up cookie here. +# Read the message in from STDIN +my %message = write_down_message(); +unless( $message{'filename'} ) { + $args{'message'} = [ + undef, '', + 'Content-Type' => 'application/octet-stream', + Content => ${ $message{'content'} }, + ]; +} else { + $args{'message'} = [ + $message{'filename'}, '', + 'Content-Type' => 'application/octet-stream', + ]; +} my $full_url = $opts{'url'}. "/REST/1.0/NoAuth/mail-gateway"; -warn "Connecting to $full_url" if $opts{'debug'}; +print STDERR "$0: connecting to $full_url\n" if $opts{'debug'}; - - -$ua->timeout(exists($opts{'timeout'}) ? $opts{'timeout'} : 180); -my $r = $ua->post( $full_url, {%args} ); +$ua->timeout( exists( $opts{'timeout'} )? $opts{'timeout'}: 180 ); +my $r = $ua->post( $full_url, \%args, Content_Type => 'form-data' ); check_failure($r); my $content = $r->content; -warn $content if ($opts{debug}); +print STDERR $content ."\n" if $opts{'debug'}; if ( $content !~ /^(ok|not ok)/ ) { # It's not the server's fault if the mail is bogus. We just want to know that # *something* came out of the server. - warn <is_success(); + return if $r->is_success; # This ordinarily oughtn't to be able to happen, suggests a bug in RT. # So only load these heavy modules when they're needed. @@ -140,17 +164,64 @@ sub check_failure { require HTML::FormatText; my $error = $r->error_as_HTML; - my $tree = HTML::TreeBuilder->new->parse($error); + my $tree = HTML::TreeBuilder->new->parse( $error ); $tree->eof; # It'll be a cold day in hell before RT sends out bounces in HTML - my $formatter = HTML::FormatText->new( leftmargin => 0, - rightmargin => 50 ); - warn $formatter->format($tree); - warn "This is $0 exiting because of an undefined server error" if ($opts{debug}); + my $formatter = HTML::FormatText->new( + leftmargin => 0, + rightmargin => 50, + ); + print STDERR $formatter->format( $tree ); + print STDERR "\n$0: undefined server error\n" if $opts{'debug'}; exit EX_TEMPFAIL; } +sub write_down_message { + use File::Temp qw(tempfile); + + local $@; + my ($fh, $filename) = eval { tempfile() }; + if ( !$fh || $@ ) { + print STDERR "$0: Couldn't create temp file, using memory\n"; + print STDERR "error: $@\n" if $@; + + my $message = \do { local (@ARGV, $/); <> }; + unless ( $$message =~ /\S/ ) { + print STDERR "$0: no message passed on STDIN\n"; + exit 0; + } + $$message = $opts{'headers'} . $$message if $opts{'headers'}; + return ( content => $message ); + } + + binmode $fh; + binmode \*STDIN; + + print $fh $opts{'headers'} if $opts{'headers'}; + + my $buf; my $empty = 1; + while(1) { + my $status = read \*STDIN, $buf, BUFFER_SIZE; + unless ( defined $status ) { + print STDERR "$0: couldn't read message: $!\n"; + exit EX_TEMPFAIL; + } elsif ( !$status ) { + last; + } + $empty = 0 if $buf =~ /\S/; + print $fh $buf; + }; + close $fh; + + if ( $empty ) { + print STDERR "$0: no message passed on STDIN\n"; + exit 0; + } + print STDERR "$0: temp file is '$filename'\n" if $opts{'debug'}; + return (filename => $filename); +} + =head1 SYNOPSIS @@ -166,8 +237,6 @@ Usual invocation (from MTA): -See C for more. - =head1 OPTIONS =over 3 @@ -178,7 +247,7 @@ Specifies what happens to email sent to this alias. The avaliable basic actions are: C, C. -If you've set the RT configuration variable B<$RT::UnsafeEmailCommands>, +If you've set the RT configuration variable B<< C >>, C and C are also available. You can execute two or more actions on a single message using a C<-> separated list. RT will execute the actions in the listed order. For example you can use C, @@ -259,13 +328,13 @@ there are situations in which you will want to authenticate users before allowing them to communicate with the system. You can do this via a plug-in mechanism in the RT configuration. -You can set the array C<@RT::MailPlugins> to be a list of plugins. The +You can set the array C<@MailPlugins> to be a list of plugins. The default plugin, if this is not given, is C - that is, authentication of the person is done based on the C header of the email. If you have additional filters or authentication mechanisms, you can list them here and they will be called in order: - @RT::MailPlugins = ( + Set( @MailPlugins => "Filter::SpamAssassin", "Auth::LDAP", # ... @@ -273,12 +342,12 @@ can list them here and they will be called in order: See the documentation for any additional plugins you have. -You may also put Perl subroutines into the C<@RT::MailPlugins> array, if +You may also put Perl subroutines into the C<@MailPlugins> array, if they behave as described below. =head1 WRITING PLUGINS -What's actually going on in the above is that C<@RT::MailPlugins> is a +What's actually going on in the above is that C<@MailPlugins> is a list of Perl modules; RT prepends C to the name, to form a package name, and then C's this module. The module is expected to provide a C subroutine, which takes a hash of @@ -319,5 +388,22 @@ the correspondent) or one, which is the normal mode of operation. Additionally, if C<-1> is returned, then the processing of the plug-ins stops immediately and the message is ignored. +=head1 ENVIRONMENT + +=over 4 + +=item EXTENSION + +Some MTAs will route mail sent to user-foo@host or user+foo@host to user@host +and present "foo" in the environment variable C. Mailgate adds value +of this variable to message in the C field of the message +header. + +See also C<--extension> option. Note that value of the environment variable is +always added to the message header when it's not empty even if C<--extension> +option is not provided. + +=back 4 + =cut diff --git a/rt/config.status b/rt/config.status index 06c562a7d..a564ed6e0 100755 --- a/rt/config.status +++ b/rt/config.status @@ -249,18 +249,10 @@ exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by RT $as_me 3.6.4, which was -generated by GNU Autoconf 2.59. Invocation command line was +# values after options handling. +ac_log=" +This file was extended by RT $as_me 3.8.7, which was +generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -268,10 +260,11 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -config_files=" sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl" +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" etc/upgrade/3.8-branded-queues-extension etc/upgrade/3.8-ical-extension etc/upgrade/split-out-cf-categories sbin/rt-attributes-viewer sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies sbin/rt-email-digest sbin/rt-email-dashboards sbin/rt-clean-sessions sbin/rt-shredder sbin/rt-validator sbin/rt-email-group-admin sbin/rt-server bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl t/data/configs/apache2.2+mod_perl.conf t/data/configs/apache2.2+fastcgi.conf" ac_cs_usage="\ \`$as_me' instantiates files from templates according to the @@ -292,17 +285,20 @@ $config_files Report bugs to ." ac_cs_version="\ -RT config.status 3.6.4 -configured by ./configure, generated by GNU Autoconf 2.59, - with options \"'--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'\" +RT config.status 3.8.7 +configured by ./configure, generated by GNU Autoconf 2.64, + with options \"'--with-db-type=SQLite' '--enable-layout=relative' '--with-web-handler=standalone' 'PERL=/usr/bin/perl'\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=. -INSTALL="/usr/bin/install -c" -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. + +ac_pwd='/Users/falcone/work/rt/releases/rt-3.8.7' +srcdir='.' +INSTALL='install-sh' +AWK='gawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do @@ -373,31 +369,46 @@ if $ac_cs_silent; then fi if $ac_cs_recheck; then - echo "running /bin/sh ./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' $ac_configure_extra_args " --no-create --no-recursion" >&6 - exec /bin/sh ./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' $ac_configure_extra_args --no-create --no-recursion + set X '/bin/sh' './configure' '--with-db-type=SQLite' '--enable-layout=relative' '--with-web-handler=standalone' 'PERL=/usr/bin/perl' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 + CONFIG_SHELL='/bin/sh' + export CONFIG_SHELL + exec "$@" fi for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "sbin/rt-dump-database" ) CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-database" ;; - "sbin/rt-setup-database" ) CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;; - "sbin/rt-test-dependencies" ) CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;; - "bin/mason_handler.fcgi" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.fcgi" ;; - "bin/mason_handler.scgi" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.scgi" ;; - "bin/standalone_httpd" ) CONFIG_FILES="$CONFIG_FILES bin/standalone_httpd" ;; - "bin/rt-crontool" ) CONFIG_FILES="$CONFIG_FILES bin/rt-crontool" ;; - "bin/rt-mailgate" ) CONFIG_FILES="$CONFIG_FILES bin/rt-mailgate" ;; - "bin/rt" ) CONFIG_FILES="$CONFIG_FILES bin/rt" ;; - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "etc/RT_Config.pm" ) CONFIG_FILES="$CONFIG_FILES etc/RT_Config.pm" ;; - "lib/RT.pm" ) CONFIG_FILES="$CONFIG_FILES lib/RT.pm" ;; - "bin/mason_handler.svc" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.svc" ;; - "bin/webmux.pl" ) CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + case $ac_config_target in + "etc/upgrade/3.8-branded-queues-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-branded-queues-extension" ;; + "etc/upgrade/3.8-ical-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-ical-extension" ;; + "etc/upgrade/split-out-cf-categories") CONFIG_FILES="$CONFIG_FILES etc/upgrade/split-out-cf-categories" ;; + "sbin/rt-attributes-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-attributes-viewer" ;; + "sbin/rt-dump-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-database" ;; + "sbin/rt-setup-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;; + "sbin/rt-test-dependencies") CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;; + "sbin/rt-email-digest") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-digest" ;; + "sbin/rt-email-dashboards") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-dashboards" ;; + "sbin/rt-clean-sessions") CONFIG_FILES="$CONFIG_FILES sbin/rt-clean-sessions" ;; + "sbin/rt-shredder") CONFIG_FILES="$CONFIG_FILES sbin/rt-shredder" ;; + "sbin/rt-validator") CONFIG_FILES="$CONFIG_FILES sbin/rt-validator" ;; + "sbin/rt-email-group-admin") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-group-admin" ;; + "sbin/rt-server") CONFIG_FILES="$CONFIG_FILES sbin/rt-server" ;; + "bin/mason_handler.fcgi") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.fcgi" ;; + "bin/mason_handler.scgi") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.scgi" ;; + "bin/standalone_httpd") CONFIG_FILES="$CONFIG_FILES bin/standalone_httpd" ;; + "bin/rt-crontool") CONFIG_FILES="$CONFIG_FILES bin/rt-crontool" ;; + "bin/rt-mailgate") CONFIG_FILES="$CONFIG_FILES bin/rt-mailgate" ;; + "bin/rt") CONFIG_FILES="$CONFIG_FILES bin/rt" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "etc/RT_Config.pm") CONFIG_FILES="$CONFIG_FILES etc/RT_Config.pm" ;; + "lib/RT.pm") CONFIG_FILES="$CONFIG_FILES lib/RT.pm" ;; + "bin/mason_handler.svc") CONFIG_FILES="$CONFIG_FILES bin/mason_handler.svc" ;; + "bin/webmux.pl") CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;; + "t/data/configs/apache2.2+mod_perl.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+mod_perl.conf" ;; + "t/data/configs/apache2.2+fastcgi.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+fastcgi.conf" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -426,9 +437,189 @@ $debug || test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$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. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +cat >>"$tmp/subs1.awk" <<\_ACAWK && +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["RT_LOG_PATH_R"]="/opt/rt3/var/log" +S["LOCAL_LIB_PATH_R"]="/opt/rt3/local/lib" +S["LOCAL_LEXICON_PATH_R"]="/opt/rt3/local/po" +S["MASON_LOCAL_HTML_PATH_R"]="/opt/rt3/local/html" +S["LOCAL_ETC_PATH_R"]="/opt/rt3/local/etc" +S["MASON_HTML_PATH_R"]="/opt/rt3/share/html" +S["MASON_SESSION_PATH_R"]="/opt/rt3/var/session_data" +S["MASON_DATA_PATH_R"]="/opt/rt3/var/mason_data" +S["RT_PLUGIN_PATH_R"]="/opt/rt3/plugins" +S["RT_MAN_PATH_R"]="/opt/rt3/man" +S["RT_VAR_PATH_R"]="/opt/rt3/var" +S["RT_SBIN_PATH_R"]="/opt/rt3/sbin" +S["RT_BIN_PATH_R"]="/opt/rt3/bin" +S["CONFIG_FILE_PATH_R"]="/opt/rt3/etc" +S["RT_ETC_PATH_R"]="/opt/rt3/etc" +S["RT_LIB_PATH_R"]="/opt/rt3/lib" +S["RT_LOCAL_PATH_R"]="/opt/rt3/local" +S["RT_DOC_PATH_R"]="/opt/rt3/share/doc" +S["RT_PATH_R"]="/opt/rt3" +S["RT_LOG_PATH"]="var/log" +S["LOCAL_LIB_PATH"]="local/lib" +S["LOCAL_LEXICON_PATH"]="local/po" +S["MASON_LOCAL_HTML_PATH"]="local/html" +S["LOCAL_ETC_PATH"]="local/etc" +S["MASON_HTML_PATH"]="share/html" +S["MASON_SESSION_PATH"]="var/session_data" +S["MASON_DATA_PATH"]="var/mason_data" +S["RT_PLUGIN_PATH"]="plugins" +S["RT_MAN_PATH"]="man" +S["RT_VAR_PATH"]="var" +S["RT_SBIN_PATH"]="sbin" +S["RT_BIN_PATH"]="bin" +S["CONFIG_FILE_PATH"]="etc" +S["RT_ETC_PATH"]="etc" +S["RT_LIB_PATH"]="lib" +S["RT_LOCAL_PATH"]="local" +S["RT_DOC_PATH"]="share/doc" +S["RT_PATH"]="/opt/rt3" +S["RT_VERSION_PATCH"]="7" +S["RT_VERSION_MINOR"]="8" +S["RT_VERSION_MAJOR"]="3" +S["RT_GPG"]="1" +S["RT_GD"]="1" +S["RT_GRAPHVIZ"]="0" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc" +S["RT_DEVEL_MODE"]="0" +S["APACHECTL"]="/usr/sbin/apachectl" +S["RTGROUP"]="www" +S["WEB_GROUP"]="www" +S["WEB_USER"]="www" +S["DB_RT_PASS"]="rt_pass" +S["DB_RT_USER"]="rt_user" +S["DB_DATABASE"]="rt3" +S["DB_DBA"]="root" +S["DB_RT_HOST"]="localhost" +S["DB_PORT"]="" +S["DB_HOST"]="localhost" +S["DATABASE_ENV_PREF"]="" +S["DB_TYPE"]="SQLite" +S["LIBS_GROUP"]="bin" +S["LIBS_OWNER"]="root" +S["BIN_OWNER"]="root" +S["COMMENT_INPLACE_LAYOUT"]="" +S["rt_layout_name"]="relative" +S["exp_customlibdir"]="local/lib" +S["customlibdir"]="local/lib" +S["exp_customlexdir"]="local/po" +S["customlexdir"]="local/po" +S["exp_customhtmldir"]="local/html" +S["customhtmldir"]="local/html" +S["exp_custometcdir"]="local/etc" +S["custometcdir"]="local/etc" +S["exp_customdir"]="local" +S["customdir"]="local" +S["exp_sessionstatedir"]="var/session_data" +S["sessionstatedir"]="var/session_data" +S["exp_masonstatedir"]="var/mason_data" +S["masonstatedir"]="var/mason_data" +S["exp_logfiledir"]="var/log" +S["logfiledir"]="var/log" +S["exp_localstatedir"]="var" +S["exp_plugindir"]="plugins" +S["plugindir"]="plugins" +S["exp_manualdir"]="share/doc" +S["manualdir"]="share/doc" +S["exp_htmldir"]="share/html" +S["exp_datadir"]="share" +S["exp_libdir"]="lib" +S["exp_mandir"]="man" +S["exp_sysconfdir"]="etc" +S["exp_sbindir"]="sbin" +S["exp_bindir"]="bin" +S["exp_exec_prefix"]="/opt/rt3" +S["exp_prefix"]="/opt/rt3" +S["SPEEDY_BIN"]="/usr/local/bin/speedy" +S["WEB_HANDLER"]="standalone" +S["PERL"]="/usr/bin/perl" +S["AWK"]="gawk" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["rt_version_patch"]="7" +S["rt_version_minor"]="8" +S["rt_version_major"]="3" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="" +S["ECHO_T"]="" +S["ECHO_N"]="" +S["ECHO_C"]="\\c" +S["DEFS"]="-DPACKAGE_NAME=\\\"RT\\\" -DPACKAGE_TARNAME=\\\"rt\\\" -DPACKAGE_VERSION=\\\"3.8.7\\\" -DPACKAGE_STRING=\\\"RT\\ 3.8.7\\\" -DPACKAGE_BUGREPORT=\\\"rt-bugs@bestpractica"\ +"l.com\\\" -DPACKAGE_URL=\\\"\\\"" +S["mandir"]="man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="share/html" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="etc" +S["datadir"]="share" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="sbin" +S["bindir"]="bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/opt/rt3" +S["exec_prefix"]="/opt/rt3" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="rt-bugs@bestpractical.com" +S["PACKAGE_STRING"]="RT 3.8.7" +S["PACKAGE_VERSION"]="3.8.7" +S["PACKAGE_TARNAME"]="rt" +S["PACKAGE_NAME"]="RT" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/sh" +_ACAWK +cat >>"$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } @@ -716,58 +907,39 @@ esac [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - sed "/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&share&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// } :t @@ -793,13 +965,47 @@ s,@INSTALL@,$ac_INSTALL,;t t # Run the commands associated with the file. case $ac_file in - sbin/rt-dump-database ) chmod ug+x $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 + ;; + + + + esac + + + case $ac_file$ac_mode in + "etc/upgrade/3.8-branded-queues-extension":F) chmod ug+x $ac_file + ;; + "etc/upgrade/3.8-ical-extension":F) chmod ug+x $ac_file + ;; + "etc/upgrade/split-out-cf-categories":F) chmod ug+x $ac_file + ;; + "sbin/rt-attributes-viewer":F) chmod ug+x $ac_file + ;; + "sbin/rt-dump-database":F) chmod ug+x $ac_file ;; sbin/rt-setup-database ) chmod ug+x $ac_file ;; sbin/rt-test-dependencies ) chmod ug+x $ac_file ;; - bin/mason_handler.fcgi ) chmod ug+x $ac_file + "sbin/rt-email-digest":F) chmod ug+x $ac_file + ;; + "sbin/rt-email-dashboards":F) chmod ug+x $ac_file + ;; + "sbin/rt-clean-sessions":F) chmod ug+x $ac_file + ;; + "sbin/rt-shredder":F) chmod ug+x $ac_file + ;; + "sbin/rt-validator":F) chmod ug+x $ac_file + ;; + "sbin/rt-email-group-admin":F) chmod ug+x $ac_file + ;; + "sbin/rt-server":F) chmod ug+x $ac_file + ;; + "bin/mason_handler.fcgi":F) chmod ug+x $ac_file ;; bin/mason_handler.scgi ) chmod ug+x $ac_file ;; diff --git a/rt/etc/RT_Config.pm b/rt/etc/RT_Config.pm index 7f7eadcca..b8912b161 100644 --- a/rt/etc/RT_Config.pm +++ b/rt/etc/RT_Config.pm @@ -1,7 +1,3 @@ -# -# WARNING: NEVER EDIT RT_Config.pm. Instead, copy any sections you want to change to RT_SiteConfig.pm -# and edit them there. -# package RT; @@ -15,573 +11,1613 @@ use RT::Config; =cut -# {{{ Base Configuration +=head1 WARNING -# $rtname is the string that RT will look for in mail messages to -# figure out what ticket a new piece of mail belongs to +NEVER EDIT RT_Config.pm. -# Your domain name is recommended, so as not to pollute the namespace. -# once you start using a given tag, you should probably never change it. -# (otherwise, mail for existing tickets won't get put in the right place +Instead, copy any sections you want to change to F and edit them there. + +=cut + +=head1 Base Configuration + +=over 4 + +=item C<$rtname> + +C<$rtname> is the string that RT will look for in mail messages to +figure out what ticket a new piece of mail belongs to. + +Your domain name is recommended, so as not to pollute the namespace. +once you start using a given tag, you should probably never change it. +(otherwise, mail for existing tickets won't get put in the right place) + +=cut Set($rtname , "example.com"); -# This regexp controls what subject tags RT recognizes as its own. -# If you're not dealing with historical $rtname values, you'll likely -# never have to enable this feature. -# -# Be VERY CAREFUL with it. Note that it overrides $rtname for subject -# token matching and that you should use only "non-capturing" parenthesis -# grouping. For example: -# -# Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i ); -# -# and NOT -# -# Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i ); -# -# This setting would make RT behave exactly as it does without the -# setting enabled. -# -# Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i ); +=item C<$EmailSubjectTagRegex> + +This regexp controls what subject tags RT recognizes as its own. +If you're not dealing with historical C<$rtname> values, you'll likely +never have to enable this feature. + +Be VERY CAREFUL with it. Note that it overrides C<$rtname> for subject +token matching and that you should use only "non-capturing" parenthesis +grouping. For example: + +C + +and NOT + +C + +This setting would make RT behave exactly as it does without the +setting enabled. + +=cut + +#Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i ); + + +=item C<$Organization> +You should set this to your organization's DNS domain. For example, +I or I. It's used by the linking interface to +guarantee that ticket URIs are unique and easy to construct. -# You should set this to your organization's DNS domain. For example, -# fsck.com or asylum.arkham.ma.us. It's used by the linking interface to -# guarantee that ticket URIs are unique and easy to construct. +=cut Set($Organization , "example.com"); -# $user_passwd_min defines the minimum length for user passwords. Setting -# it to 0 disables this check +=item C<$MinimumPasswordLength> + +C<$MinimumPasswordLength> defines the minimum length for user +passwords. Setting it to 0 disables this check. + +=cut + Set($MinimumPasswordLength , "5"); -# $Timezone is used to convert times entered by users into GMT and back again -# It should be set to a timezone recognized by your local unix box. +=item C<$Timezone> + +C<$Timezone> is used to convert times entered by users into GMT and back again +It should be set to a timezone recognized by your local unix box. + +=cut + Set($Timezone , 'US/Eastern'); -# }}} +=back + +=head1 Database Configuration + +=over 4 + +=item C<$DatabaseType> -# {{{ Database Configuration +Database driver being used; case matters. -# Database driver beeing used. Case matters -# Valid types are "mysql", "Oracle" and "Pg" +Valid types are "mysql", "Oracle" and "Pg" + +=cut Set($DatabaseType , 'Pg'); -# The domain name of your database server -# If you're running mysql and it's on localhost, -# leave it blank for enhanced performance +=item C<$DatabaseHost>, C<$DatabaseRTHost> + +The domain name of your database server. + +If you're running mysql and it's on localhost, +leave it blank for enhanced performance + +=cut + Set($DatabaseHost , 'localhost'); Set($DatabaseRTHost , 'localhost'); -# The port that your database server is running on. Ignored unless it's -# a positive integer. It's usually safe to leave this blank +=item C<$DatabasePort> + +The port that your database server is running on. Ignored unless it's +a positive integer. It's usually safe to leave this blank + +=cut + Set($DatabasePort , ''); -#The name of the database user (inside the database) +=item C<$DatabaseUser> + +The name of the database user (inside the database) + +=cut + Set($DatabaseUser , 'freeside'); -# Password the DatabaseUser should use to access the database +=item C<$DatabasePassword> + +Password the C<$DatabaseUser> should use to access the database + +=cut + Set($DatabasePassword , ''); -# The name of the RT's database on your database server +=item C<$DatabaseName> + +The name of the RT's database on your database server. For Oracle +it's SID, DB objects are created in L<$DatabaseUser>'s schema. + +=cut + Set($DatabaseName , 'freeside'); -# If you're using Postgres and have compiled in SSL support, -# set DatabaseRequireSSL to 1 to turn on SSL communication +=item C<$DatabaseRequireSSL> + +If you're using Postgres and have compiled in SSL support, +set C<$DatabaseRequireSSL> to 1 to turn on SSL communication + +=cut + Set($DatabaseRequireSSL , undef); -# }}} +=item C<$UseSQLForACLChecks> + +In RT for ages ACL are checked after search what in some situtations +result in empty search pages and wrong count of tickets. + +Set C<$UseSQLForACLChecks> to 1 to use SQL and get rid of these problems. + +However, this option is beta. In some cases it result in performance +improvements, but some setups can not handle it. + +=cut + +Set($UseSQLForACLChecks, undef); + +=back + +=head1 Incoming Mail Gateway Configuration + +=over 4 -# {{{ Incoming mail gateway configuration +=item C<$OwnerEmail> -# OwnerEmail is the address of a human who manages RT. RT will send -# errors generated by the mail gateway to this address. This address -# should _not_ be an address that's managed by your RT instance. +C<$OwnerEmail> is the address of a human who manages RT. RT will send +errors generated by the mail gateway to this address. This address +should _not_ be an address that's managed by your RT instance. + +=cut Set($OwnerEmail , 'root'); -# If $LoopsToRTOwner is defined, RT will send mail that it believes -# might be a loop to $RT::OwnerEmail +=item C<$LoopsToRTOwner> + +If C<$LoopsToRTOwner> is defined, RT will send mail that it believes +might be a loop to C<$OwnerEmail> + +=cut Set($LoopsToRTOwner , 1); -# If $StoreLoops is defined, RT will record messages that it believes -# to be part of mail loops. -# As it does this, it will try to be careful not to send mail to the -# sender of these messages +=item C<$StoreLoops> + +If C<$StoreLoops> is defined, RT will record messages that it believes +to be part of mail loops. + +As it does this, it will try to be careful not to send mail to the +sender of these messages + +=cut Set($StoreLoops , undef); -# $MaxAttachmentSize sets the maximum size (in bytes) of attachments stored -# in the database. +=item C<$MaxAttachmentSize> + +C<$MaxAttachmentSize> sets the maximum size (in bytes) of attachments stored +in the database. + +For mysql and oracle, we set this size at 10 megabytes. +If you're running a postgres version earlier than 7.1, you will need +to drop this to 8192. (8k) + +=cut -# For mysql and oracle, we set this size at 10 megabytes. -# If you're running a postgres version earlier than 7.1, you will need -# to drop this to 8192. (8k) Set($MaxAttachmentSize , 10000000); -# $TruncateLongAttachments: if this is set to a non-undef value, -# RT will truncate attachments longer than MaxAttachmentSize. +=item C<$TruncateLongAttachments> + +C<$TruncateLongAttachments>: if this is set to a non-undef value, +RT will truncate attachments longer than C<$MaxAttachmentSize>. + +=cut Set($TruncateLongAttachments , undef); -# $DropLongAttachments: if this is set to a non-undef value, -# RT will silently drop attachments longer than MaxAttachmentSize. +=item C<$DropLongAttachments> + +C<$DropLongAttachments>: if this is set to a non-undef value, +RT will silently drop attachments longer than C. + +=cut Set($DropLongAttachments , undef); -# If $ParseNewMessageForTicketCcs is true, RT will attempt to divine -# Ticket 'Cc' watchers from the To and Cc lines of incoming messages -# Be forewarned that if you have _any_ addresses which forward mail to -# RT automatically and you enable this option without modifying -# "RTAddressRegexp" below, you will get yourself into a heap of trouble. +=item C<$ParseNewMessageForTicketCcs> + +If C<$ParseNewMessageForTicketCcs> is true, RT will attempt to divine +Ticket 'Cc' watchers from the To and Cc lines of incoming messages +Be forewarned that if you have _any_ addresses which forward mail to +RT automatically and you enable this option without modifying +C<$RTAddressRegexp> below, you will get yourself into a heap of trouble. + +=cut Set($ParseNewMessageForTicketCcs , undef); -# RTAddressRegexp is used to make sure RT doesn't add itself as a ticket CC if -# the setting above is enabled. +=item C<$RTAddressRegexp> + +C<$RTAddressRegexp> is used to make sure RT doesn't add itself as a ticket CC if +the setting above is enabled. It is important that you set this to a +regular expression that matches all addresses used by your RT. This lets RT +avoid sending mail to itself. It will also hide RT addresses from the list of +"One-time Cc" and Bcc lists on ticket reply. + +=cut Set($RTAddressRegexp , '^rt\@example.com$'); -# RT provides functionality which allows the system to rewrite -# incoming email addresses. In its simplest form, -# you can substitute the value in CanonicalizeEmailAddressReplace -# for the value in CanonicalizeEmailAddressMatch -# (These values are passed to the CanonicalizeEmailAddress subroutine in RT/User.pm) -# By default, that routine performs a s/$Match/$Replace/gi on any address passed to it +=item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace> + +RT provides functionality which allows the system to rewrite +incoming email addresses. In its simplest form, +you can substitute the value in $ +for the value in $ +(These values are passed to the $ subroutine in + F) + +By default, that routine performs a C on any address +passed to it. + +=cut #Set($CanonicalizeEmailAddressMatch , '@subdomain\.example\.com$'); #Set($CanonicalizeEmailAddressReplace , '@example.com'); -# set this to true and the create new user page will use the values that you -# enter in the form but use the function CanonicalizeUserInfo in User_Local.pm -Set($CanonicalizeOnCreate , 0); - -# If $SenderMustExistInExternalDatabase is true, RT will refuse to -# create non-privileged accounts for unknown users if you are using -# the "LookupSenderInExternalDatabase" option. -# Instead, an error message will be mailed and RT will forward the -# message to $RTOwner. -# -# If you are not using $LookupSenderInExternalDatabase, this option -# has no effect. -# -# If you define an AutoRejectRequest template, RT will use this -# template for the rejection message. +=item C<$CanonicalizeEmailAddressMatch> + +Set this to true and the create new user page will use the values that you +enter in the form but use the function CanonicalizeUserInfo in +F + +=cut + +Set($CanonicalizeOnCreate, 0); + +=item C<$SenderMustExistInExternalDatabase> + +If C<$SenderMustExistInExternalDatabase> is true, RT will refuse to +create non-privileged accounts for unknown users if you are using +the C<$LookupSenderInExternalDatabase> option. +Instead, an error message will be mailed and RT will forward the +message to C<$RTOwner>. + +If you are not using C<$LookupSenderInExternalDatabase>, this option +has no effect. + +If you define an AutoRejectRequest template, RT will use this +template for the rejection message. + +=cut Set($SenderMustExistInExternalDatabase , undef); -# }}} +=item C<$ValidateUserEmailAddresses> + +If C<$ValidateUserEmailAddresses> is true, RT will refuse to create users with +an invalid email address (as specified in RFC 2822) or with an email address +made of multiple email adresses. + +=cut + +Set($ValidateUserEmailAddresses, undef); + +=item C<@MailPlugins> -# {{{ Outgoing mail configuration +C<@MailPlugins> is a list of auth plugins for L +to use; see L -# RT is designed such that any mail which already has a ticket-id associated -# with it will get to the right place automatically. +=cut + +=item C<$UnsafeEmailCommands> + +C<$UnsafeEmailCommands>, if set to true, enables 'take' and 'resolve' +as possible actions via the mail gateway. As its name implies, this +is very unsafe, as it allows email with a forged sender to possibly +resolve arbitrary tickets! + +=cut + +=item C<$ExtractSubjectTagMatch>, C<$ExtractSubjectTagNoMatch> + +The default "extract remote tracking tags" scrip settings; these +detect when your RT is talking to another RT, and adjusts the +subject accordingly. + +=cut + +Set($ExtractSubjectTagMatch, qr/\[.+? #\d+\]/); +Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex} + ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/ + : qr/\[\Q$RT::rtname\E #\d+\]/)); + +=back + +=head1 Outgoing Mail Configuration -# $CorrespondAddress and $CommentAddress are the default addresses -# that will be listed in From: and Reply-To: headers of correspondence -# and comment mail tracked by RT, unless overridden by a queue-specific -# address. +=over 4 -Set($CorrespondAddress , 'RT_CorrespondAddressNotSet'); +=item C<$MailCommand> -Set($CommentAddress , 'RT_CommentAddressNotSet'); +C<$MailCommand> defines which method RT will use to try to send mail. +We know that 'sendmailpipe' works fairly well. If 'sendmailpipe' +doesn't work well for you, try 'sendmail'. Other options are 'smtp' +or 'qmail'. -#Sendmail Configuration +Note that you should remove the '-t' from C<$SendmailArguments> +if you use 'sendmail' rather than 'sendmailpipe' -# $MailCommand defines which method RT will use to try to send mail -# We know that 'sendmailpipe' works fairly well. -# If 'sendmailpipe' doesn't work well for you, try 'sendmail' -# -# Note that you should remove the '-t' from $SendmailArguments -# if you use 'sendmail' rather than 'sendmailpipe' +=cut Set($MailCommand , 'sendmailpipe'); -# $SendmailArguments defines what flags to pass to $Sendmail -# assuming you picked 'sendmail' or 'sendmailpipe' as the $MailCommand above. -# If you picked 'sendmailpipe', you MUST add a -t flag to $SendmailArguments +=item C<$SetOutgoingMailFrom> + +C<$SetOutgoingMailFrom> tells RT to set the sender envelope with the correspond +mail address of the ticket's queue. + +Warning: If you use this setting, bounced mails will appear to be incoming +mail to the system, thus creating new tickets. + +=cut + +Set($SetOutgoingMailFrom, 0); + +=item C<$OverrideOutgoingMailFrom> + +C<$OverrideOutgoingMailFrom> is used for overwriting the Correspond +address of the queue. The option is a hash reference of queue name to +email address. + +If there is no ticket involved, then the value of the C key will be +used. + +=cut + +Set($OverrideOutgoingMailFrom, { +# 'Default' => 'admin@rt.example.com', +# 'General' => 'general@rt.example.com', +}); + +=back + +=head1 Sendmail Configuration + +These options only take effect if C<$MailCommand> is 'sendmail' or +'sendmailpipe' + +=over 4 + +=item C<$SendmailArguments> + +C<$SendmailArguments> defines what flags to pass to C<$SendmailPath> +If you picked 'sendmailpipe', you MUST add a -t flag to C<$SendmailArguments> +These options are good for most sendmail wrappers and workalikes + +These arguments are good for sendmail brand sendmail 8 and newer +C + +=cut -# These options are good for most sendmail wrappers and workalikes Set($SendmailArguments , "-oi -t"); -# $SendmailBounceArguments defines what flags to pass to $Sendmail -# assuming RT needs to send an error (ie. bounce). + +=item C<$SendmailBounceArguments> + +C<$SendmailBounceArguments> defines what flags to pass to C<$Sendmail> +assuming RT needs to send an error (ie. bounce). + +=cut Set($SendmailBounceArguments , '-f "<>"'); -# These arguments are good for sendmail brand sendmail 8 and newer -#Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m"); +=item C<$SendmailPath> + +If you selected 'sendmailpipe' above, you MUST specify the path to +your sendmail binary in C<$SendmailPath>. + +=cut -# If you selected 'sendmailpipe' above, you MUST specify the path -# to your sendmail binary in $SendmailPath. -# !! If you did not # select 'sendmailpipe' above, this has no effect!! Set($SendmailPath , "/usr/sbin/sendmail"); -# By default, RT sets the outgoing mail's "From:" header to -# "SenderName via RT". Setting this option to 0 disables it. -Set($UseFriendlyFromLine , 1); +=back -# sprintf() format of the friendly 'From:' header; its arguments -# are SenderName and SenderEmailAddress. -Set($FriendlyFromLineFormat , "\"%s via RT\" <%s>"); +=head1 SMTP Configuration -# RT can optionally set a "Friendly" 'To:' header when sending messages to -# Ccs or AdminCcs (rather than having a blank 'To:' header. +These options only take effect if C<$MailCommand> is 'smtp' -# This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL -# If you are using sendmail, rather than postfix, qmail, exim or some other MTA, -# you _must_ disable this option. +=over 4 -Set($UseFriendlyToLine , 0); +=item C<$SMTPServer> -# sprintf() format of the friendly 'From:' header; its arguments -# are WatcherType and TicketId. -Set($FriendlyToLineFormat, "\"%s of $RT::rtname Ticket #%s\":;"); +C<$SMTPServer> should be set to the hostname of the SMTP server to use -# By default, RT doesn't notify the person who performs an update, as they -# already know what they've done. If you'd like to change this behaviour, -# Set $NotifyActor to 1 +=cut -Set($NotifyActor, 0); +Set($SMTPServer, undef); -# By default, RT records each message it sends out to its own internal database.# To change this behaviour, set $RecordOutgoingEmail to 0 +=item C<$SMTPFrom> -Set($RecordOutgoingEmail, 1); +C<$SMTPFrom> should be set to the 'From' address to use, if not the +email's 'From' -# VERP support (http://cr.yp.to/proto/verp.txt) -# uncomment the following two directives to generate envelope senders -# of the form ${VERPPrefix}${originaladdress}@${VERPDomain} -# (i.e. rt-jesse=fsck.com@rt.example.com ) This currently only works -# with sendmail and sendmailppie. -# Set($VERPPrefix, 'rt-'); -# Set($VERPDomain, $RT::Organization); +=cut -# }}} +Set($SMTPFrom, undef); -# {{{ Logging +=item C<$SMTPDebug> -# Logging. The default is to log anything except debugging -# information to syslog. Check the Log::Dispatch POD for -# information about how to get things by syslog, mail or anything -# else, get debugging info in the log, etc. +C<$SMTPDebug> should be set to true to debug SMTP mail sending -# It might generally make -# sense to send error and higher by email to some administrator. -# If you do this, be careful that this email isn't sent to this RT instance. +=cut -# the minimum level error that will be logged to the specific device. -# levels from lowest to highest: -# debug info notice warning error critical alert emergency +Set($SMTPDebug, 0); -# Mail loops will generate a critical log message. -Set($LogToSyslog , 'debug'); -Set($LogToScreen , 'error'); -Set($LogToFile , undef); -Set($LogDir, '/opt/rt3/var/log'); -Set($LogToFileNamed , "rt.log"); #log to rt.log +=back -# If true generates stack traces to file log or screen -# never generates traces to syslog +=head1 Other Mailer Configuration -Set($LogStackTraces , 0); +=over 4 -# On Solaris or UnixWare, set to ( socket => 'inet' ). Options here -# override any other options RT passes to Log::Dispatch::Syslog. -# Other interesting flags include facility and logopt. (See the -# Log::Dispatch::Syslog documentation for more information.) (Maybe -# ident too, if you have multiple RT installations.) +=item C<@MailParams> -@LogToSyslogConf = () unless (@LogToSyslogConf); +C<@MailParams> defines a list of options passed to $MailCommand if it +is not 'sendmailpipe', 'sendmail', or 'smtp' -# RT has rudimentary SQL statement logging support if you have -# DBIx-SearchBuilder 1.31_1 or higher; simply set $StatementLog to be -# the level that you wish SQL statements to be logged at. -Set($StatementLog, undef); +=cut -# }}} +Set(@MailParams, ()); -# {{{ Web interface configuration +=item C<$CorrespondAddress>, C<$CommentAddress> -# This determines the default stylesheet the RT web interface will use. -# RT ships with two valid values by default: -# -# 3.5-default The totally new, default layout for RT 3.5 -# 3.4-compat A 3.4 compatibility stylesheet to make RT 3.5 look -# (mostly) like 3.4 -# -# This value actually specifies a directory in share/html/NoAuth/css/ -# from which RT will try to load the file main.css (which should -# @import any other files the stylesheet needs). This allows you to -# easily and cleanly create your own stylesheets to apply to RT. +RT is designed such that any mail which already has a ticket-id associated +with it will get to the right place automatically. -Set($WebDefaultStylesheet, '3.5-default'); +C<$CorrespondAddress> and C<$CommentAddress> are the default addresses +that will be listed in From: and Reply-To: headers of correspondence +and comment mail tracked by RT, unless overridden by a queue-specific +address. -# Define the directory name to be used for images in rt web -# documents. +=cut -# If you're putting the web ui somewhere other than at the root of -# your server, you should set $WebPath to the path you'll be -# serving RT at. -# $WebPath requires a leading / but no trailing /. -# -# In most cases, you should leave $WebPath set to '' (an empty value). +Set($CorrespondAddress , ''); -Set($WebPath , ""); +Set($CommentAddress , ''); -# If we're running as a superuser, run on port 80 -# Otherwise, pick a high port for this user. +=item C<$DashboardAddress> -Set($WebPort , 80);# + ($< * 7274) % 32766 + ($< && 1024)); +The email address from which RT will send dashboards. If none is set, then +C<$OwnerEmail> will be used. -# This is the Scheme, server and port for constructing urls to webrt -# $WebBaseURL doesn't need a trailing / +=cut -Set($WebBaseURL , "http://localhost:$WebPort"); +Set($DashboardAddress, ''); -Set($WebURL , $WebBaseURL . $WebPath . "/"); +=item C<$UseFriendlyFromLine> -# $WebImagesURL points to the base URL where RT can find its images. +By default, RT sets the outgoing mail's "From:" header to +"SenderName via RT". Setting C<$UseFriendlyFromLine> to 0 disables it. -Set($WebImagesURL , $WebPath . "/NoAuth/images/"); +=cut -# $LogoURL points to the URL of the RT logo displayed in the web UI +Set($UseFriendlyFromLine, 1); -Set($LogoURL , $WebImagesURL . "bplogo.gif"); +=item C<$FriendlyFromLineFormat> -# WebNoAuthRegex - What portion of RT's URLspace should not require -# authentication. -Set($WebNoAuthRegex, qr!^/rt(?:/+NoAuth/| - /+REST/\d+\.\d+/NoAuth/)!x ); +C format of the friendly 'From:' header; its arguments +are SenderName and SenderEmailAddress. -# For message boxes, set the entry box width and what type of wrapping -# to use. -# -# Default width: 72 -Set($MessageBoxWidth , 72); +=cut -# Default wrapping: "HARD" (choices "SOFT", "HARD") -Set($MessageBoxWrap, "HARD"); +Set($FriendlyFromLineFormat, "\"%s via RT\" <%s>"); -# Support implicit links in WikiText custom fields? A true value -# causes InterCapped or ALLCAPS words in WikiText fields to -# automatically become links to searches for those words. If used on -# RTFM articles, it links to the RTFM article with that name. -Set($WikiImplicitLinks, 0); +=item C<$UseFriendlyToLine> -# if TrustHTMLAttachments is not defined, we will display them -# as text. This prevents malicious HTML and javascript from being -# sent in a request (although there is probably more to it than that) -Set($TrustHTMLAttachments , undef); - -# Should RT redistribute correspondence that it identifies as -# machine generated? A true value will do so; setting this to '0' -# will cause no such messages to be redistributed. -# You can also use 'privileged' (the default), which will redistribute -# only to privileged users. This helps to protect against malformed -# bounces and loops caused by autocreated requestors with bogus addresses. -Set($RedistributeAutoGeneratedMessages, 'privileged'); +RT can optionally set a "Friendly" 'To:' header when sending messages to +Ccs or AdminCcs (rather than having a blank 'To:' header. -# If PreferRichText is set to a true value, RT will show HTML/Rich text -# messages in preference to their plaintext alternatives. RT "scrubs" the -# html to show only a minimal subset of HTML to avoid possible contamination -# by cross-site-scripting attacks. -Set($PreferRichText, undef); +This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL +If you are using sendmail, rather than postfix, qmail, exim or some other MTA, +you _must_ disable this option. -# If $WebExternalAuth is defined, RT will defer to the environment's -# REMOTE_USER variable. +=cut -Set($WebExternalAuth , undef); +Set($UseFriendlyToLine, 0); -# If $WebFallbackToInternalAuth is undefined, the user is allowed a chance -# of fallback to the login screen, even if REMOTE_USER failed. +=item C<$FriendlyToLineFormat> -Set($WebFallbackToInternalAuth , undef); +C format of the friendly 'From:' header; its arguments +are WatcherType and TicketId. -# $WebExternalGecos means to match 'gecos' field as the user identity); -# useful with mod_auth_pwcheck and IIS Integrated Windows logon. +=cut -Set($WebExternalGecos , undef); +Set($FriendlyToLineFormat, "\"%s of ". RT->Config->Get('rtname') ." Ticket #%s\":;"); -# $WebExternalAuto will create users under the same name as REMOTE_USER -# upon login, if it's missing in the Users table. +=item C<$NotifyActor> -Set($WebExternalAuto , undef); +By default, RT doesn't notify the person who performs an update, as they +already know what they've done. If you'd like to change this behaviour, +Set C<$NotifyActor> to 1 -# $WebSessionClass is the class you wish to use for managing Sessions. -# It defaults to use your SQL database, but if you are using MySQL 3.x and -# plans to use non-ascii Queue names, uncomment and add this line to -# RT_SiteConfig.pm will prevent session corruption. +=cut -# Set($WebSessionClass , 'Apache::Session::File'); +Set($NotifyActor, 0); +=item C<$RecordOutgoingEmail> -# By default, RT's session cookie isn't marked as "secure" Some web browsers -# will treat secure cookies more carefully than non-secure ones, being careful -# not to write them to disk, only send them over an SSL secured connection -# and so on. To enable this behaviour, set # $WebSecureCookies to a true value. -# NOTE: You probably don't want to turn this on _unless_ users are only connecting -# via SSL encrypted HTTP connections. +By default, RT records each message it sends out to its own internal database. +To change this behavior, set C<$RecordOutgoingEmail> to 0 -Set($WebSecureCookies, 0); +=cut +Set($RecordOutgoingEmail, 1); -# By default, RT clears its database cache after every page view. -# This ensures that you've always got the most current information -# when working in a multi-process (mod_perl or FastCGI) Environment -# Setting $WebFlushDbCacheEveryRequest to '0' will turn this off, -# which will speed RT up a bit, at the expense of a tiny bit of data -# accuracy. +=item C<$VERPPrefix>, C<$VERPPrefix> -Set($WebFlushDbCacheEveryRequest, '1'); +VERP support (http://cr.yp.to/proto/verp.txt) +uncomment the following two directives to generate envelope senders +of the form C<${VERPPrefix}${originaladdress}@${VERPDomain}> +(i.e. rt-jesse=fsck.com@rt.example.com ). -# $MaxInlineBody is the maximum attachment size that we want to see -# inline when viewing a transaction. 13456 is a random sane-sounding -# default. +This currently only works with sendmail and sendmailppie. -Set($MaxInlineBody, 13456); +=cut -# $DefaultSummaryRows is default number of rows displayed in for search -# results on the frontpage. +# Set($VERPPrefix, 'rt-'); +# Set($VERPDomain, $RT::Organization); -Set($DefaultSummaryRows, 10); -# By default, RT shows newest transactions at the bottom of the ticket -# history page, if you want see them at the top set this to '0'. +=item C<$ForwardFromUser> -Set($OldestTransactionsFirst, '1'); +By default, RT forwards a message using queue's address and adds RT's tag into +subject of the outgoing message, so recipients' replies go into RT as correspondents. -# By default, RT shows images attached to incoming (and outgoing) ticket updates -# inline. Set this variable to 0 if you'd like to disable that behaviour +To change this behavior, set C<$ForwardFromUser> to true value and RT will use +address of the current user and leave subject without RT's tag. -Set($ShowTransactionImages, 1); +=cut +Set($ForwardFromUser, 0); -# $HomepageComponents is an arrayref of allowed components on a user's -# customized homepage ("RT at a glance"). +=item C<$ShowBccHeader> -Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage)]); +By default RT hides from the web UI information about blind copies user sent on +reply or comment. -# @MasonParameters is the list of parameters for the constructor of -# HTML::Mason's Apache or CGI Handler. This is normally only useful -# for debugging, eg. profiling individual components with: -# use MasonX::Profiler; # available on CPAN -# @MasonParameters = (preamble => 'my $p = MasonX::Profiler->new($m, $r);'); +To change this set the following option to true value. -@MasonParameters = () unless (@MasonParameters); +=cut -# $DefaultSearchResultFormat is the default format for RT search results -Set ($DefaultSearchResultFormat, qq{ - '__id__/TITLE:#', - '__Subject__/TITLE:Subject', - Status, - QueueName, - OwnerName, - Priority, - '__NEWLINE__', - '', - '__Requestors__', - '__CreatedRelative__', - '__ToldRelative__', - '__LastUpdatedRelative__', - '__TimeLeft__'}); +Set($ShowBccHeader, 0); -# If $SuppressInlineTextFiles is set to a true value, then uploaded -# text files (text-type attachments with file names) are prevented -# from being displayed in-line when viewing a ticket's history. +=item C<$DashboardSubject> -Set($SuppressInlineTextFiles, undef); +Lets you set the subject of dashboards. Arguments are the frequency (Daily, +Weekly, Monthly) of the dashboard and the dashboard's name. [_1] for the name +of the dashboard. -# If $DontSearchFileAttachments is set to a true value, then uploaded -# files (attachments with file names) are not searched during full-content -# ticket searches. +=cut -Set($DontSearchFileAttachments, undef); +Set($DashboardSubject, '%s Dashboard: %s'); +=back -# }}} +=head1 GnuPG Configuration -# {{{ RT UTF-8 Settings +A full description of the (somewhat extensive) GnuPG integration can be found +by running the command `perldoc L` (or `perldoc + lib/RT/Crypt/GnuPG.pm` from your RT install directory). -# An array that contains languages supported by RT's internationalization -# interface. Defaults to all *.po lexicons; setting it to qw(en ja) will make -# RT bilingual instead of multilingual, but will save some memory. +=over 4 -@LexiconLanguages = qw(*) unless (@LexiconLanguages); +=item C<%GnuPG> -# An array that contains default encodings used to guess which charset -# an attachment uses if not specified. Must be recognized by -# Encode::Guess. +Set C to 'inline' to use inline encryption and +signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format. -@EmailInputEncodings = qw(utf-8 iso-8859-1 us-ascii) unless (@EmailInputEncodings); +If you want to allow people to encrypt attachments inside the DB then +set C to true -# The charset for localized email. Must be recognized by Encode. +Set C to false if you don't want to reject +emails encrypted for key RT doesn't have and can not decrypt. -Set($EmailOutputEncoding , 'utf-8'); +Set C to false if you don't want to reject letters +with incorrect GnuPG data. -# }}} +=cut -# {{{ RT Date Handling Options (for Time::ParseDate) +Set( %GnuPG, + Enable => 1, + OutgoingMessagesFormat => 'RFC', # Inline + AllowEncryptDataInDB => 0, -# Set this to 1 if your local date convention looks like "dd/mm/yy" -# instead of "mm/dd/yy". + RejectOnMissingPrivateKey => 1, + RejectOnBadData => 1, +); -Set($DateDayBeforeMonth , 1); +=item C<%GnuPGOptions> -# Should "Tuesday" default to meaning "Next Tuesday" or "Last Tuesday"? -# Set to 0 for "Next" or 1 for "Last". +Options of GnuPG program. -Set($AmbiguousDayInPast , 1); +If you override this in your RT_SiteConfig, you should be sure +to include a homedir setting. -# }}} +NOTE that options with '-' character MUST be quoted. -# {{{ Miscellaneous RT Settings +=cut -# You can define new statuses and even reorder existing statuses here. -# WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT -# will break horribly. The statuses you add must be no longer than -# 10 characters. +Set(%GnuPGOptions, + homedir => 'var/data/gpg', -@ActiveStatus = qw(new open stalled) unless @ActiveStatus; -@InactiveStatus = qw(resolved rejected deleted) unless @InactiveStatus; +# URL of a keyserver +# keyserver => 'hkp://subkeys.pgp.net', -# Backward compatability setting. Add/Delete Link used to record one -# transaction and run one scrip. Set this value to 1 if you want -# only one of the link transactions to have scrips run. -Set($LinkTransactionsRun1Scrip , 0); +# enables the automatic retrieving of keys when encrypting +# 'auto-key-locate' => 'keyserver', -# When this feature is enabled an user need ModifyTicket right on both -# tickets to link them together, otherwise he can have right on any of -# two. -Set($StrictLinkACL, 1); +# enables the automatic retrieving of keys when verifying signatures +# 'auto-key-retrieve' => undef, +); -# }}} +=back -# {{{ Development Mode -# -# RT comes with a "Development mode" setting. -# This setting, as a convenience for developers, turns on -# all sorts of development options that you most likely don't want in -# production: -# -# * Turns off Mason's 'static_source' directive. By default, you can't -# edit RT's web ui components on the fly and have RT magically pick up -# your changes. (It's a big performance hit) -# -# * More to come -# +=head1 Logging Configuration -Set($DevelMode, '0'); +The default is to log anything except debugging +information to syslog. Check the L POD for +information about how to get things by syslog, mail or anything +else, get debugging info in the log, etc. + +It might generally make sense to send error and higher by email to +some administrator. If you do this, be careful that this email +isn't sent to this RT instance. Mail loops will generate a critical +log message. + +=over 4 + +=item C<$LogToSyslog>, C<$LogToScreen> + +The minimum level error that will be logged to the specific device. +From lowest to highest priority, the levels are: + debug info notice warning error critical alert emergency + +=cut + +Set($LogToSyslog , 'info'); +Set($LogToScreen , 'info'); + +=item C<$LogToFile>, C<$LogDir>, C<$LogToFileNamed> + +Logging to a standalone file is also possible, but note that the +file should needs to both exist and be writable by all direct users +of the RT API. This generally include the web server, whoever +rt-crontool runs as. Note that as rt-mailgate and the RT CLI go +through the webserver, so their users do not need to have write +permissions to this file. If you expect to have multiple users of +the direct API, Best Practical recommends using syslog instead of +direct file logging. + +=cut + +Set($LogToFile , undef); +Set($LogDir, 'var/log'); +Set($LogToFileNamed , "rt.log"); #log to rt.log + +=item C<$LogStackTraces> + +If set to a log level then logging will include stack traces for +messages with level equal to or greater than specified. + +NOTICE: Stack traces include parameters supplied to functions or +methods. It is possible for stack trace logging to reveal sensitive +information such as passwords or ticket content in your logs. + +=cut + +Set($LogStackTraces, ''); + +=item C<@LogToSyslogConf> + +On Solaris or UnixWare, set to ( socket => 'inet' ). Options here +override any other options RT passes to L. +Other interesting flags include facility and logopt. (See the +L documentation for more information.) (Maybe +ident too, if you have multiple RT installations.) + +=cut + +Set(@LogToSyslogConf, ()); + +=item C<$StatementLog>, + +RT has rudimentary SQL statement logging support if you have +DBIx-SearchBuilder 1.31_1 or higher; simply set C<$StatementLog> to be +the level that you wish SQL statements to be logged at. + +=cut + +Set($StatementLog, undef); + +=back + +=head1 Web Interface Configuration + +=over 4 + +=item C<$WebDefaultStylesheet> + +This determines the default stylesheet the RT web interface will use. +RT ships with several themes by default: + + web2 The totally new, default layout for RT 3.8 + 3.5-default RT 3.5 and 3.6 original layout + 3.4-compat A 3.4 compatibility stylesheet to make RT look + (mostly) like 3.4 + +This value actually specifies a directory in F +from which RT will try to load the file main.css (which should +@import any other files the stylesheet needs). This allows you to +easily and cleanly create your own stylesheets to apply to RT. This +option can be overridden by users in their preferences. + +=cut + +Set($WebDefaultStylesheet, 'web2'); + +=item C<$UsernameFormat> + +This determines how user info is displayed. 'concise' will show one of +either NickName, RealName, Name or EmailAddress, depending on what exists +and whether the user is privileged or not. 'verbose' will show RealName and +EmailAddress. + +=cut -# }}} +Set($UsernameFormat, 'concise'); +=item C<$WebDomain> + +Domain name of the RT server, eg 'www.example.com'. It should not contain +anything else, but server name. + +=cut + +Set( $WebDomain, 'localhost' ); + +=item C<$WebPort> + +If we're running as a superuser, run on port 80 +Otherwise, pick a high port for this user. + +443 is default port for https protocol. + +=cut + +Set($WebPort, 80);# + ($< * 7274) % 32766 + ($< && 1024)); + +=item C<$WebPath> + +If you're putting the web ui somewhere other than at the root of +your server, you should set C<$WebPath> to the path you'll be +serving RT at. + +C<$WebPath> requires a leading / but no trailing /, or it can be blank. + +In most cases, you should leave C<$WebPath> set to '' (an empty value). + +=cut + +Set($WebPath, ""); + +=item C<$WebBaseURL>, C<$WebURL> + +Usually you don't want to set these options. The only obviouse reason is +RT accessible via https protocol on non standard port, eg +'https://rt.example.com:9999'. In all other cases these options are computed +using C<$WebDomain>, C<$WebPort> and C<$WebPath>. + +C<$WebBaseURL> is the scheme, server and port (eg 'http://rt.example.com') +for constructing urls to the web UI. C<$WebBaseURL> doesn't need a trailing /. + +C<$WebURL> is the C<$WebBaseURL>, C<$WebPath> and trailing /, for example: +'http://www.example.com/rt/'. + +=cut + +my $port = RT->Config->Get('WebPort'); +Set($WebBaseURL, + ($port == 443? 'https': 'http') .'://' + . RT->Config->Get('WebDomain') + . ($port != 80 && $port != 443? ":$port" : '') +); + +Set($WebURL, RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/"); + +=item C<$WebImagesURL> + +C<$WebImagesURL> points to the base URL where RT can find its images. +Define the directory name to be used for images in rt web +documents. + +=cut + +Set($WebImagesURL, RT->Config->Get('WebPath') . "/NoAuth/images/"); + +=item C<$LogoURL> + +C<$LogoURL> points to the URL of the RT logo displayed in the web UI + +=cut + +Set($LogoURL, RT->Config->Get('WebImagesURL') . "bplogo.gif"); + +=item C<$WebNoAuthRegex> + +What portion of RT's URL space should not require authentication. + +This is mostly for extension and doesn't mean RT will work without +login if you change it. + +=cut + +Set($WebNoAuthRegex, qr{^ /rt (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x ); + +=item C<$SelfServiceRegex> + +What portion of RT's URLspace should be accessible to Unprivileged users +This does not override the redirect from F to +F when Unprivileged users attempt to access +ticked displays + +=cut + +Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x ); + +=item C<$MessageBoxWidth>, C<$MessageBoxHeight> + +For message boxes, set the entry box width, height and what type of +wrapping to use. These options can be overridden by users in their +preferences. + +Default width: 72, height: 15 + +These settings only apply to the non-RichText message box. +See below for Rich Text settings. + +=cut + +Set($MessageBoxWidth, 72); +Set($MessageBoxHeight, 15); + +=item C<$MessageBoxWrap> + +Default wrapping: "HARD" (choices "SOFT", "HARD") + +Wrapping is disabled when using MessageBoxRichText because +of a bad interaction between IE and wrapping with the Rich +Text Editor. + +=cut + +Set($MessageBoxWrap, "HARD"); + +=item C<$MessageBoxRichText> + +Should "rich text" editing be enabled? This option lets your users send html email messages from the web interface. + +=cut + +Set($MessageBoxRichText, 1); + +=item C<$MessageBoxRichTextHeight> + +Height of RichText javascript enabled editing boxes (in pixels) + +=cut + +Set($MessageBoxRichTextHeight, 200); + +=item C<$MessageBoxIncludeSignature> + +Should your user's signatures (from their Preferences page) be included in Comments and Replies + +=cut + +Set($MessageBoxIncludeSignature, 1); + +=item C<$WikiImplicitLinks> + +Support implicit links in WikiText custom fields? A true value +causes InterCapped or ALLCAPS words in WikiText fields to +automatically become links to searches for those words. If used on +RTFM articles, it links to the RTFM article with that name. + +=cut + +Set($WikiImplicitLinks, 0); + +=item C<$TrustHTMLAttachments> + +if C is not defined, we will display them +as text. This prevents malicious HTML and javascript from being +sent in a request (although there is probably more to it than that) + +=cut + +Set($TrustHTMLAttachments, undef); + +=item C<$RedistributeAutoGeneratedMessages> + +Should RT redistribute correspondence that it identifies as +machine generated? A true value will do so; setting this to '0' +will cause no such messages to be redistributed. +You can also use 'privileged' (the default), which will redistribute +only to privileged users. This helps to protect against malformed +bounces and loops caused by autocreated requestors with bogus addresses. + +=cut + +Set($RedistributeAutoGeneratedMessages, 'privileged'); + +=item C<$PreferRichText> + +If C<$PreferRichText> is set to a true value, RT will show HTML/Rich text +messages in preference to their plaintext alternatives. RT "scrubs" the +html to show only a minimal subset of HTML to avoid possible contamination +by cross-site-scripting attacks. + +=cut + +Set($PreferRichText, undef); + +=item C<$WebExternalAuth> + +If C<$WebExternalAuth> is defined, RT will defer to the environment's +REMOTE_USER variable. + +=cut + +Set($WebExternalAuth, undef); + +=item C<$WebExternalAuthContinuous> + +If C<$WebExternalAuthContinuous> is defined, RT will check for the +REMOTE_USER on each access. If you would prefer this to only happen +once (at initial login) set this to a false value. The default setting +will help ensure that if your external auth system deauthenticates a +user, RT notices as soon as possible. + +=cut + +Set($WebExternalAuthContinuous, 1); + +=item C<$WebFallbackToInternalAuth> + +If C<$WebFallbackToInternalAuth> is defined, the user is allowed a chance +of fallback to the login screen, even if REMOTE_USER failed. + +=cut + +Set($WebFallbackToInternalAuth , undef); + +=item C<$WebExternalGecos> + +C<$WebExternalGecos> means to match 'gecos' field as the user identity); +useful with mod_auth_pwcheck and IIS Integrated Windows logon. + +=cut + +Set($WebExternalGecos , undef); + +=item C<$WebExternalAuto> + +C<$WebExternalAuto> will create users under the same name as REMOTE_USER +upon login, if it's missing in the Users table. + +=cut + +Set($WebExternalAuto , undef); + +=item C<$AutoCreate> + +If C<$WebExternalAuto> is true, C<$AutoCreate> will be passed to User's +Create method. Use it to set defaults, such as creating +Unprivileged users with C<{ Privileged => 0 }> +( Must be a hashref of arguments ) + +=cut + +Set($AutoCreate, undef); + +=item C<$WebSessionClass> + +C<$WebSessionClass> is the class you wish to use for managing Sessions. +It defaults to use your SQL database, but if you are using MySQL 3.x and +plans to use non-ascii Queue names, uncomment and add this line to +F will prevent session corruption. + +=cut + +# Set($WebSessionClass , 'Apache::Session::File'); + +=item C<$AutoLogoff> + +By default, RT's user sessions persist until a user closes his or her +browser. With the C<$AutoLogoff> option you can setup session lifetime in +minutes. A user will be logged out if he or she doesn't send any requests +to RT for the defined time. + +=cut + +Set($AutoLogoff, 0); + +=item C<$WebSecureCookies> + +By default, RT's session cookie isn't marked as "secure" Some web browsers +will treat secure cookies more carefully than non-secure ones, being careful +not to write them to disk, only send them over an SSL secured connection +and so on. To enable this behaviour, set C<$WebSecureCookies> to a true value. +NOTE: You probably don't want to turn this on _unless_ users are only connecting +via SSL encrypted HTTP connections. + +=cut + +Set($WebSecureCookies, 0); + +=item C<$WebFlushDbCacheEveryRequest> + +By default, RT clears its database cache after every page view. +This ensures that you've always got the most current information +when working in a multi-process (mod_perl or FastCGI) Environment +Setting C<$WebFlushDbCacheEveryRequest> to '0' will turn this off, +which will speed RT up a bit, at the expense of a tiny bit of data +accuracy. + +=cut + +Set($WebFlushDbCacheEveryRequest, '1'); + + +=item C<$MaxInlineBody> + +C<$MaxInlineBody> is the maximum attachment size that we want to see +inline when viewing a transaction. RT will inline any text if value +is undefined or 0. This option can be overridden by users in their +preferences. + +=cut + +Set($MaxInlineBody, 12000); + +=item C<$DefaultSummaryRows> + +C<$DefaultSummaryRows> is default number of rows displayed in for search +results on the frontpage. + +=cut + +Set($DefaultSummaryRows, 10); + +=item C<$HomePageRefreshInterval> + +C<$HomePageRefreshInterval> is default number of seconds to refresh the RT +home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200]. + +=cut + +Set($HomePageRefreshInterval, 0); + +=item C<$SearchResultsRefreshInterval> + +C<$SearchResultsRefreshInterval> is default number of seconds to refresh +search results in RT. Choose from [0, 120, 300, 600, 1200, 3600, 7200]. + +=cut + +Set($SearchResultsRefreshInterval, 0); + +=item C<$OldestTransactionsFirst> + +By default, RT shows newest transactions at the bottom of the ticket +history page, if you want see them at the top set this to '0'. This +option can be overridden by users in their preferences. + +=cut + +Set($OldestTransactionsFirst, '1'); + +=item C<$ShowTransactionImages> + +By default, RT shows images attached to incoming (and outgoing) ticket updates +inline. Set this variable to 0 if you'd like to disable that behaviour + +=cut + +Set($ShowTransactionImages, 1); + +=item C<$PlainTextPre> + +Normally plaintext attachments are displayed as HTML with line +breaks preserved. This causes space- and tab-based formatting not +to be displayed correctly. By setting $PlainTextPre they'll be +displayed using
 instead so such formatting works, but they'll
+use a monospaced font, no matter what the value of C<$PlainTextMono> is.
+
+=cut
+
+Set($PlainTextPre, 0);
+
+
+=item C<$PlainTextMono> 
+To display plaintext attachments,
+Set C<$PlainTextMono> to 1 to use monospaced font and preserve
+formatting, but unlike PlainTextPre, the text will wrap to fit into the
+UI.
+
+=cut
+
+Set($PlainTextMono, 0);
+
+=item C<$ShowUnreadMessageNotifications>
+
+By default, RT will prompt users when there are new, unread messages on
+tickets they are viewing.
+
+Set C<$ShowUnreadMessageNotifications> to a false value to disable this feature.
+
+=cut
+
+Set($ShowUnreadMessageNotifications, 1);
+
+
+=item C<$HomepageComponents>
+
+C<$HomepageComponents> is an arrayref of allowed components on a user's
+customized homepage ("RT at a glance").
+
+=cut
+
+Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
+
+=item C<@MasonParameters>
+
+C<@MasonParameters> is the list of parameters for the constructor of
+HTML::Mason's Apache or CGI Handler.  This is normally only useful
+for debugging, eg. profiling individual components with:
+
+    use MasonX::Profiler; # available on CPAN
+    Set(@MasonParameters, (preamble => 'my $p = MasonX::Profiler->new($m, $r);'));
+
+=cut
+
+Set(@MasonParameters, ());
+
+=item C<$DefaultSearchResultFormat>
+
+C<$DefaultSearchResultFormat> is the default format for RT search results
+
+=cut
+
+Set ($DefaultSearchResultFormat, qq{
+   '__id__/TITLE:#',
+   '__Subject__/TITLE:Subject',
+   Status,
+   QueueName, 
+   OwnerName, 
+   Priority, 
+   '__NEWLINE__',
+   '', 
+   '__Requestors__',
+   '__CreatedRelative__',
+   '__ToldRelative__',
+   '__LastUpdatedRelative__',
+   '__TimeLeft__'});
+
+=item C<$DefaultSelfServiceSearchResultFormat>
+
+C<$DefaultSelfServiceSearchResultFormat> is the default format of searches displayed in the 
+SelfService interface.
+
+=cut
+
+Set($DefaultSelfServiceSearchResultFormat, qq{
+   '__id__/TITLE:#',
+   '__Subject__/TITLE:Subject',
+   Status,
+   Requestors,
+   OwnerName});
+
+=item C<$SuppressInlineTextFiles>
+
+If C<$SuppressInlineTextFiles> is set to a true value, then uploaded
+text files (text-type attachments with file names) are prevented
+from being displayed in-line when viewing a ticket's history.
+
+=cut
+
+Set($SuppressInlineTextFiles, undef);
+
+=item C<$DontSearchFileAttachments>
+
+If C<$DontSearchFileAttachments> is set to a true value, then uploaded
+files (attachments with file names) are not searched during full-content
+ticket searches.
+
+=cut
+
+Set($DontSearchFileAttachments, undef);
+
+=item C<$ChartFont>
+
+The L module (which RT uses for graphs) uses a builtin font that doesn't
+have full Unicode support. You can use a particular TrueType font by setting
+$ChartFont to the absolute path of that font. Your GD library must have
+support for TrueType fonts to use this option.
+
+=cut
+
+Set($ChartFont, undef);
+
+
+=item C<@Active_MakeClicky>
+
+MakeClicky detects various formats of data in headers and email
+messages, and extends them with supporting links.  By default, RT
+provides two formats:
+
+* 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
+  link after the URL.
+
+* 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
+  replace URL with link and *adds spaces* into text if it's longer
+  then 30 chars. This allow browser to wrap long URLs and avoid
+  horizontal scrolling.
+
+See F for documentation on how to add your own.
+
+=cut
+
+Set(@Active_MakeClicky, qw());
+
+=item C<$DefaultQueue>
+
+Use this to select the default queue name that will be used for creating new
+tickets. You may use either the queue's name or its ID. This only affects the
+queue selection boxes on the web interface.
+
+=cut
+
+#Set($DefaultQueue, 'General');
+
+=item C<$DefaultTimeUnitsToHours>
+
+Use this to set the default units for time entry to hours instead of minutes.
+
+=cut
+
+Set($DefaultTimeUnitsToHours, 0);
+
+=back
+
+=head1 L (rt-server) Configuration
+
+=over 4
+
+=item C<$StandaloneMinServers>, C<$StandaloneMaxServers>
+
+The absolute minimum and maximum number of servers that will be created to
+handle requests. Having multiple servers means that serving a slow page will
+affect other users less.
+
+=cut
+
+Set($StandaloneMinServers, 1);
+Set($StandaloneMaxServers, 1);
+
+=item C<$StandaloneMinSpareServers>, C<$StandaloneMaxSpareServers>
+
+These next two options can be used to scale up and down the number of servers
+to adjust to load. These two options will respect the C<$StandaloneMinServers
+> and C<$StandaloneMaxServers options>.
+
+=cut
+
+Set($StandaloneMinSpareServers, 0);
+Set($StandaloneMaxSpareServers, 0);
+
+=item C<$StandaloneMaxRequests>
+
+This sets the absolute maximum number of requests a single server will serve.
+Setting this would be useful if, for example, memory usage slowly crawls up
+every hit.
+
+=cut
+
+#Set($StandaloneMaxRequests, 50);
+
+=item C<%NetServerOptions>
+
+C<%NetServerOptions> is a hash of additional options to use for
+L. For example, you could set
+reverse_lookups to get the hostnames for all users with:
+
+C 1));>
+
+=cut
+
+Set(%NetServerOptions, ());
+
+=back
+
+
+=head1 UTF-8 Configuration
+
+=over 4
+
+=item C<@LexiconLanguages>
+
+An array that contains languages supported by RT's internationalization
+interface.  Defaults to all *.po lexicons; setting it to C will make
+RT bilingual instead of multilingual, but will save some memory.
+
+=cut
+
+Set(@LexiconLanguages, qw(*));
+
+=item C<@EmailInputEncodings>
+
+An array that contains default encodings used to guess which charset
+an attachment uses if not specified.  Must be recognized by
+L.
+
+=cut
+
+Set(@EmailInputEncodings, qw(utf-8 iso-8859-1 us-ascii));
+
+=item C<$EmailOutputEncoding>
+
+The charset for localized email.  Must be recognized by Encode.
+
+=cut
+
+Set($EmailOutputEncoding, 'utf-8');
+
+
+=back
+
+=head1 Date Handling Configuration
+
+=over 4
+
+=item C<$DateTimeFormat>
+
+You can choose date and time format.  See "Output formatters"
+section in perldoc F for more options.  This option can
+be overridden by users in their preferences.
+Some examples:
+
+C
+C 'ISO', Seconds => 0 });>
+C
+C 'RFC2822', Seconds => 0, DayOfWeek => 0 });>
+
+=cut
+
+Set($DateTimeFormat, 'DefaultFormat');
+
+# Next two options are for Time::ParseDate
+
+=item C<$DateDayBeforeMonth>
+
+Set this to 1 if your local date convention looks like "dd/mm/yy" instead of
+"mm/dd/yy". Used only for parsing, not for displaying dates.
+
+=cut
+
+Set($DateDayBeforeMonth , 1);
+
+=item C<$AmbiguousDayInPast>, C<$AmbiguousDayInFuture>
+
+Should an unspecified day or year in a date refer to a future or a
+past value? For example, should a date of "Tuesday" default to mean
+the date for next Tuesday or last Tuesday? Should the date "March 1"
+default to the date for next March or last March?
+
+Set $ for the last date, or $<$AmbiguousDayInFuture> for the
+next date.
+
+The default is usually good.
+
+=cut
+
+Set($AmbiguousDayInPast, 0);
+Set($AmbiguousDayInFuture, 0);
+
+=back
+
+=head1 Approval Configuration
+
+Configration for the approvl system
+
+=over 4
+
+=item C<$ApprovalRejectionNotes>
+
+Should rejection notes be sent to the requestors?  The default is true.
+
+=cut
+
+Set($ApprovalRejectionNotes, 1);
+
+
+=back
+
+=head1 Miscellaneous Configuration
+
+=over 4
+
+=item C<@ActiveStatus>, C<@InactiveStatus>
+
+You can define new statuses and even reorder existing statuses here.
+WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
+will break horribly. The statuses you add must be no longer than
+10 characters.
+
+=cut
+
+Set(@ActiveStatus, qw(new open stalled));
+Set(@InactiveStatus, qw(resolved rejected deleted));
+
+=item C<$LinkTransactionsRun1Scrip>
+
+RT-3.4 backward compatibility setting. Add/Delete Link used to record one
+transaction and run one scrip. Set this value to 1 if you want
+only one of the link transactions to have scrips run.
+
+=cut
+
+Set($LinkTransactionsRun1Scrip, 0);
+
+=item C<$StrictLinkACL>
+
+When this feature is enabled a user needs I rights on both
+tickets to link them together, otherwise he can have rights on either of
+them.
+
+=cut
+
+Set($StrictLinkACL, 1);
+
+=item C<$PreviewScripMessages>
+
+Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
+reply page should include the content of the messages to be sent.
+
+=cut
+
+Set($PreviewScripMessages, 0);
+
+=item C<$UseTransactionBatch>
+
+Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
+such that a resolve and comment (for example) would happen
+simultaneously, instead of as two transactions, unaware of each
+others' existence.
+
+=cut
+
+Set($UseTransactionBatch, 1);
+
+=item C<@CustomFieldValuesSources>
+
+Set C<@CustomFieldValuesSources> to a list of class names which extend
+L.  This can be used to pull lists of
+custom field values from external sources at runtime.
+
+=cut
+
+Set(@CustomFieldValuesSources, ());
+
+=item C<$CanonicalizeRedirectURLs>
+
+Set C<$CanonicalizeRedirectURLs> to 1 to use $C when redirecting rather
+than the one we get from C<%ENV>.
+
+If you use RT behind a reverse proxy, you almost certainly want to
+enable this option.
+
+=cut
+
+Set($CanonicalizeRedirectURLs, 0);
+=item C<$EnableReminders>
+
+Hide links/portlets related to Reminders by setting this to 0
+
+=cut
+
+Set($EnableReminders,1);
+
+
+=item C<@Plugins>
+
+Set C<@Plugins> to a list of external RT plugins that should be enabled (those
+plugins have to be previously downloaded and installed).
+Example:
+
+C
+
+=cut
+
+Set(@Plugins, ());
+
+=back
+
+=head1 Development Configuration
+
+=over 4
+
+=item C<$DevelMode>
+
+RT comes with a "Development mode" setting. 
+This setting, as a convenience for developers, turns on 
+all sorts of development options that you most likely don't want in 
+production:
+
+* Turns off Mason's 'static_source' directive. By default, you can't 
+  edit RT's web ui components on the fly and have RT magically pick up
+  your changes. (It's a big performance hit)
+
+ * More to come
+
+=cut
+
+Set($DevelMode, '0');
+
+
+=back
+
+=head1 Deprecated Options
+
+=over 4
+
+=item C<$AlwaysUseBase64>
+
+Encode blobs as base64 in DB (?)
+
+=item C<$TicketBaseURI>
+
+Base URI to tickets in this system; used when loading (?)
+
+=item C<$UseCodeTickets>
+
+This option is exists for backwards compatibility.  Don't use it.
+
+=back
+
+=cut
 
 1;
diff --git a/rt/etc/RT_Config.pm.in b/rt/etc/RT_Config.pm.in
index 37a2c17bb..8c9acc378 100644
--- a/rt/etc/RT_Config.pm.in
+++ b/rt/etc/RT_Config.pm.in
@@ -1,7 +1,3 @@
-#
-# WARNING: NEVER EDIT RT_Config.pm. Instead, copy any sections you want to change to RT_SiteConfig.pm
-# and edit them there.
-#
 
 package RT;
 
@@ -15,597 +11,1613 @@ use RT::Config;
 
 =cut
 
-# {{{ Base Configuration
+=head1 WARNING
 
-# $rtname is the string that RT will look for in mail messages to
-# figure out what ticket a new piece of mail belongs to
+NEVER EDIT RT_Config.pm.
 
-# Your domain name is recommended, so as not to pollute the namespace.
-# once you start using a given tag, you should probably never change it.
-# (otherwise, mail for existing tickets won't get put in the right place
+Instead, copy any sections you want to change to F and edit them there.
+
+=cut
+
+=head1 Base Configuration
+
+=over 4
+
+=item C<$rtname>
+
+C<$rtname> is the string that RT will look for in mail messages to
+figure out what ticket a new piece of mail belongs to.
+
+Your domain name is recommended, so as not to pollute the namespace.
+once you start using a given tag, you should probably never change it.
+(otherwise, mail for existing tickets won't get put in the right place)
+
+=cut
 
 Set($rtname , "example.com");
 
 
-# This regexp controls what subject tags RT recognizes as its own.
-# If you're not dealing with historical $rtname values, you'll likely
-# never have to enable this feature.
-#
-# Be VERY CAREFUL with it. Note that it overrides $rtname for subject
-# token matching and that you should use only "non-capturing" parenthesis
-# grouping. For example:
-#
-# 	Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i );
-#
-# and NOT
-# 
-# 	Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i );
-#
-# This setting would make RT behave exactly as it does without the 
-# setting enabled.
-#
-# Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
+=item C<$EmailSubjectTagRegex>
+
+This regexp controls what subject tags RT recognizes as its own.
+If you're not dealing with historical C<$rtname> values, you'll likely
+never have to enable this feature.
+
+Be VERY CAREFUL with it. Note that it overrides C<$rtname> for subject
+token matching and that you should use only "non-capturing" parenthesis
+grouping. For example:
+
+C
+
+and NOT
+
+C
+
+This setting would make RT behave exactly as it does without the 
+setting enabled.
+
+=cut
+
+#Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
+
+
 
+=item C<$Organization>
 
+You should set this to your organization's DNS domain. For example,
+I or I. It's used by the linking interface to
+guarantee that ticket URIs are unique and easy to construct.
 
-# You should set this to your organization's DNS domain. For example,
-# fsck.com or asylum.arkham.ma.us. It's used by the linking interface to
-# guarantee that ticket URIs are unique and easy to construct.
+=cut
 
 Set($Organization , "example.com");
 
-# $user_passwd_min defines the minimum length for user passwords. Setting
-# it to 0 disables this check
+=item C<$MinimumPasswordLength>
+
+C<$MinimumPasswordLength> defines the minimum length for user
+passwords. Setting it to 0 disables this check.
+
+=cut
+
 Set($MinimumPasswordLength , "5");
 
-# $Timezone is used to convert times entered by users into GMT and back again
-# It should be set to a timezone recognized by your local unix box.
+=item C<$Timezone>
+
+C<$Timezone> is used to convert times entered by users into GMT and back again
+It should be set to a timezone recognized by your local unix box.
+
+=cut
+
 Set($Timezone , 'US/Eastern');
 
-# }}}
+=back
+
+=head1 Database Configuration
+
+=over 4
+
+=item C<$DatabaseType>
 
-# {{{ Database Configuration
+Database driver being used; case matters.
 
-# Database driver beeing used. Case matters
-# Valid types are "mysql", "Oracle" and "Pg"
+Valid types are "mysql", "Oracle" and "Pg"
+
+=cut
 
 Set($DatabaseType , '@DB_TYPE@');
 
-# The domain name of your database server
-# If you're running mysql and it's on localhost,
-# leave it blank for enhanced performance
+=item C<$DatabaseHost>, C<$DatabaseRTHost>
+
+The domain name of your database server.
+
+If you're running mysql and it's on localhost,
+leave it blank for enhanced performance
+
+=cut
+
 Set($DatabaseHost   , '@DB_HOST@');
 Set($DatabaseRTHost , '@DB_RT_HOST@');
 
-# The port that your database server is running on.  Ignored unless it's
-# a positive integer. It's usually safe to leave this blank
+=item C<$DatabasePort>
+
+The port that your database server is running on.  Ignored unless it's
+a positive integer. It's usually safe to leave this blank
+
+=cut
+
 Set($DatabasePort , '@DB_PORT@');
 
-#The name of the database user (inside the database)
+=item C<$DatabaseUser>
+
+The name of the database user (inside the database)
+
+=cut
+
 Set($DatabaseUser , '@DB_RT_USER@');
 
-# Password the DatabaseUser should use to access the database
+=item C<$DatabasePassword>
+
+Password the C<$DatabaseUser> should use to access the database
+
+=cut
+
 Set($DatabasePassword , '@DB_RT_PASS@');
 
-# The name of the RT's database on your database server
+=item C<$DatabaseName>
+
+The name of the RT's database on your database server. For Oracle
+it's SID, DB objects are created in L<$DatabaseUser>'s schema.
+
+=cut
+
 Set($DatabaseName , '@DB_DATABASE@');
 
-# If you're using Postgres and have compiled in SSL support,
-# set DatabaseRequireSSL to 1 to turn on SSL communication
+=item C<$DatabaseRequireSSL>
+
+If you're using Postgres and have compiled in SSL support,
+set C<$DatabaseRequireSSL> to 1 to turn on SSL communication
+
+=cut
+
 Set($DatabaseRequireSSL , undef);
 
-# }}}
+=item C<$UseSQLForACLChecks>
+
+In RT for ages ACL are checked after search what in some situtations
+result in empty search pages and wrong count of tickets.
+
+Set C<$UseSQLForACLChecks> to 1 to use SQL and get rid of these problems.
+
+However, this option is beta. In some cases it result in performance
+improvements, but some setups can not handle it.
+
+=cut
+
+Set($UseSQLForACLChecks, undef);
+
+=back
+
+=head1 Incoming Mail Gateway Configuration
+
+=over 4
 
-# {{{ Incoming mail gateway configuration
+=item C<$OwnerEmail>
 
-# OwnerEmail is the address of a human who manages RT. RT will send
-# errors generated by the mail gateway to this address.  This address
-# should _not_ be an address that's managed by your RT instance.
+C<$OwnerEmail> is the address of a human who manages RT. RT will send
+errors generated by the mail gateway to this address.  This address
+should _not_ be an address that's managed by your RT instance.
+
+=cut
 
 Set($OwnerEmail , 'root');
 
-# If $LoopsToRTOwner is defined, RT will send mail that it believes
-# might be a loop to $RT::OwnerEmail
+=item C<$LoopsToRTOwner>
+
+If C<$LoopsToRTOwner> is defined, RT will send mail that it believes
+might be a loop to C<$OwnerEmail>
+
+=cut
 
 Set($LoopsToRTOwner , 1);
 
-# If $StoreLoops is defined, RT will record messages that it believes
-# to be part of mail loops.
-# As it does this, it will try to be careful not to send mail to the
-# sender of these messages
+=item C<$StoreLoops>
+
+If C<$StoreLoops> is defined, RT will record messages that it believes
+to be part of mail loops.
+
+As it does this, it will try to be careful not to send mail to the
+sender of these messages
+
+=cut
 
 Set($StoreLoops , undef);
 
-# $MaxAttachmentSize sets the maximum size (in bytes) of attachments stored
-# in the database.
+=item C<$MaxAttachmentSize>
+
+C<$MaxAttachmentSize> sets the maximum size (in bytes) of attachments stored
+in the database.
+
+For mysql and oracle, we set this size at 10 megabytes.
+If you're running a postgres version earlier than 7.1, you will need
+to drop this to 8192. (8k)
+
+=cut
 
-# For mysql and oracle, we set this size at 10 megabytes.
-# If you're running a postgres version earlier than 7.1, you will need
-# to drop this to 8192. (8k)
 
 Set($MaxAttachmentSize , 10000000);
 
-# $TruncateLongAttachments: if this is set to a non-undef value,
-# RT will truncate attachments longer than MaxAttachmentSize.
+=item C<$TruncateLongAttachments>
+
+C<$TruncateLongAttachments>: if this is set to a non-undef value,
+RT will truncate attachments longer than C<$MaxAttachmentSize>.
+
+=cut
 
 Set($TruncateLongAttachments , undef);
 
-# $DropLongAttachments: if this is set to a non-undef value,
-# RT will silently drop attachments longer than MaxAttachmentSize.
+=item C<$DropLongAttachments>
+
+C<$DropLongAttachments>: if this is set to a non-undef value,
+RT will silently drop attachments longer than C.
+
+=cut
 
 Set($DropLongAttachments , undef);
 
-# If $ParseNewMessageForTicketCcs is true, RT will attempt to divine
-# Ticket 'Cc' watchers from the To and Cc lines of incoming messages
-# Be forewarned that if you have _any_ addresses which forward mail to
-# RT automatically and you enable this option without modifying
-# "RTAddressRegexp" below, you will get yourself into a heap of trouble.
+=item C<$ParseNewMessageForTicketCcs>
+
+If C<$ParseNewMessageForTicketCcs> is true, RT will attempt to divine
+Ticket 'Cc' watchers from the To and Cc lines of incoming messages
+Be forewarned that if you have _any_ addresses which forward mail to
+RT automatically and you enable this option without modifying
+C<$RTAddressRegexp> below, you will get yourself into a heap of trouble.
+
+=cut
 
 Set($ParseNewMessageForTicketCcs , undef);
 
-# RTAddressRegexp is used to make sure RT doesn't add itself as a ticket CC if
-# the setting above is enabled.
+=item C<$RTAddressRegexp> 
+
+C<$RTAddressRegexp> is used to make sure RT doesn't add itself as a ticket CC if
+the setting above is enabled.  It is important that you set this to a 
+regular expression that matches all addresses used by your RT.  This lets RT
+avoid sending mail to itself.  It will also hide RT addresses from the list of 
+"One-time Cc" and Bcc lists on ticket reply.
+
+=cut
 
 Set($RTAddressRegexp , '^rt\@example.com$');
 
-# RT provides functionality which allows the system to rewrite
-# incoming email addresses.  In its simplest form,
-# you can substitute the value in CanonicalizeEmailAddressReplace
-# for the value in CanonicalizeEmailAddressMatch
-# (These values are passed to the CanonicalizeEmailAddress subroutine in RT/User.pm)
-# By default, that routine performs a s/$Match/$Replace/gi on any address passed to it
+=item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace>
+
+RT provides functionality which allows the system to rewrite
+incoming email addresses.  In its simplest form,
+you can substitute the value in $
+for the value in $
+(These values are passed to the $ subroutine in
+ F)
+
+By default, that routine performs a C on any address
+passed to it.
+
+=cut
 
 #Set($CanonicalizeEmailAddressMatch , '@subdomain\.example\.com$');
 #Set($CanonicalizeEmailAddressReplace , '@example.com');
 
-# set this to true and the create new user page will use the values that you
-# enter in the form but use the function CanonicalizeUserInfo in User_Local.pm
-Set($CanonicalizeOnCreate , 0);
-
-# If $SenderMustExistInExternalDatabase is true, RT will refuse to
-# create non-privileged accounts for unknown users if you are using
-# the "LookupSenderInExternalDatabase" option.
-# Instead, an error message will be mailed and RT will forward the
-# message to $RTOwner.
-#
-# If you are not using $LookupSenderInExternalDatabase, this option
-# has no effect.
-#
-# If you define an AutoRejectRequest template, RT will use this
-# template for the rejection message.
+=item C<$CanonicalizeEmailAddressMatch>
+
+Set this to true and the create new user page will use the values that you
+enter in the form but use the function CanonicalizeUserInfo in
+F
+
+=cut
+
+Set($CanonicalizeOnCreate, 0);
+
+=item C<$SenderMustExistInExternalDatabase>
+
+If C<$SenderMustExistInExternalDatabase> is true, RT will refuse to
+create non-privileged accounts for unknown users if you are using
+the C<$LookupSenderInExternalDatabase> option.
+Instead, an error message will be mailed and RT will forward the
+message to C<$RTOwner>.
+
+If you are not using C<$LookupSenderInExternalDatabase>, this option
+has no effect.
+
+If you define an AutoRejectRequest template, RT will use this
+template for the rejection message.
+
+=cut
 
 Set($SenderMustExistInExternalDatabase , undef);
 
-# }}}
+=item C<$ValidateUserEmailAddresses>
+
+If C<$ValidateUserEmailAddresses> is true, RT will refuse to create users with
+an invalid email address (as specified in RFC 2822) or with an email address
+made of multiple email adresses.
+
+=cut
+
+Set($ValidateUserEmailAddresses, undef);
+
+=item C<@MailPlugins>
 
-# {{{ Outgoing mail configuration
+C<@MailPlugins> is a list of auth plugins for L
+to use; see L
 
-# RT is designed such that any mail which already has a ticket-id associated
-# with it will get to the right place automatically.
+=cut
+
+=item C<$UnsafeEmailCommands>
+
+C<$UnsafeEmailCommands>, if set to true, enables 'take' and 'resolve'
+as possible actions via the mail gateway.  As its name implies, this
+is very unsafe, as it allows email with a forged sender to possibly
+resolve arbitrary tickets!
+
+=cut
+
+=item C<$ExtractSubjectTagMatch>, C<$ExtractSubjectTagNoMatch>
+
+The default "extract remote tracking tags" scrip settings; these
+detect when your RT is talking to another RT, and adjusts the
+subject accordingly.
+
+=cut
+
+Set($ExtractSubjectTagMatch, qr/\[.+? #\d+\]/);
+Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex}
+       ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/
+       : qr/\[\Q$RT::rtname\E #\d+\]/));
+
+=back
+
+=head1 Outgoing Mail Configuration
 
-# $CorrespondAddress and $CommentAddress are the default addresses
-# that will be listed in From: and Reply-To: headers of correspondence
-# and comment mail tracked by RT, unless overridden by a queue-specific
-# address.
+=over 4
 
-Set($CorrespondAddress , 'RT_CorrespondAddressNotSet');
+=item C<$MailCommand>
 
-Set($CommentAddress , 'RT_CommentAddressNotSet');
+C<$MailCommand> defines which method RT will use to try to send mail.
+We know that 'sendmailpipe' works fairly well.  If 'sendmailpipe'
+doesn't work well for you, try 'sendmail'.  Other options are 'smtp'
+or 'qmail'.
 
-#Sendmail Configuration
+Note that you should remove the '-t' from C<$SendmailArguments>
+if you use 'sendmail' rather than 'sendmailpipe'
 
-# $MailCommand defines which method RT will use to try to send mail
-# We know that 'sendmailpipe' works fairly well.
-# If 'sendmailpipe' doesn't work well for you, try 'sendmail'
-#
-# Note that you should remove the '-t' from $SendmailArguments
-# if you use 'sendmail' rather than 'sendmailpipe'
+=cut
 
 Set($MailCommand , 'sendmailpipe');
 
-# $SendmailArguments defines what flags to pass to $Sendmail
-# assuming you picked 'sendmail' or 'sendmailpipe' as the $MailCommand above.
-# If you picked 'sendmailpipe', you MUST add a -t flag to $SendmailArguments
+=item C<$SetOutgoingMailFrom>
+
+C<$SetOutgoingMailFrom> tells RT to set the sender envelope with the correspond
+mail address of the ticket's queue.
+
+Warning: If you use this setting, bounced mails will appear to be incoming
+mail to the system, thus creating new tickets.
+
+=cut
+
+Set($SetOutgoingMailFrom, 0);
+
+=item C<$OverrideOutgoingMailFrom>
+
+C<$OverrideOutgoingMailFrom> is used for overwriting the Correspond
+address of the queue. The option is a hash reference of queue name to
+email address.
+
+If there is no ticket involved, then the value of the C key will be
+used.
+
+=cut
+
+Set($OverrideOutgoingMailFrom, {
+#    'Default' => 'admin@rt.example.com',
+#    'General' => 'general@rt.example.com',
+});
+
+=back
+
+=head1 Sendmail Configuration
+
+These options only take effect if C<$MailCommand> is 'sendmail' or
+'sendmailpipe'
+
+=over 4
+
+=item C<$SendmailArguments> 
+
+C<$SendmailArguments> defines what flags to pass to C<$SendmailPath>
+If you picked 'sendmailpipe', you MUST add a -t flag to C<$SendmailArguments>
+These options are good for most sendmail wrappers and workalikes
+
+These arguments are good for sendmail brand sendmail 8 and newer
+C
+
+=cut
 
-# These options are good for most sendmail wrappers and workalikes
 Set($SendmailArguments , "-oi -t");
 
-# $SendmailBounceArguments defines what flags to pass to $Sendmail
-# assuming RT needs to send an error (ie. bounce).
+
+=item C<$SendmailBounceArguments>
+
+C<$SendmailBounceArguments> defines what flags to pass to C<$Sendmail>
+assuming RT needs to send an error (ie. bounce).
+
+=cut
 
 Set($SendmailBounceArguments , '-f "<>"');
 
-# These arguments are good for sendmail brand sendmail 8 and newer
-#Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m");
+=item C<$SendmailPath>
+
+If you selected 'sendmailpipe' above, you MUST specify the path to
+your sendmail binary in C<$SendmailPath>.
+
+=cut
 
-# If you selected 'sendmailpipe' above, you MUST specify the path
-# to your sendmail binary in $SendmailPath.
-# !! If you did not # select 'sendmailpipe' above, this has no effect!!
 Set($SendmailPath , "/usr/sbin/sendmail");
 
-# By default, RT sets the outgoing mail's "From:" header to
-# "SenderName via RT".  Setting this option to 0 disables it.
 
-Set($UseFriendlyFromLine , 1);
+=back
 
-# sprintf() format of the friendly 'From:' header; its arguments
-# are SenderName and SenderEmailAddress.
-Set($FriendlyFromLineFormat , "\"%s via RT\" <%s>");
+=head1 SMTP Configuration
 
-# RT can optionally set a "Friendly" 'To:' header when sending messages to
-# Ccs or AdminCcs (rather than having a blank 'To:' header.
+These options only take effect if C<$MailCommand> is 'smtp'
 
-# This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
-# If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
-# you _must_ disable this option.
+=over 4
 
-Set($UseFriendlyToLine , 0);
+=item C<$SMTPServer>
 
-# sprintf() format of the friendly 'From:' header; its arguments
-# are WatcherType and TicketId.
-Set($FriendlyToLineFormat, "\"%s of $RT::rtname Ticket #%s\":;");
+C<$SMTPServer> should be set to the hostname of the SMTP server to use
 
-# By default, RT doesn't notify the person who performs an update, as they
-# already know what they've done. If you'd like to change this behaviour,
-# Set $NotifyActor to 1
+=cut
 
-Set($NotifyActor, 0);
+Set($SMTPServer, undef);
 
-# By default, RT records each message it sends out to its own internal database.# To change this behaviour, set $RecordOutgoingEmail to 0 
+=item C<$SMTPFrom>
 
-Set($RecordOutgoingEmail, 1);
+C<$SMTPFrom> should be set to the 'From' address to use, if not the
+email's 'From'
 
-# VERP support (http://cr.yp.to/proto/verp.txt)
-# uncomment the following two directives to generate envelope senders
-# of the form ${VERPPrefix}${originaladdress}@${VERPDomain}
-# (i.e. rt-jesse=fsck.com@rt.example.com ) This currently only works
-# with sendmail and sendmailppie.
-# Set($VERPPrefix, 'rt-');
-# Set($VERPDomain, $RT::Organization);
+=cut
 
-# }}}
+Set($SMTPFrom, undef);
 
-# {{{ Logging
+=item C<$SMTPDebug> 
 
-# Logging.  The default is to log anything except debugging
-# information to syslog.  Check the Log::Dispatch POD for
-# information about how to get things by syslog, mail or anything
-# else, get debugging info in the log, etc.
+C<$SMTPDebug> should be set to true to debug SMTP mail sending
 
-#  It might generally make
-# sense to send error and higher by email to some administrator.
-# If you do this, be careful that this email isn't sent to this RT instance.
+=cut
 
-# the minimum level error that will be logged to the specific device.
-# levels from lowest to highest:
-#  debug info notice warning error critical alert emergency
+Set($SMTPDebug, 0);
 
-#  Mail loops will generate a critical log message.
-Set($LogToSyslog    , 'debug');
-Set($LogToScreen    , 'error');
-Set($LogToFile      , undef);
-Set($LogDir, '@RT_LOG_PATH@');
-Set($LogToFileNamed , "rt.log");    #log to rt.log
+=back
 
-# If true generates stack traces to file log or screen
-# never generates traces to syslog
+=head1 Other Mailer Configuration
 
-Set($LogStackTraces , 0);
+=over 4
 
-# On Solaris or UnixWare, set to ( socket => 'inet' ).  Options here
-# override any other options RT passes to Log::Dispatch::Syslog.
-# Other interesting flags include facility and logopt.  (See the
-# Log::Dispatch::Syslog documentation for more information.)  (Maybe
-# ident too, if you have multiple RT installations.)
+=item C<@MailParams>
 
-@LogToSyslogConf = () unless (@LogToSyslogConf);
+C<@MailParams> defines a list of options passed to $MailCommand if it
+is not 'sendmailpipe', 'sendmail', or 'smtp'
 
-# RT has rudimentary SQL statement logging support if you have
-# DBIx-SearchBuilder 1.31_1 or higher; simply set $StatementLog to be
-# the level that you wish SQL statements to be logged at.
-Set($StatementLog, undef);
+=cut
 
-# }}}
+Set(@MailParams, ());
 
-# {{{ Web interface configuration
+=item C<$CorrespondAddress>, C<$CommentAddress>
 
-# This determines the default stylesheet the RT web interface will use.
-# RT ships with two valid values by default:
-#
-#   3.5-default     The totally new, default layout for RT 3.5
-#   3.4-compat      A 3.4 compatibility stylesheet to make RT 3.5 look
-#                   (mostly) like 3.4
-#
-# This value actually specifies a directory in share/html/NoAuth/css/
-# from which RT will try to load the file main.css (which should
-# @import any other files the stylesheet needs).  This allows you to
-# easily and cleanly create your own stylesheets to apply to RT.
+RT is designed such that any mail which already has a ticket-id associated
+with it will get to the right place automatically.
 
-Set($WebDefaultStylesheet, '3.5-default');
+C<$CorrespondAddress> and C<$CommentAddress> are the default addresses
+that will be listed in From: and Reply-To: headers of correspondence
+and comment mail tracked by RT, unless overridden by a queue-specific
+address.
 
-# Define the directory name to be used for images in rt web
-# documents.
+=cut
 
-# If you're putting the web ui somewhere other than at the root of
-# your server, you should set $WebPath to the path you'll be 
-# serving RT at.
-# $WebPath requires a leading / but no trailing /.
-#
-# In most cases, you should leave $WebPath set to '' (an empty value).
+Set($CorrespondAddress , '');
 
-Set($WebPath , "");
+Set($CommentAddress , '');
 
-# If we're running as a superuser, run on port 80
-# Otherwise, pick a high port for this user.
+=item C<$DashboardAddress>
 
-Set($WebPort , 80);# + ($< * 7274) % 32766 + ($< && 1024));
+The email address from which RT will send dashboards. If none is set, then
+C<$OwnerEmail> will be used.
 
-# This is the Scheme, server and port for constructing urls to webrt
-# $WebBaseURL doesn't need a trailing /
+=cut
 
-Set($WebBaseURL , "http://localhost:$WebPort");
+Set($DashboardAddress, '');
 
-Set($WebURL , $WebBaseURL . $WebPath . "/");
+=item C<$UseFriendlyFromLine>
 
-# $WebImagesURL points to the base URL where RT can find its images.
+By default, RT sets the outgoing mail's "From:" header to
+"SenderName via RT".  Setting C<$UseFriendlyFromLine> to 0 disables it.
 
-Set($WebImagesURL , $WebPath . "/NoAuth/images/");
+=cut
 
-# $LogoURL points to the URL of the RT logo displayed in the web UI
+Set($UseFriendlyFromLine, 1);
 
-Set($LogoURL , $WebImagesURL . "bplogo.gif");
+=item C<$FriendlyFromLineFormat>
 
-# WebNoAuthRegex - What portion of RT's URLspace should not require
-# authentication.
-Set($WebNoAuthRegex, qr!^/rt(?:/+NoAuth/|
-                            /+REST/\d+\.\d+/NoAuth/)!x );
+C format of the friendly 'From:' header; its arguments
+are SenderName and SenderEmailAddress.
 
-# SelfServiceRegex - What portion of RT's URLspace should
-# be accessible to Unprivileged users
-# This does not override the redirect from /Ticket/Display.html
-# to /SelfService/Display.html when Unprivileged
-# users attempt to access ticked displays
-Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
+=cut
 
-# For message boxes, set the entry box width and what type of wrapping
-# to use.
-#
-# Default width: 72
-Set($MessageBoxWidth , 72);
+Set($FriendlyFromLineFormat, "\"%s via RT\" <%s>");
 
-# Default wrapping: "HARD"  (choices "SOFT", "HARD")
-Set($MessageBoxWrap, "HARD");
+=item C<$UseFriendlyToLine>
 
-# Support implicit links in WikiText custom fields?  A true value
-# causes InterCapped or ALLCAPS words in WikiText fields to
-# automatically become links to searches for those words.  If used on
-# RTFM articles, it links to the RTFM article with that name.
-Set($WikiImplicitLinks, 0);
+RT can optionally set a "Friendly" 'To:' header when sending messages to
+Ccs or AdminCcs (rather than having a blank 'To:' header.
 
-# if TrustHTMLAttachments is not defined, we will display them
-# as text. This prevents malicious HTML and javascript from being
-# sent in a request (although there is probably more to it than that)
-Set($TrustHTMLAttachments , undef);
-
-# Should RT redistribute correspondence that it identifies as
-# machine generated? A true value will do so; setting this to '0'
-# will cause no such messages to be redistributed.
-# You can also use 'privileged' (the default), which will redistribute
-# only to privileged users. This helps to protect against malformed
-# bounces and loops caused by autocreated requestors with bogus addresses.
-Set($RedistributeAutoGeneratedMessages, 'privileged');
+This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
+If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
+you _must_ disable this option.
 
-# If PreferRichText is set to a true value, RT will show HTML/Rich text
-# messages in preference to their plaintext alternatives. RT "scrubs" the 
-# html to show only a minimal subset of HTML to avoid possible contamination
-# by cross-site-scripting attacks.
-Set($PreferRichText, undef);
+=cut
 
-# If $WebExternalAuth is defined, RT will defer to the environment's
-# REMOTE_USER variable.
+Set($UseFriendlyToLine, 0);
 
-Set($WebExternalAuth , undef);
+=item C<$FriendlyToLineFormat>
 
-# If $WebFallbackToInternalAuth is undefined, the user is allowed a chance
-# of fallback to the login screen, even if REMOTE_USER failed.
+C format of the friendly 'From:' header; its arguments
+are WatcherType and TicketId.
 
-Set($WebFallbackToInternalAuth , undef);
+=cut
 
-# $WebExternalGecos means to match 'gecos' field as the user identity);
-# useful with mod_auth_pwcheck and IIS Integrated Windows logon.
+Set($FriendlyToLineFormat, "\"%s of ". RT->Config->Get('rtname') ." Ticket #%s\":;");
 
-Set($WebExternalGecos , undef);
+=item C<$NotifyActor>
 
-# $WebExternalAuto will create users under the same name as REMOTE_USER
-# upon login, if it's missing in the Users table.
+By default, RT doesn't notify the person who performs an update, as they
+already know what they've done. If you'd like to change this behaviour,
+Set C<$NotifyActor> to 1
 
-Set($WebExternalAuto , undef);
+=cut
 
-# If $WebExternalAuto is true, this will be passed to User's
-# Create method.  Use it to set defaults, such as creating 
-# Unprivileged users with { Privileged => 0 }
-# Must be a hashref of arguments
+Set($NotifyActor, 0);
 
-Set($AutoCreate, undef);
+=item C<$RecordOutgoingEmail>
 
-# $WebSessionClass is the class you wish to use for managing Sessions.
-# It defaults to use your SQL database, but if you are using MySQL 3.x and
-# plans to use non-ascii Queue names, uncomment and add this line to
-# RT_SiteConfig.pm will prevent session corruption.
+By default, RT records each message it sends out to its own internal database.
+To change this behavior, set C<$RecordOutgoingEmail> to 0 
 
-# Set($WebSessionClass , 'Apache::Session::File');
+=cut
 
+Set($RecordOutgoingEmail, 1);
 
-# By default, RT's session cookie isn't marked as "secure" Some web browsers 
-# will treat secure cookies more carefully than non-secure ones, being careful
-# not to write them to disk, only send them over an SSL secured connection 
-# and so on. To enable this behaviour, set # $WebSecureCookies to a true value. 
-# NOTE: You probably don't want to turn this on _unless_ users are only connecting
-# via SSL encrypted HTTP connections.
+=item C<$VERPPrefix>, C<$VERPPrefix>
 
-Set($WebSecureCookies, 0);
+VERP support (http://cr.yp.to/proto/verp.txt)
 
+uncomment the following two directives to generate envelope senders
+of the form C<${VERPPrefix}${originaladdress}@${VERPDomain}>
+(i.e. rt-jesse=fsck.com@rt.example.com ).
 
-# By default, RT clears its database cache after every page view.
-# This ensures that you've always got the most current information 
-# when working in a multi-process (mod_perl or FastCGI) Environment
-# Setting $WebFlushDbCacheEveryRequest to '0' will turn this off,
-# which will speed RT up a bit, at the expense of a tiny bit of data 
-# accuracy.
+This currently only works with sendmail and sendmailppie.
 
-Set($WebFlushDbCacheEveryRequest, '1');
+=cut
 
+# Set($VERPPrefix, 'rt-');
+# Set($VERPDomain, $RT::Organization);
 
-# $MaxInlineBody is the maximum attachment size that we want to see
-# inline when viewing a transaction. 13456 is a random sane-sounding
-# default.
 
-Set($MaxInlineBody, 13456);
+=item C<$ForwardFromUser>
 
-# $DefaultSummaryRows is default number of rows displayed in for search
-# results on the frontpage.
+By default, RT forwards a message using queue's address and adds RT's tag into
+subject of the outgoing message, so recipients' replies go into RT as correspondents.
 
-Set($DefaultSummaryRows, 10);
+To change this behavior, set C<$ForwardFromUser> to true value and RT will use
+address of the current user and leave subject without RT's tag.
 
-# By default, RT shows newest transactions at the bottom of the ticket
-# history page, if you want see them at the top set this to '0'.
+=cut
 
-Set($OldestTransactionsFirst, '1');
+Set($ForwardFromUser, 0);
 
-# By default, RT shows images attached to incoming (and outgoing) ticket updates
-# inline. Set this variable to 0 if you'd like to disable that behaviour
+=item C<$ShowBccHeader>
 
-Set($ShowTransactionImages, 1);
+By default RT hides from the web UI information about blind copies user sent on
+reply or comment.
 
+To change this set the following option to true value.
 
-# $HomepageComponents is an arrayref of allowed components on a user's
-# customized homepage ("RT at a glance").
+=cut
 
-Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders  RefreshHomepage)]);
+Set($ShowBccHeader, 0);
 
-# @MasonParameters is the list of parameters for the constructor of
-# HTML::Mason's Apache or CGI Handler.  This is normally only useful
-# for debugging, eg. profiling individual components with:
-#     use MasonX::Profiler; # available on CPAN
-#     @MasonParameters = (preamble => 'my $p = MasonX::Profiler->new($m, $r);');
+=item C<$DashboardSubject>
 
-@MasonParameters = () unless (@MasonParameters);
+Lets you set the subject of dashboards. Arguments are the frequency (Daily,
+Weekly, Monthly) of the dashboard and the dashboard's name. [_1] for the name
+of the dashboard.
 
-# $DefaultSearchResultFormat is the default format for RT search results
-Set ($DefaultSearchResultFormat, qq{
-   '__id__/TITLE:#',
-   '__Subject__/TITLE:Subject',
-   Status,
-   QueueName, 
-   OwnerName, 
-   Priority, 
-   '__NEWLINE__',
-   '', 
-   '__Requestors__',
-   '__CreatedRelative__',
-   '__ToldRelative__',
-   '__LastUpdatedRelative__',
-   '__TimeLeft__'});
+=cut
 
-# If $SuppressInlineTextFiles is set to a true value, then uploaded
-# text files (text-type attachments with file names) are prevented
-# from being displayed in-line when viewing a ticket's history.
+Set($DashboardSubject, '%s Dashboard: %s');
 
-Set($SuppressInlineTextFiles, undef);
+=back
 
-# If $DontSearchFileAttachments is set to a true value, then uploaded
-# files (attachments with file names) are not searched during full-content
-# ticket searches.
+=head1 GnuPG Configuration
 
-Set($DontSearchFileAttachments, undef);
+A full description of the (somewhat extensive) GnuPG integration can be found 
+by running the command `perldoc L`  (or `perldoc
+        lib/RT/Crypt/GnuPG.pm` from your RT install directory).
 
-# The GD module (which RT uses for graphs) uses a builtin font that doesn't
-# have full Unicode support. You can use a particular TrueType font by setting
-# $ChartFont to the absolute path of that font. Your GD library must have
-# support for TrueType fonts to use this option.
+=over 4
 
-Set($ChartFont, undef);
+=item C<%GnuPG>
 
+Set C to 'inline' to use inline encryption and
+signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format.
 
-# }}}
+If you want to allow people to encrypt attachments inside the DB then
+set C to true
 
-# {{{ RT UTF-8 Settings
+Set C to false if you don't want to reject
+emails encrypted for key RT doesn't have and can not decrypt.
 
-# An array that contains languages supported by RT's internationalization
-# interface.  Defaults to all *.po lexicons; setting it to qw(en ja) will make
-# RT bilingual instead of multilingual, but will save some memory.
+Set C to false if you don't want to reject letters
+with incorrect GnuPG data.
 
-@LexiconLanguages = qw(*) unless (@LexiconLanguages);
+=cut
 
-# An array that contains default encodings used to guess which charset
-# an attachment uses if not specified.  Must be recognized by
-# Encode::Guess.
+Set( %GnuPG,
+    Enable => @RT_GPG@,
+    OutgoingMessagesFormat => 'RFC', # Inline
+    AllowEncryptDataInDB   => 0,
 
-@EmailInputEncodings = qw(utf-8 iso-8859-1 us-ascii) unless (@EmailInputEncodings);
+    RejectOnMissingPrivateKey => 1,
+    RejectOnBadData           => 1,
+);
 
-# The charset for localized email.  Must be recognized by Encode.
+=item C<%GnuPGOptions>
 
-Set($EmailOutputEncoding , 'utf-8');
+Options of GnuPG program.
 
-# }}}
+If you override this in your RT_SiteConfig, you should be sure
+to include a homedir setting.
 
-# {{{ RT Date Handling Options (for Time::ParseDate)
+NOTE that options with '-' character MUST be quoted.
 
-# Set this to 1 if your local date convention looks like "dd/mm/yy"
-# instead of "mm/dd/yy".
+=cut
 
-Set($DateDayBeforeMonth , 1);
+Set(%GnuPGOptions,
+    homedir => '@RT_VAR_PATH@/data/gpg',
 
-# Should an unspecified day or year in a date refer to a future or a
-# past value? For example, should a date of "Tuesday" default to mean
-# the date for next Tuesday or last Tuesday? Should the date "March 1"
-# default to the date for next March or last March?
-# Set to 0 for the next date or 1 for the last date.
+# URL of a keyserver
+#    keyserver => 'hkp://subkeys.pgp.net',
 
-Set($AmbiguousDayInPast , 1);
+# enables the automatic retrieving of keys when encrypting
+#    'auto-key-locate' => 'keyserver',
 
-# }}}
+# enables the automatic retrieving of keys when verifying signatures
+#    'auto-key-retrieve' => undef,
+);
 
-# {{{ Miscellaneous RT Settings
 
-# You can define new statuses and even reorder existing statuses here.
-# WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
-# will break horribly. The statuses you add must be no longer than
-# 10 characters.
+=back
 
-@ActiveStatus = qw(new open stalled) unless @ActiveStatus;
-@InactiveStatus = qw(resolved rejected deleted) unless @InactiveStatus;
+=head1 Logging Configuration
 
-# Backward compatability setting. Add/Delete Link used to record one
-# transaction and run one scrip. Set this value to 1 if you want
-# only one of the link transactions to have scrips run.
-Set($LinkTransactionsRun1Scrip , 0);
+The default is to log anything except debugging
+information to syslog.  Check the L POD for
+information about how to get things by syslog, mail or anything
+else, get debugging info in the log, etc.
 
-# When this feature is enabled an user need ModifyTicket right on both
-# tickets to link them together, otherwise he can have right on any of
-# two.
-Set($StrictLinkACL, 1);
+It might generally make sense to send error and higher by email to
+some administrator.  If you do this, be careful that this email
+isn't sent to this RT instance.  Mail loops will generate a critical
+log message.
 
-# }}}
+=over 4
 
+=item C<$LogToSyslog>, C<$LogToScreen>
 
-# {{{ Development Mode
-#
-# RT comes with a "Development mode" setting. 
-# This setting, as a convenience for developers, turns on 
-# all sorts of development options that you most likely don't want in 
-# production:
-#
-# * Turns off Mason's 'static_source' directive. By default, you can't 
-#   edit RT's web ui components on the fly and have RT magically pick up
-#   your changes. (It's a big performance hit)
-#
-#  * More to come
-#
+The minimum level error that will be logged to the specific device.
+From lowest to highest priority, the levels are:
+ debug info notice warning error critical alert emergency
 
-Set($DevelMode, '@RT_DEVEL_MODE@');
+=cut
+
+Set($LogToSyslog    , 'info');
+Set($LogToScreen    , 'info');
+
+=item C<$LogToFile>, C<$LogDir>, C<$LogToFileNamed>
+
+Logging to a standalone file is also possible, but note that the
+file should needs to both exist and be writable by all direct users
+of the RT API.  This generally include the web server, whoever
+rt-crontool runs as.  Note that as rt-mailgate and the RT CLI go
+through the webserver, so their users do not need to have write
+permissions to this file. If you expect to have multiple users of
+the direct API, Best Practical recommends using syslog instead of
+direct file logging.
+
+=cut
+
+Set($LogToFile      , undef);
+Set($LogDir, '@RT_LOG_PATH@');
+Set($LogToFileNamed , "rt.log");    #log to rt.log
+
+=item C<$LogStackTraces>
+
+If set to a log level then logging will include stack traces for
+messages with level equal to or greater than specified.
+
+NOTICE: Stack traces include parameters supplied to functions or
+methods. It is possible for stack trace logging to reveal sensitive
+information such as passwords or ticket content in your logs.
+
+=cut
+
+Set($LogStackTraces, '');
+
+=item C<@LogToSyslogConf>
+
+On Solaris or UnixWare, set to ( socket => 'inet' ).  Options here
+override any other options RT passes to L.
+Other interesting flags include facility and logopt.  (See the
+L documentation for more information.)  (Maybe
+ident too, if you have multiple RT installations.)
+
+=cut
+
+Set(@LogToSyslogConf, ());
+
+=item C<$StatementLog>,
+
+RT has rudimentary SQL statement logging support if you have
+DBIx-SearchBuilder 1.31_1 or higher; simply set C<$StatementLog> to be
+the level that you wish SQL statements to be logged at.
+
+=cut
+
+Set($StatementLog, undef);
+
+=back
+
+=head1 Web Interface Configuration
+
+=over 4
+
+=item C<$WebDefaultStylesheet>
+
+This determines the default stylesheet the RT web interface will use.
+RT ships with several themes by default:
+
+  web2            The totally new, default layout for RT 3.8
+  3.5-default     RT 3.5 and 3.6 original layout
+  3.4-compat      A 3.4 compatibility stylesheet to make RT look
+                  (mostly) like 3.4
+
+This value actually specifies a directory in F
+from which RT will try to load the file main.css (which should
+@import any other files the stylesheet needs).  This allows you to
+easily and cleanly create your own stylesheets to apply to RT.  This
+option can be overridden by users in their preferences.
+
+=cut
+
+Set($WebDefaultStylesheet, 'web2');
+
+=item C<$UsernameFormat>
+
+This determines how user info is displayed. 'concise' will show one of 
+either NickName, RealName, Name or EmailAddress, depending on what exists 
+and whether the user is privileged or not. 'verbose' will show RealName and
+EmailAddress.
+
+=cut
 
-# }}}
+Set($UsernameFormat, 'concise');
 
+=item C<$WebDomain>
+
+Domain name of the RT server, eg 'www.example.com'. It should not contain
+anything else, but server name.
+
+=cut
+
+Set( $WebDomain, 'localhost' );
+
+=item C<$WebPort>
+
+If we're running as a superuser, run on port 80
+Otherwise, pick a high port for this user.
+
+443 is default port for https protocol.
+
+=cut
+
+Set($WebPort, 80);# + ($< * 7274) % 32766 + ($< && 1024));
+
+=item C<$WebPath>
+
+If you're putting the web ui somewhere other than at the root of
+your server, you should set C<$WebPath> to the path you'll be 
+serving RT at.
+
+C<$WebPath> requires a leading / but no trailing /, or it can be blank.
+
+In most cases, you should leave C<$WebPath> set to '' (an empty value).
+
+=cut
+
+Set($WebPath, "");
+
+=item C<$WebBaseURL>, C<$WebURL>
+
+Usually you don't want to set these options. The only obviouse reason is
+RT accessible via https protocol on non standard port, eg
+'https://rt.example.com:9999'. In all other cases these options are computed
+using C<$WebDomain>, C<$WebPort> and C<$WebPath>.
+
+C<$WebBaseURL> is the scheme, server and port (eg 'http://rt.example.com')
+for constructing urls to the web UI. C<$WebBaseURL> doesn't need a trailing /.
+
+C<$WebURL> is the C<$WebBaseURL>, C<$WebPath> and trailing /, for example:
+'http://www.example.com/rt/'.
+
+=cut
+
+my $port = RT->Config->Get('WebPort');
+Set($WebBaseURL,
+    ($port == 443? 'https': 'http') .'://'
+    . RT->Config->Get('WebDomain')
+    . ($port != 80 && $port != 443? ":$port" : '')
+);
+
+Set($WebURL, RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/");
+
+=item C<$WebImagesURL>
+
+C<$WebImagesURL> points to the base URL where RT can find its images.
+Define the directory name to be used for images in rt web
+documents.
+
+=cut
+
+Set($WebImagesURL, RT->Config->Get('WebPath') . "/NoAuth/images/");
+
+=item C<$LogoURL>
+
+C<$LogoURL> points to the URL of the RT logo displayed in the web UI
+
+=cut
+
+Set($LogoURL, RT->Config->Get('WebImagesURL') . "bplogo.gif");
+
+=item C<$WebNoAuthRegex>
+
+What portion of RT's URL space should not require authentication.
+
+This is mostly for extension and doesn't mean RT will work without
+login if you change it.
+
+=cut
+
+Set($WebNoAuthRegex, qr{^ /rt (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
+
+=item C<$SelfServiceRegex>
+
+What portion of RT's URLspace should be accessible to Unprivileged users
+This does not override the redirect from F to
+F when Unprivileged users attempt to access
+ticked displays
+
+=cut
+
+Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
+
+=item C<$MessageBoxWidth>, C<$MessageBoxHeight>
+
+For message boxes, set the entry box width, height and what type of
+wrapping to use.  These options can be overridden by users in their
+preferences.
+
+Default width: 72, height: 15
+
+These settings only apply to the non-RichText message box.
+See below for Rich Text settings.
+
+=cut
+
+Set($MessageBoxWidth, 72);
+Set($MessageBoxHeight, 15);
+
+=item C<$MessageBoxWrap>
+
+Default wrapping: "HARD"  (choices "SOFT", "HARD")
+
+Wrapping is disabled when using MessageBoxRichText because
+of a bad interaction between IE and wrapping with the Rich
+Text Editor.
+
+=cut
+
+Set($MessageBoxWrap, "HARD");
+
+=item C<$MessageBoxRichText>
+
+Should "rich text" editing be enabled? This option lets your users send html email messages from the web interface.
+
+=cut
+
+Set($MessageBoxRichText, 1);
+
+=item C<$MessageBoxRichTextHeight>
+
+Height of RichText javascript enabled editing boxes (in pixels)
+
+=cut
+
+Set($MessageBoxRichTextHeight, 200);
+
+=item C<$MessageBoxIncludeSignature>
+
+Should your user's signatures (from their Preferences page) be included in Comments and Replies
+
+=cut
+
+Set($MessageBoxIncludeSignature, 1);
+
+=item C<$WikiImplicitLinks>
+
+Support implicit links in WikiText custom fields?  A true value
+causes InterCapped or ALLCAPS words in WikiText fields to
+automatically become links to searches for those words.  If used on
+RTFM articles, it links to the RTFM article with that name.
+
+=cut
+
+Set($WikiImplicitLinks, 0);
+
+=item C<$TrustHTMLAttachments>
+
+if C is not defined, we will display them
+as text. This prevents malicious HTML and javascript from being
+sent in a request (although there is probably more to it than that)
+
+=cut
+
+Set($TrustHTMLAttachments, undef);
+
+=item C<$RedistributeAutoGeneratedMessages>
+
+Should RT redistribute correspondence that it identifies as
+machine generated? A true value will do so; setting this to '0'
+will cause no such messages to be redistributed.
+You can also use 'privileged' (the default), which will redistribute
+only to privileged users. This helps to protect against malformed
+bounces and loops caused by autocreated requestors with bogus addresses.
+
+=cut
+
+Set($RedistributeAutoGeneratedMessages, 'privileged');
+
+=item C<$PreferRichText>
+
+If C<$PreferRichText> is set to a true value, RT will show HTML/Rich text
+messages in preference to their plaintext alternatives. RT "scrubs" the 
+html to show only a minimal subset of HTML to avoid possible contamination
+by cross-site-scripting attacks.
+
+=cut
+
+Set($PreferRichText, undef);
+
+=item C<$WebExternalAuth>
+
+If C<$WebExternalAuth> is defined, RT will defer to the environment's
+REMOTE_USER variable.
+
+=cut
+
+Set($WebExternalAuth, undef);
+
+=item C<$WebExternalAuthContinuous>
+
+If C<$WebExternalAuthContinuous> is defined, RT will check for the
+REMOTE_USER on each access.  If you would prefer this to only happen
+once (at initial login) set this to a false value.  The default setting
+will help ensure that if your external auth system deauthenticates a
+user, RT notices as soon as possible.
+
+=cut
+
+Set($WebExternalAuthContinuous, 1);
+
+=item C<$WebFallbackToInternalAuth>
+
+If C<$WebFallbackToInternalAuth> is defined, the user is allowed a chance
+of fallback to the login screen, even if REMOTE_USER failed.
+
+=cut
+
+Set($WebFallbackToInternalAuth , undef);
+
+=item C<$WebExternalGecos>
+
+C<$WebExternalGecos> means to match 'gecos' field as the user identity);
+useful with mod_auth_pwcheck and IIS Integrated Windows logon.
+
+=cut
+
+Set($WebExternalGecos , undef);
+
+=item C<$WebExternalAuto>
+
+C<$WebExternalAuto> will create users under the same name as REMOTE_USER
+upon login, if it's missing in the Users table.
+
+=cut
+
+Set($WebExternalAuto , undef);
+
+=item C<$AutoCreate>
+
+If C<$WebExternalAuto> is true, C<$AutoCreate> will be passed to User's
+Create method.  Use it to set defaults, such as creating 
+Unprivileged users with C<{ Privileged => 0 }>
+( Must be a hashref of arguments )
+
+=cut
+
+Set($AutoCreate, undef);
+
+=item C<$WebSessionClass>
+
+C<$WebSessionClass> is the class you wish to use for managing Sessions.
+It defaults to use your SQL database, but if you are using MySQL 3.x and
+plans to use non-ascii Queue names, uncomment and add this line to
+F will prevent session corruption.
+
+=cut
+
+# Set($WebSessionClass , 'Apache::Session::File');
+
+=item C<$AutoLogoff>
+
+By default, RT's user sessions persist until a user closes his or her 
+browser. With the C<$AutoLogoff> option you can setup session lifetime in 
+minutes. A user will be logged out if he or she doesn't send any requests 
+to RT for the defined time.
+
+=cut
+
+Set($AutoLogoff, 0);
+
+=item C<$WebSecureCookies>
+
+By default, RT's session cookie isn't marked as "secure" Some web browsers 
+will treat secure cookies more carefully than non-secure ones, being careful
+not to write them to disk, only send them over an SSL secured connection 
+and so on. To enable this behaviour, set C<$WebSecureCookies> to a true value. 
+NOTE: You probably don't want to turn this on _unless_ users are only connecting
+via SSL encrypted HTTP connections.
+
+=cut
+
+Set($WebSecureCookies, 0);
+
+=item C<$WebFlushDbCacheEveryRequest>
+
+By default, RT clears its database cache after every page view.
+This ensures that you've always got the most current information 
+when working in a multi-process (mod_perl or FastCGI) Environment
+Setting C<$WebFlushDbCacheEveryRequest> to '0' will turn this off,
+which will speed RT up a bit, at the expense of a tiny bit of data 
+accuracy.
+
+=cut
+
+Set($WebFlushDbCacheEveryRequest, '1');
+
+
+=item C<$MaxInlineBody>
+
+C<$MaxInlineBody> is the maximum attachment size that we want to see
+inline when viewing a transaction.  RT will inline any text if value
+is undefined or 0.  This option can be overridden by users in their
+preferences.
+
+=cut
+
+Set($MaxInlineBody, 12000);
+
+=item C<$DefaultSummaryRows>
+
+C<$DefaultSummaryRows> is default number of rows displayed in for search
+results on the frontpage.
+
+=cut
+
+Set($DefaultSummaryRows, 10);
+
+=item C<$HomePageRefreshInterval>
+
+C<$HomePageRefreshInterval> is default number of seconds to refresh the RT
+home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+
+=cut
+
+Set($HomePageRefreshInterval, 0);
+
+=item C<$SearchResultsRefreshInterval>
+
+C<$SearchResultsRefreshInterval> is default number of seconds to refresh
+search results in RT. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+
+=cut
+
+Set($SearchResultsRefreshInterval, 0);
+
+=item C<$OldestTransactionsFirst>
+
+By default, RT shows newest transactions at the bottom of the ticket
+history page, if you want see them at the top set this to '0'.  This
+option can be overridden by users in their preferences.
+
+=cut
+
+Set($OldestTransactionsFirst, '1');
+
+=item C<$ShowTransactionImages>
+
+By default, RT shows images attached to incoming (and outgoing) ticket updates
+inline. Set this variable to 0 if you'd like to disable that behaviour
+
+=cut
+
+Set($ShowTransactionImages, 1);
+
+=item C<$PlainTextPre>
+
+Normally plaintext attachments are displayed as HTML with line
+breaks preserved.  This causes space- and tab-based formatting not
+to be displayed correctly.  By setting $PlainTextPre they'll be
+displayed using 
 instead so such formatting works, but they'll
+use a monospaced font, no matter what the value of C<$PlainTextMono> is.
+
+=cut
+
+Set($PlainTextPre, 0);
+
+
+=item C<$PlainTextMono> 
+To display plaintext attachments,
+Set C<$PlainTextMono> to 1 to use monospaced font and preserve
+formatting, but unlike PlainTextPre, the text will wrap to fit into the
+UI.
+
+=cut
+
+Set($PlainTextMono, 0);
+
+=item C<$ShowUnreadMessageNotifications>
+
+By default, RT will prompt users when there are new, unread messages on
+tickets they are viewing.
+
+Set C<$ShowUnreadMessageNotifications> to a false value to disable this feature.
+
+=cut
+
+Set($ShowUnreadMessageNotifications, 1);
+
+
+=item C<$HomepageComponents>
+
+C<$HomepageComponents> is an arrayref of allowed components on a user's
+customized homepage ("RT at a glance").
+
+=cut
+
+Set($HomepageComponents, [qw(QuickCreate Quicksearch MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
+
+=item C<@MasonParameters>
+
+C<@MasonParameters> is the list of parameters for the constructor of
+HTML::Mason's Apache or CGI Handler.  This is normally only useful
+for debugging, eg. profiling individual components with:
+
+    use MasonX::Profiler; # available on CPAN
+    Set(@MasonParameters, (preamble => 'my $p = MasonX::Profiler->new($m, $r);'));
+
+=cut
+
+Set(@MasonParameters, ());
+
+=item C<$DefaultSearchResultFormat>
+
+C<$DefaultSearchResultFormat> is the default format for RT search results
+
+=cut
+
+Set ($DefaultSearchResultFormat, qq{
+   '__id__/TITLE:#',
+   '__Subject__/TITLE:Subject',
+   Status,
+   QueueName, 
+   OwnerName, 
+   Priority, 
+   '__NEWLINE__',
+   '', 
+   '__Requestors__',
+   '__CreatedRelative__',
+   '__ToldRelative__',
+   '__LastUpdatedRelative__',
+   '__TimeLeft__'});
+
+=item C<$DefaultSelfServiceSearchResultFormat>
+
+C<$DefaultSelfServiceSearchResultFormat> is the default format of searches displayed in the 
+SelfService interface.
+
+=cut
+
+Set($DefaultSelfServiceSearchResultFormat, qq{
+   '__id__/TITLE:#',
+   '__Subject__/TITLE:Subject',
+   Status,
+   Requestors,
+   OwnerName});
+
+=item C<$SuppressInlineTextFiles>
+
+If C<$SuppressInlineTextFiles> is set to a true value, then uploaded
+text files (text-type attachments with file names) are prevented
+from being displayed in-line when viewing a ticket's history.
+
+=cut
+
+Set($SuppressInlineTextFiles, undef);
+
+=item C<$DontSearchFileAttachments>
+
+If C<$DontSearchFileAttachments> is set to a true value, then uploaded
+files (attachments with file names) are not searched during full-content
+ticket searches.
+
+=cut
+
+Set($DontSearchFileAttachments, undef);
+
+=item C<$ChartFont>
+
+The L module (which RT uses for graphs) uses a builtin font that doesn't
+have full Unicode support. You can use a particular TrueType font by setting
+$ChartFont to the absolute path of that font. Your GD library must have
+support for TrueType fonts to use this option.
+
+=cut
+
+Set($ChartFont, undef);
+
+
+=item C<@Active_MakeClicky>
+
+MakeClicky detects various formats of data in headers and email
+messages, and extends them with supporting links.  By default, RT
+provides two formats:
+
+* 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
+  link after the URL.
+
+* 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
+  replace URL with link and *adds spaces* into text if it's longer
+  then 30 chars. This allow browser to wrap long URLs and avoid
+  horizontal scrolling.
+
+See F for documentation on how to add your own.
+
+=cut
+
+Set(@Active_MakeClicky, qw());
+
+=item C<$DefaultQueue>
+
+Use this to select the default queue name that will be used for creating new
+tickets. You may use either the queue's name or its ID. This only affects the
+queue selection boxes on the web interface.
+
+=cut
+
+#Set($DefaultQueue, 'General');
+
+=item C<$DefaultTimeUnitsToHours>
+
+Use this to set the default units for time entry to hours instead of minutes.
+
+=cut
+
+Set($DefaultTimeUnitsToHours, 0);
+
+=back
+
+=head1 L (rt-server) Configuration
+
+=over 4
+
+=item C<$StandaloneMinServers>, C<$StandaloneMaxServers>
+
+The absolute minimum and maximum number of servers that will be created to
+handle requests. Having multiple servers means that serving a slow page will
+affect other users less.
+
+=cut
+
+Set($StandaloneMinServers, 1);
+Set($StandaloneMaxServers, 1);
+
+=item C<$StandaloneMinSpareServers>, C<$StandaloneMaxSpareServers>
+
+These next two options can be used to scale up and down the number of servers
+to adjust to load. These two options will respect the C<$StandaloneMinServers
+> and C<$StandaloneMaxServers options>.
+
+=cut
+
+Set($StandaloneMinSpareServers, 0);
+Set($StandaloneMaxSpareServers, 0);
+
+=item C<$StandaloneMaxRequests>
+
+This sets the absolute maximum number of requests a single server will serve.
+Setting this would be useful if, for example, memory usage slowly crawls up
+every hit.
+
+=cut
+
+#Set($StandaloneMaxRequests, 50);
+
+=item C<%NetServerOptions>
+
+C<%NetServerOptions> is a hash of additional options to use for
+L. For example, you could set
+reverse_lookups to get the hostnames for all users with:
+
+C 1));>
+
+=cut
+
+Set(%NetServerOptions, ());
+
+=back
+
+
+=head1 UTF-8 Configuration
+
+=over 4
+
+=item C<@LexiconLanguages>
+
+An array that contains languages supported by RT's internationalization
+interface.  Defaults to all *.po lexicons; setting it to C will make
+RT bilingual instead of multilingual, but will save some memory.
+
+=cut
+
+Set(@LexiconLanguages, qw(*));
+
+=item C<@EmailInputEncodings>
+
+An array that contains default encodings used to guess which charset
+an attachment uses if not specified.  Must be recognized by
+L.
+
+=cut
+
+Set(@EmailInputEncodings, qw(utf-8 iso-8859-1 us-ascii));
+
+=item C<$EmailOutputEncoding>
+
+The charset for localized email.  Must be recognized by Encode.
+
+=cut
+
+Set($EmailOutputEncoding, 'utf-8');
+
+
+=back
+
+=head1 Date Handling Configuration
+
+=over 4
+
+=item C<$DateTimeFormat>
+
+You can choose date and time format.  See "Output formatters"
+section in perldoc F for more options.  This option can
+be overridden by users in their preferences.
+Some examples:
+
+C
+C 'ISO', Seconds => 0 });>
+C
+C 'RFC2822', Seconds => 0, DayOfWeek => 0 });>
+
+=cut
+
+Set($DateTimeFormat, 'DefaultFormat');
+
+# Next two options are for Time::ParseDate
+
+=item C<$DateDayBeforeMonth>
+
+Set this to 1 if your local date convention looks like "dd/mm/yy" instead of
+"mm/dd/yy". Used only for parsing, not for displaying dates.
+
+=cut
+
+Set($DateDayBeforeMonth , 1);
+
+=item C<$AmbiguousDayInPast>, C<$AmbiguousDayInFuture>
+
+Should an unspecified day or year in a date refer to a future or a
+past value? For example, should a date of "Tuesday" default to mean
+the date for next Tuesday or last Tuesday? Should the date "March 1"
+default to the date for next March or last March?
+
+Set $ for the last date, or $<$AmbiguousDayInFuture> for the
+next date.
+
+The default is usually good.
+
+=cut
+
+Set($AmbiguousDayInPast, 0);
+Set($AmbiguousDayInFuture, 0);
+
+=back
+
+=head1 Approval Configuration
+
+Configration for the approvl system
+
+=over 4
+
+=item C<$ApprovalRejectionNotes>
+
+Should rejection notes be sent to the requestors?  The default is true.
+
+=cut
+
+Set($ApprovalRejectionNotes, 1);
+
+
+=back
+
+=head1 Miscellaneous Configuration
+
+=over 4
+
+=item C<@ActiveStatus>, C<@InactiveStatus>
+
+You can define new statuses and even reorder existing statuses here.
+WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
+will break horribly. The statuses you add must be no longer than
+10 characters.
+
+=cut
+
+Set(@ActiveStatus, qw(new open stalled));
+Set(@InactiveStatus, qw(resolved rejected deleted));
+
+=item C<$LinkTransactionsRun1Scrip>
+
+RT-3.4 backward compatibility setting. Add/Delete Link used to record one
+transaction and run one scrip. Set this value to 1 if you want
+only one of the link transactions to have scrips run.
+
+=cut
+
+Set($LinkTransactionsRun1Scrip, 0);
+
+=item C<$StrictLinkACL>
+
+When this feature is enabled a user needs I rights on both
+tickets to link them together, otherwise he can have rights on either of
+them.
+
+=cut
+
+Set($StrictLinkACL, 1);
+
+=item C<$PreviewScripMessages>
+
+Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
+reply page should include the content of the messages to be sent.
+
+=cut
+
+Set($PreviewScripMessages, 0);
+
+=item C<$UseTransactionBatch>
+
+Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
+such that a resolve and comment (for example) would happen
+simultaneously, instead of as two transactions, unaware of each
+others' existence.
+
+=cut
+
+Set($UseTransactionBatch, 1);
+
+=item C<@CustomFieldValuesSources>
+
+Set C<@CustomFieldValuesSources> to a list of class names which extend
+L.  This can be used to pull lists of
+custom field values from external sources at runtime.
+
+=cut
+
+Set(@CustomFieldValuesSources, ());
+
+=item C<$CanonicalizeRedirectURLs>
+
+Set C<$CanonicalizeRedirectURLs> to 1 to use $C when redirecting rather
+than the one we get from C<%ENV>.
+
+If you use RT behind a reverse proxy, you almost certainly want to
+enable this option.
+
+=cut
+
+Set($CanonicalizeRedirectURLs, 0);
+=item C<$EnableReminders>
+
+Hide links/portlets related to Reminders by setting this to 0
+
+=cut
+
+Set($EnableReminders,1);
+
+
+=item C<@Plugins>
+
+Set C<@Plugins> to a list of external RT plugins that should be enabled (those
+plugins have to be previously downloaded and installed).
+Example:
+
+C
+
+=cut
+
+Set(@Plugins, ());
+
+=back
+
+=head1 Development Configuration
+
+=over 4
+
+=item C<$DevelMode>
+
+RT comes with a "Development mode" setting. 
+This setting, as a convenience for developers, turns on 
+all sorts of development options that you most likely don't want in 
+production:
+
+* Turns off Mason's 'static_source' directive. By default, you can't 
+  edit RT's web ui components on the fly and have RT magically pick up
+  your changes. (It's a big performance hit)
+
+ * More to come
+
+=cut
+
+Set($DevelMode, '@RT_DEVEL_MODE@');
+
+
+=back
+
+=head1 Deprecated Options
+
+=over 4
+
+=item C<$AlwaysUseBase64>
+
+Encode blobs as base64 in DB (?)
+
+=item C<$TicketBaseURI>
+
+Base URI to tickets in this system; used when loading (?)
+
+=item C<$UseCodeTickets>
+
+This option is exists for backwards compatibility.  Don't use it.
+
+=back
+
+=cut
 
 1;
diff --git a/rt/etc/RT_SiteConfig.pm b/rt/etc/RT_SiteConfig.pm
index 7a6f40735..ef9fa13ae 100644
--- a/rt/etc/RT_SiteConfig.pm
+++ b/rt/etc/RT_SiteConfig.pm
@@ -51,4 +51,5 @@ $RT::QuickCreateLong = 0; #set to true to cause quick ticket creation to
 
 Set($MessageBoxWidth , 80);
 
+#Set(@Plugins,(qw(Extension::QuickDelete RT::FM)));
 1;
diff --git a/rt/etc/schema.Pg b/rt/etc/schema.Pg
index 2d45a946a..48525c8d7 100755
--- a/rt/etc/schema.Pg
+++ b/rt/etc/schema.Pg
@@ -283,6 +283,8 @@ CREATE TABLE GroupMembers (
 
 );
 
+CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers(GroupId, MemberId);
+
 -- }}}
 
 -- {{{ GroupMembersCache
@@ -364,7 +366,6 @@ CREATE TABLE Users (
 
 
 CREATE UNIQUE INDEX Users1 ON Users (Name) ;
-CREATE INDEX Users2 ON Users (Name);
 CREATE INDEX Users3 ON Users (id, EmailAddress);
 CREATE INDEX Users4 ON Users (EmailAddress);
 
@@ -528,7 +529,7 @@ CREATE TABLE CustomFields (
   Type varchar(200) NULL  ,
   MaxValues integer NOT NULL DEFAULT 0  ,
   Repeated integer NOT NULL DEFAULT 0 , 
-  Pattern varchar(255) NULL  ,
+  Pattern varchar(65536) NULL  ,
   LookupType varchar(255) NOT NULL  ,
   Description varchar(255) NULL  ,
   SortOrder integer NOT NULL DEFAULT 0  ,
diff --git a/rt/etc/schema.mysql b/rt/etc/schema.mysql
deleted file mode 100755
index 46f8ec562..000000000
--- a/rt/etc/schema.mysql
+++ /dev/null
@@ -1,416 +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 Attachments1 ON Attachments (Parent) ;
-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 UNIQUE INDEX Links1 ON Links (Base, Target, Type) ;
-CREATE INDEX Links2 ON Links (Base,  Type) ;
-CREATE INDEX Links3 ON Links (Target,  Type) ;
-
-# }}}
-
-# {{{ 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 varchar(64),
-  PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-CREATE INDEX Groups1 ON Groups (Domain,Instance,Type,id);
-CREATE INDEX Groups2 On Groups  (Type, Instance, Domain);   
-
-# }}}
-
-# {{{ 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,
-  EffectiveTicket integer NOT NULL DEFAULT 0  ,
-  Ticket 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  ,
-  Data varchar(100) NULL  ,
-
-  Creator integer NOT NULL DEFAULT 0  ,
-  Created DATETIME NULL  ,
-  PRIMARY KEY (id)
-) TYPE=InnoDB;
-CREATE INDEX Transactions1 ON Transactions (Ticket);
-CREATE INDEX Transactions2 ON Transactions (EffectiveTicket);
-
-# }}}
-
-# {{{ Scrips 
-
-CREATE TABLE Scrips (
-  id INTEGER NOT NULL  AUTO_INCREMENT,
-  Description varchar(255),
-  ScripCondition integer NOT NULL DEFAULT 0  ,
-  ScripAction integer NOT NULL DEFAULT 0  ,
-  ConditionRules text NULL  ,
-  ActionRules text NULL  ,
-  CustomIsApplicableCode text NULL  ,
-  CustomPrepareCode text NULL  ,
-  CustomCommitCode text NULL  ,
-  Stage varchar(32) NULL  ,
-  Queue integer NOT NULL DEFAULT 0  ,
-  Template integer NOT NULL DEFAULT 0  ,
-  Creator integer NOT NULL DEFAULT 0  ,
-  Created DATETIME NULL  ,
-  LastUpdatedBy integer NOT NULL DEFAULT 0  ,
-  LastUpdated DATETIME NULL  ,
-  PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-# }}}
-
-# {{{ ACL
-CREATE TABLE ACL (
-  id INTEGER NOT NULL  AUTO_INCREMENT,
-  PrincipalType varchar(25) NOT NULL, #"User" "Group", "Owner", "Cc" "AdminCc", "Requestor", "Requestor" 
-
-  PrincipalId integer NOT NULL  , #Foreign key to principals
-  RightName varchar(25) NOT NULL  ,
-  ObjectType varchar(25) NOT NULL  ,
-  ObjectId integer NOT NULL default 0,
-  DelegatedBy integer NOT NULL default 0, #foreign key to principals with a userid
-  DelegatedFrom integer NOT NULL default 0, #foreign key to ACL
-  PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-CREATE INDEX  ACL1 on ACL(RightName, ObjectType, ObjectId,PrincipalType,PrincipalId);
-
-# }}}
-
-# {{{ GroupMembers 
-
-CREATE TABLE GroupMembers (
-  id INTEGER NOT NULL  AUTO_INCREMENT,
-  GroupId integer NOT NULL DEFAULT 0,
-  MemberId integer NOT NULL DEFAULT 0,  #Foreign key to Principals
-  PRIMARY KEY (id)
-) TYPE=InnoDB;
-CREATE UNIQUE INDEX GroupMembers1 on GroupMembers (GroupId, MemberId);
-
-
-# }}}
-
-# {{{ GroupMembersCache
-
-create table CachedGroupMembers (
-        id int auto_increment,
-        GroupId int, # foreign key to Principals
-        MemberId int, # foreign key to Principals
-        Via int, #foreign key to CachedGroupMembers. (may point to $self->id)
-        ImmediateParentId int, #foreign key to prinicpals.         
-                               # this points to the group that the member is
-                               # a member of, for ease of deletes.
-        Disabled int2 NOT NULL DEFAULT 0 , # if this cached group member is a member of this group by way of a disabled
-                                           # group or this group is disabled, this will be set to 1
-                                           # this allows us to not find members of disabled subgroups when listing off
-                                           # group members recursively.
-                                           # Also, this allows us to have the ACL system elide members of disabled groups
-        PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-CREATE INDEX DisGrouMem  on CachedGroupMembers (GroupId,MemberId,Disabled);
-CREATE INDEX GrouMem  on CachedGroupMembers (GroupId,MemberId);
-
-# }}}
-
-# {{{ 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 Users2 ON Users (Name);
-CREATE INDEX Users3 ON Users (id, EmailAddress);
-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 Tickets3 ON Tickets (EffectiveId) ;
-CREATE INDEX Tickets4 ON Tickets (id, Status) ;
-CREATE INDEX Tickets5 ON Tickets (id, EffectiveId) ;
-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;
-
-# }}}
-
-# {{{ TicketCustomFieldValues 
-
-CREATE TABLE TicketCustomFieldValues (
-  id INTEGER NOT NULL  AUTO_INCREMENT,
-  Ticket int NOT NULL  ,
-  CustomField int NOT NULL  ,
-  Content 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;
-
-# }}}
-
-# {{{ CustomFields
-
-CREATE TABLE CustomFields (
-  id INTEGER NOT NULL  AUTO_INCREMENT,
-  Name varchar(200) NULL  ,
-  Type varchar(200) NULL  ,
-  Queue integer NOT NULL DEFAULT 0 ,
-  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  ,
-  Disabled int2 NOT NULL DEFAULT 0 ,
-  PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-CREATE INDEX CustomFields1 on CustomFields (Disabled, Queue);
-
-
-# }}}
-
-# {{{ 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;
-
-# }}}
-
-# {{{ 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/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 
-%#                                          
-%# 
-%# (Except where explicitly superseded by other copyright notices)
-%# 
-%# 
-%# LICENSE:
-%# 
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%# 
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%# General Public License for more details.
-%# 
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%# 
-%# 
-%# CONTRIBUTION SUBMISSION POLICY:
-%# 
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%# 
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license 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 &>
-
-  
- - - -

<&|/l&>System groups

- -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToSystemInternalGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
- <% loc($Group->Type) %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $CustomFieldObj &> -
-

<&|/l&>User defined groups

- -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToUserDefinedGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
- <% $Group->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $CustomFieldObj &> -
- - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> - -
- -<%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); - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<&|/l&>Name
<&|/l&>Description
<&|/l&>Type<& /Admin/Elements/SelectCustomFieldType, - Name => "TypeComposite", - Default => $CustomFieldObj->TypeComposite, &> -
<&|/l&>Applies to<& /Admin/Elements/SelectCustomFieldLookupType, - Name => "LookupType", - Default => $CustomFieldObj->LookupType, &> -
<&|/l&>Validation -<& /Widgets/ComboBox, - Name => 'Pattern', - Default => $CustomFieldObj->Pattern, - Size => 20, - Values => [ - '(?#Mandatory).', - '(?#Digits)^[\d.]+$', - '(?#Year)^[12]\d{3}$', - ], -&> -
  - - /> <&|/l&>Enabled (Unchecking this box disables this custom field) -
<&|/l&>Link values to -
-<&|/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 __id__ and __CustomField__ with the record id and custom field value, respectively -
-
<&|/l&>Include page -
-<&|/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 __id__ and __CustomField__ with the record id and custom field value, respectively -<&|/l&>Some browsers may only load content from the same domain as your RT server. -
-
-
-% if ($CustomFieldObj->Id && $CustomFieldObj->IsSelectionType) { -

<&|/l&>Values

-
-<& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &> -<& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &> -
-% } -<&/Elements/Submit&> -
- - - -<%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; - } - - - -<%ARGS> -$id => undef -$TypeComposite => undef -$LookupType => undef -$MaxValues => undef -$SortOrder => undef -$Description => undef -$Pattern => undef -$Name => undef -$SetEnabled => undef -$Enabled => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- - - -

<&|/l&>Selected objects

-<& /Admin/Elements/PickObjects, Objects => \@AssignedObjs, id => $id, Checked => 1 &> -

<&|/l&>Unselected objects

-<& /Admin/Elements/PickObjects, Objects => \@UnassignedObjs, id => $id &> - -<& /Elements/Submit, CheckAll => 1, ClearAll => 1 &> -
- -<%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; -} - - -<%ARGS> -$id => undef -$FindDisabledObjects => 0 -$UpdateObjs => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- - - - - -% while (my $Member = $Users->Next()) { -% my $UserObj = $Member->MemberObj->Object(); -% my $group = RT::Group->new($session{'CurrentUser'}); -% $group->LoadACLEquivalenceGroup($Member->MemberObj); - - - - -% } -
- <% $UserObj->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId=> $group->PrincipalId, - Object => $CustomFieldObj &> -
- - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> - -
- -<%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); - -# }}} - - - -<%ARGS> -$id => undef -$UserString => undef -$UserOp => undef -$UserField => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { - -% } -

<% loc("Custom Fields for [_1]", $lookup) %>

- -% } - -
-<&|/l&>Only show custom fields for: - -
- -<%args> -$type => undef - -<%INIT> -my $CustomFields = RT::CustomFields->new($session{'CurrentUser'}); -$CustomFields->UnLimit(); -$CustomFields->LimitToLookupType($type) if defined $type; -$CustomFields->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'Name' } ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>Add Value - - - - -% if ($CustomField->Type ne 'Combobox') { - -% } - -
-<&|/l&>Sort:
- -
-<&|/l&>Name:
- -
-<&|/l&>Description:
- -
-<&|/l&>Category:
- -
-<%init> - -<%args> -$CustomField => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>New user called -
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 } - -<%ARGS> -$Title => undef -$id => undef -$current_tab => undef -$subtabs => undef -$current_subtab => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - -
- - - - - - - - -
-<&|/l&>Name: - - -
-<&|/l&>Description: - - -
-<&|/l&>Type: - -<& /Admin/Elements/SelectCustomFieldType, Name => "Type", Default => $CustomFieldObj->Type &> -
- - - /> <&|/l&>Enabled (Unchecking this box disables this custom field) -
- -

-% if ($CustomFieldObj->Id and $CustomFieldObj->Type =~ /Select/) { -

<&|/l&>Values

- -<& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &> -<& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &> - -% } -<&/Elements/Submit, Label => loc('Create') &> -
- - - -<%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 =""; - } - -} - - - -<%ARGS> -$id => undef -$title => undef -$Queue => undef -$CustomField => undef -$Type => undef -$Description => undef -$Name => undef -$SetEnabled => undef -$Enabled => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -

<&|/l&>(no values)

-% return; -% } -<&|/l&>(Check box to delete) - - - - - - -% if ($CustomField->Type ne 'Combobox') { - -% } - -% while (my $value = $values->Next) { - - - - - -% if ($CustomField->Type ne 'Combobox') { - -% } - -% } -
 <&|/l&>Sort<&|/l&>Name<&|/l&>Description<&|/l&>Category
- - - - - - - - - - - - - -
-<%init> - -my $values = $CustomField->ValuesObj(); - - -<%args> -$CustomField => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- - - - - -% if ($Object->Id) { -

<&|/l&>Global Custom Fields

-<& PickCustomFields, CustomFields => \@GlobalCFs, ReadOnly => 1, id => $id, SubType => $SubType &> -% } -

<&|/l&>Selected Custom Fields

-<& PickCustomFields, CustomFields => [$ObjectCFs->CustomFields], id => $id, Checked => 1, SubType => $SubType &> -

<&|/l&>Unselected Custom Fields

-<& PickCustomFields, CustomFields => \@UnassignedCFs, id => $id, SubType => $SubType &> - -<& /Elements/Submit, CheckAll => 1, ClearAll => 1 &> -
- - -<%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('

', loc('(No custom fields)'), '

'); - 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); - - -<%ARGS> -$title => undef -$Move => undef -$Source => undef -$CustomField => undef -$FindDisabledCustomFields => undef -$UpdateCFs => 0 -$Object -$ObjectType -$SubType => '' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ) { -
    -
  • <&|/l&>none -% } else { -<&|/l&>(Check box to delete)

    - - -<%INIT> -my $Members = $Watchers->MembersObj; - - -<%ARGS> -$QueueObj => undef -$Watchers => undef - - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - - -<&| /Widgets/TitleBox, title => loc('Scrip Fields') &> - - - - - - - - - - - - -
    <&|/l&>Description: -Description %>" /> -
    <&|/l&>Condition: -<& /Admin/Elements/SelectScripCondition, - Name => "Scrip-$id-ScripCondition", - Default => $ARGS{"Scrip-$id-ScripCondition"} || $scrip->ConditionObj->Id, -&>
    <&|/l&>Action: -<& /Admin/Elements/SelectScripAction, - Name => "Scrip-$id-ScripAction", - Default => $ARGS{"Scrip-$id-ScripAction"} || $scrip->ActionObj->Id, -&>
    <&|/l&>Template: -<& /Admin/Elements/SelectTemplate, - Name => "Scrip-$id-Template", - Default => $ARGS{"Scrip-$id-Template"} || $scrip->TemplateObj->Id, - Queue => $Queue, -&>
    <&|/l&>Stage: -<& /Admin/Elements/SelectStage, - Name => "Scrip-$id-Stage", - Default => $ARGS{"Scrip-$id-Stage"} || $scrip->Stage, -&>
    - - -<& /Elements/Submit, - Label => $SubmitLabel, - Caption => loc("Be sure to save your changes"), - Reset => 1, -&>
    - -<&| /Widgets/TitleBox, title => loc('User Defined conditions and actions') &> - - - - - - - - - -
    -<&|/l&>(Use these fields when you choose 'User Defined' for a condition or action) -
    <&|/l&>Custom condition: - -
    <&|/l&>Custom action preparation code: - -
    <&|/l&>Custom action cleanup code: - -
    - - -<& /Elements/Submit, Label => $SubmitLabel, Reset => 1 &> - -
    -<%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'); -} - - - -<%ARGS> -$id => undef -$title => undef -$Queue => 0 - - -<%METHOD Process> -<%ARGS> -$id => undef -$Queue => undef - -<%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); -} - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - -

    <&|/l&>Current Scrips

    -% if ($Scrips->Count == 0 ) { -

    <&|/l&>(No scrips)

    -% } else { - -

    <&|/l&>(Check box to delete)

    - -% while (my $scrip = $Scrips->Next ) { - - - - -% } - -
    - - -<% $scrip->Description || "(".loc('no value').")" |n %>
    -<&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name) &>[_1] [_2] with template [_3] -
    - -% } -<& /Elements/Submit, - Caption => loc("Delete selected scrips"), - Label => loc("Delete") &> -
    - -<%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; - } - } - # }}} -} -# }}} - - -<%ARGS> -$id => undef -$title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - -% if ($Templates->Count == 0 ) { -

    <&|/l&>(No templates)

    -% } else { - - - - - -% my $count; -% while (my $TemplateObj = $Templates->Next) { - - - - - -% } -
    -<&|/l&>(Check box to delete) - -
    - - - -<% loc($TemplateObj->Name) %> -
    <% loc($TemplateObj->Description) %> -
    -% } - -<& /Elements/Submit, Label => loc('Delete Template') &> -
    - -<%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; - } - } - # }}} -} -# }}} - -<%ARGS> -$id => 0 -$title => undef -$Move => undef -$Source => undef -$Template => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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:
    - - - - -<%ARGS> -$UserObj => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - } - } - - - -<%ARGS> -$id => undef -$current_tab => undef -$subtabs => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - - -<%ARGS> -$GroupObj => undef -$subtabs => undef -$current_subtab => undef -$current_tab => undef -$Title => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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++; -<%$CustomFieldObj->id%>/<% loc($CustomFieldObj->Type) %>/<%$CustomFieldObj->Name%>: <%$CustomFieldObj->Description%> -
    -% } -% if (!$count) { -<&|/l&>(No custom fields) -% } - -<%init> -my $CustomFields = new RT::CustomFields ($session{'CurrentUser'}); -$CustomFields->LimitToGlobal(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { - -

    <&|/l&>(No scrips)

    - -% } else { - - - -% } - -<%init> -my $Scrips = new RT::Scrips ($session{'CurrentUser'}); -$Scrips->LimitToGlobal(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>Name: - -
    -
    -<&|/l&>Description: - -
    -
    -<&|/l&>Content:
    -
    - -
    - -<%INIT> - - - -<%ARGS> -$Name => undef -$Description => undef -$Content => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - - -<%ARGS> -$id => undef -$ObjectType -$SubType => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -

    <&|/l&>(None)

    -% } else { - -% my $count; -% foreach my $CustomFieldObj (@CustomFields) { - -% if (!$ReadOnly) { - -% } - - -% # show 'move up' unless it's the first item -% if ($count++ and $Checked) { - - -% } -
    - -/> - - -% if ($CustomFieldObj->Name) { -<%$CustomFieldObj->Name%> -% } else { -(<&|/l&>no name) -% } -
    - <%$CustomFieldObj->Description%> -
    - <% $CustomFieldObj->FriendlyTypeComposite %> - - [<&|/l&>Move up] -% } else { - -% } - -% # show 'move down' unless it's the last item -% if ($count != @CustomFields and $Checked) { -% $m->print(' | ') if $count > 1; - [<&|/l&>Move down] -% } -
    -% } -<%ARGS> -@CustomFields -$id -$ReadOnly => 0 -$Checked => 0 -$SubType - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -

    <&|/l&>(None)

    -% } else { - -% my $count; -% foreach my $Object (@Objects) { - -% my $id = "Object-".$Object->id."-CF-".$id; -% if (!$ReadOnly) { - -% } - - -% } -
    - -/> - - -
    -% } -<%ARGS> -@Objects -$id -$ReadOnly => 0 -$Checked => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $ACE = $ACL->Next) { - -
    • <% loc($ACE->RightName) %> (<%$ACE->UserObj->RealName%>) - -%} -
    - -<%INIT> -my $ACL = new RT::ACL($session{'CurrentUser'}); -$ACL->LimitToQueue($QueueObj->id); -$ACL->LimitPrincipalToUser($PrincipalId); - -<%ARGS> -$PrincipalId => undef -$QueueObj => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - - -<%ARGS> -$QueueObj => undef -$id => undef -$subtabs => undef -$current_subtab => undef -$current_tab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $cf = RT::CustomField->new($session{'CurrentUser'}); - - -<%ARGS> -$Default=>undef -$Name => 'LookupType' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $cf = RT::CustomField->new($session{'CurrentUser'}); - - -<%ARGS> -$Default=>undef -$Name => 'TypeComposite' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $groups = new RT::Groups($session{'CurrentUser'}); -$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain); - - -<%ARGS> -$Name => 'groups' -$Domain => 'UserDefined'; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -<%$Group->id%>: <%$Group->Name%>
    -%} -<%INIT> -my ($Group); -my $Groups = new RT::Groups($session{'CurrentUser'}); -$Groups->UnLimit; - -<%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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -<%$queue->id%>: <%$queue->Name%>
    -%} -<%INIT> -my ($queue); -my $queues = new RT::Queues($session{'CurrentUser'}); -$queues->UnLimit; - -<%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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -<%$user->id%>: <%$user->Name%>
    -%} -<%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'); - -} - -<%ARGS> -$IdLike => undef -$EmailLike => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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') { -<&|/l&>Users - -
    -% } -% if ($Show ne 'Users') { -<&|/l&>Groups - -% } - -<%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'); - - - -<%ARGS> -$Name => 'Users' -$Show => 'All' -$Group -$SkipUsers => {} -$SkipGroups => {} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 %current_rights; -

    <&|/l&>Current rights

    -% if ($ACLObj->Count() == 0) { -<&|/l&>No rights granted.
    -% } else { -(<&|/l&>Check box to revoke right)
    -% while (my $right = $ACLObj->Next()) { -% if ($right->RightName) { -% $current_rights{$right->RightName} = 1; - <% loc($right->RightName) %>
    -% } -% } -% } -
    -

    <&|/l&>New rights

    - -
    -<%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; - - -<%ARGS> -$PrincipalType => undef -$PrincipalId => undef -$Object =>undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $Scrips = RT::Scrips->new($session{'CurrentUser'}); -$Scrips->UnLimit; - - - - -<%ARGS> - -$Default => undef -$Name => 'Scrip' - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $ScripActions = RT::ScripActions->new($session{'CurrentUser'}); -$ScripActions->UnLimit; -$ScripActions->OrderBy(FIELD => 'Name'); - - - - -<%ARGS> - -$Default => undef -$Name => 'ScripAction' - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $ScripConditions = RT::ScripConditions->new($session{'CurrentUser'}); -$ScripConditions->UnLimit; -$ScripConditions->OrderBy(FIELD => 'Name'); - - - -<%ARGS> - -$Default => undef -$Name => 'ScripCondition' - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ($SingleDefault, $MultipleDefault); -if ($Default == 1) { - $SingleDefault = "SELECTED"; -} -elsif ($Default == 0 ) { - $MultipleDefault = "SELECTED"; -} - - -<%ARGS> -$Name => 'Single' -$Default => 1 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $Template = $PrimaryTemplates->Next) { - -%} -%while (my $Template = $OtherTemplates->Next) { - -%} - - -<%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'); - - -<%ARGS> - -$Queue => undef -$Default => 'none' -$DefaultQueue => undef -$Name => 'Template' - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $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(); - - -<%ARGS> -$Name => 'Users' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - } - } - - - -<%ARGS> -$id => undef -$current_tab => undef -$subtabs => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - } - } - - - - -<%ARGS> -$subtabs => undef -$current_tab => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - } - } - - - -<%ARGS> -$id => undef -$current_tab => undef -$subtabs => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%ARGS> -$UserObj => undef -$id => undef -$current_tab => undef -$subtabs => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'}); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'}); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'}); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'}); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - - -<%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); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - -<&| /Widgets/TitleBox, title => loc('Modify global group rights.')&> - -

    <&|/l&>System groups

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToSystemInternalGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% loc($Group->Type) %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object =>$RT::System &> -
    -

    <&|/l&>Roles

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToRolesForSystem(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% loc($Group->Type) %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $RT::System &> -
    -

    <&|/l&>User defined groups

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToUserDefinedGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% $Group->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $RT::System &> -
    - - - <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &> - -
    - -<%INIT> - - #Update the acls. - my @results = ProcessACLChanges(\%ARGS); - - -my $Groups; - - - -<%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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
    -% for my $pane (@panes) { -<&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &> -<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &> -
    -% } -<%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; - - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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"); -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -<%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); - - - - - -<%ARGS> -$id => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    -%if ($Create ) { - -% } else { - -% } - -%# hang onto the queue id - -<& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name, Description => -$TemplateObj->Description, Content => $TemplateObj->Content &> -<& /Elements/Submit, Label => loc('Create'), Reset => 1 &> -
    - - -<%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; -} - - -<%ARGS> -$Queue => undef -$Template => undef -$Create => undef -$Name => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -<%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); - - - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - -<&| /Widgets/TitleBox, title => loc('Modify global user rights.') &> - - - -% while (my $UserObj = $Users->Next()) { -% my $group = RT::Group->new($session{'CurrentUser'}); -% $group->LoadACLEquivalenceGroup($UserObj); - - - - -% } -
    - <% $UserObj->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId => $group->PrincipalId, - Object => $RT::System &> -
    - - - <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &> - -
    - -<%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 ); - - - -# }}} - - - -<%ARGS> -$UserOrderBy => 'Name' -$UserOrder => 'ASC' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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') &> - - - -<%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', - }, - - - -}; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - -<&| /Widgets/TitleBox, title => loc('Modify group rights for group [_1]', $GroupObj->Name) &> - -

    <&|/l&>System groups

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToSystemInternalGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% loc($Group->Type) %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - PrincipalType => 'Group', - Object => $GroupObj &> -
    -

    <&|/l&>User defined groups

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToUserDefinedGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% $Group->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - PrincipalType => 'Group', - Object => $GroupObj &> -
    - - - <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &> - -
    - -<%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; - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - -<&| /Widgets/TitleBox, title => loc('Editing membership for group [_1]', $Group->Name) &> - - - - - - - - - - - -
    -

    <&|/l&>Current members

    -
    -

    <&|/l&>Add members

    -
    - -% if ($Group->MembersObj->Count == 0 ) { -<&|/l&>(No members) -% } else { -<&|/l&>(Check box to delete) -
    -
    -<&|/l&>Users -% my $Users = $Group->UserMembersObj; -% $Users->OrderBy( FIELD => $UserOrderBy, ORDER => $UserOrder ); -
      -% while (my $user = $Users->Next()) { -% $UsersSeen{$user->id} = 1 if $SkipSeenUsers; -
    • -<%$user->Name%> (<%$user->RealName%>) -% } -
    -<&|/l&>Groups -
      -% my $GroupMembers = $Group->MembersObj; -% $GroupMembers->LimitToGroups(); -% while (my $member = $GroupMembers->Next()) { -% $GroupsSeen{$member->MemberId} = 1 if $SkipSeenGroups; -
    • -<%$member->MemberObj->Object->Name%> -% } -
    -% } -
    -<& /Admin/Elements/SelectNewGroupMembers, Name => "AddMembers", Group => $Group, - SkipUsers => \%UsersSeen, SkipGroups => \%GroupsSeen &> -
    - -<& /Elements/Submit, Label => loc('Modify Members'), Reset => 1 &> -
    - - -<%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 - - - -<%ARGS> -$AddMembersUsers => undef -$AddMembersGroups => undef -$id => undef -$UserOrderBy => 'Name' -$UserOrder => 'ASC' -$SkipSeenUsers => 1 -$SkipSeenGroups => 1 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - - -
    - -%unless ($Group->Id) { - -% } else { - -% } - - - - - - - -% my $CFs = $Group->CustomFields; -% while (my $CF = $CFs->Next) { - -% } - - - -<& /Elements/Callback, GroupObj => $Group, results => \@results, %ARGS &> -
    -<&|/l&>Name: -
    -<&|/l&>Description:
    -<% $CF->Name %>: - -<& /Elements/EditCustomField, CustomField => $CF, - Object => $Group, - ($Create ? (NamePrefix => 'Object-RT::Group--CustomField-') - : () )&> -
    - - /> <&|/l&>Enabled (Unchecking this box disables this group)
    -
    -<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &> -
    -<%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"; -} - - - - - -<%ARGS> -$Create => undef -$Name => undef -$Description => undef -$SetEnabled => undef -$Enabled => undef -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - -<&| /Widgets/TitleBox, title => loc('Modify user rights for group [_1]', $GroupObj->Name) &> - - - -% while (my $Member = $Users->Next()) { -% my $UserObj = $Member->MemberObj->Object(); - - - - -% } -
    - <% $UserObj->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Member->MemberObj->Id, - PrincipalType => 'User', - Object => $GroupObj &> -
    - - - <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &> - -
    - -<%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(); - - - -# }}} - - - -<%ARGS> -$id => undef -$UserString => undef -$UserOp => undef -$UserField => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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%>:
      -%if ($Groups->Count == 0) { -
    • <&|/l&>No groups matching search criteria found. -% } -%my @ids; -%while ( my $Group = $Groups->Next) { -% push @ids, $Group->Id; -
    • <%$Group->Name || loc('(empty)')%>
      -%} -
    -%if (my $ids = join(',', @ids)) { -(<&|/l&>Download as a tab-delimited file)
    -%} -

    -
    - <&|/l&>Include disabled groups in listing. -
    -
    -
    - -

    -
    -<&|/l&>Find groups whose <& /Elements/SelectGroups &>
    -
    -
    -<%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"); -} - -<%ARGS> -$GroupString => undef -$GroupOp => '=' -$GroupField => 'Name' -$FindDisabledGroups => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - } - }; - - -<%ARGS> -$CustomField => undef -$Queue => 0 - -<%ATTR> -AutoFlush => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); - - -<%ARGS> -$id => undef -$SubType => 'RT::Queue-RT::Ticket' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - - -

    <&|/l&>System groups

    - -<& /Elements/Callback, QueueObj => $QueueObj, results => \@results, %ARGS &> -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToSystemInternalGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% loc($Group->Type) %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $QueueObj &> -
    -

    <&|/l&>Roles

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToRolesForQueue($QueueObj->Id); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% loc($Group->Type) %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $QueueObj &> -
    -

    <&|/l&>User defined groups

    - -% $Groups = RT::Groups->new($session{'CurrentUser'}); -% $Groups->LimitToUserDefinedGroups(); -% while (my $Group = $Groups->Next()) { - - - - -% } -
    - <% $Group->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, - Object => $QueueObj &> -
    - - <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &> - -
    - -<%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; - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - - -
    -%if ($Create ) { - -% } else { - -% } - - - - - - - - - - - - - - - - - - - - - - -
    -<&|/l&>Queue Name: -Name %>" />
    -<&|/l&>Description:Description %>" size="60" />
    -<&|/l&>Reply Address: - -CorrespondAddress %>" /> -
    <&|/l , $RT::CorrespondAddress&>(If left blank, will default to [_1]) -
    - -<&|/l&>Comment Address: -CommentAddress %>" /> -
    <&|/l , $RT::CommentAddress&>(If left blank, will default to [_1]) -
    -<&|/l&>Priority starts at: -InitialPriority %>" /> - -<&|/l&>Over time, priority moves toward: -FinalPriority %>" /> -
    -<&|/l&>Requests should be due in: - -DefaultDueIn%>" /> <&|/l&>days. -
    - - /> <&|/l&>Enabled (Unchecking this box disables this queue)
    -<& /Elements/Callback, QueueObj => $QueueObj, results => \@results, %ARGS &> -
    -<& /Elements/Submit, Label => loc('Save Changes') &> -
    - - - -<%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; -} - - - -<%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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - -
    - - - - - - - -
    - -

    <&|/l&>Current watchers

    - - -<&|/l&>Cc: - -<& /Admin/Elements/EditQueueWatchers, QueueObj => $QueueObj, Watchers => $QueueObj->Cc &> - -<&|/l&>Administrative Cc: - -<& /Admin/Elements/EditQueueWatchers, QueueObj => $QueueObj, Watchers => $QueueObj->AdminCc &> - - -
    -

    <&|/l&>New watchers

    - -<&|/l&>Find people whose
    -<& /Elements/SelectUsers &> - -
    -<&|/l&>Find groups whose
    -<& /Elements/SelectGroups &> - - -

    -<&|/l&>Add new watchers:
    -

    -<&|/l&>Users -% if ($user_msg) { -
    -<%$user_msg%> -% } elsif ($Users) { -

      -% while (my $u = $Users->Next ) { -
    • <&/Elements/SelectWatcherType, Scope=>'queue', Name => -"Queue-AddWatcher-Principal-".$u->PrincipalId &> <%$u->Name%> -(<%$u->RealName%>) -% } -
    -% } - -

    -<&|/l&>Groups - -% if ($group_msg) { -
    -<%$group_msg%> -% } elsif ($Groups) { -

      -% while (my $g = $Groups->Next ) { -
    • <&/Elements/SelectWatcherType, Scope=>'queue', Name => -"Queue-AddWatcher-Principal-".$g->PrincipalId &> <%$g->Name%> -(<%$g->Description%>) -% } -
    -% } - -
    - - - - -<& /Elements/Submit, Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), Reset => 1 &> -
    - -<%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; - - -<%ARGS> -$UserField => 'Name' -$UserOp => '=' -$UserString => undef -$GroupField => 'Name' -$GroupOp => '=' -$GroupString => undef -$Type => undef -$id => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); -} - - - - -<%ARGS> -$id => undef -$Queue => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -

    <&|/l&>Scrips which apply to all queues

    -<& /Admin/Elements/ListGlobalScrips &> -
    -% } -<& /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, - } - }; - - -<%ARGS> -$id => undef #some identifier that a Queue could - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    -%if ($Create ) { - -% } else { - -% } - -%# hang onto the queue id - -<& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name, Description => -$TemplateObj->Description, Content => $TemplateObj->Content &> -<& /Elements/Submit, Label => loc('Create'), Reset => 1 &> -
    - - -<%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); -} - - -<%ARGS> -$Queue => undef -$Template => undef -$Create => undef -$Name => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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, - } - }; - - -<%ARGS> -$id => undef #some identifier that a Queue could - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - - - -<& /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); - - - - -% } -
    - <% $UserObj->Name %> - - <& /Admin/Elements/SelectRights, PrincipalId=> $group->PrincipalId, - Object => $QueueObj &> -
    - - <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &> - -
    - -<%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; - - -<%ARGS> -$id => undef -$UserString => undef -$UserOp => undef -$UserField => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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") &> - - - -

    <%$caption%>

    -

    <&|/l&>Select a queue:

    -
      -%if ($queues->Count == 0) { -
    • <&|/l&>No queues matching search criteria found.
    • -% } -%while ( $queue = $queues->Next) { -
    • <%$queue->Name%>
    • -%} -
    -
    -
    - <&|/l&>Include disabled queues in listing. -
    -
    - -<%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"); -} - - -<%ARGS> -$FindDisabledQueues => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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')); -} - - - -<& /Admin/Elements/Header, Title => $title &> -<& /Admin/Elements/ToolTabs, - current_tab => 'Admin/Tools/Configuration.html', - current_subtab => 'Admin/Tools/Configuration.html', - Title => $title &> - - - - -

    <&|/l&>Loaded perl modules

    -
    -% my $report =  Module::Versions::Report::report();
    -% my @report = grep { /v\d/ } split("\n",$report);
    -<%join('
    ', @report)|n%> - - -
    - -

    <&|/l&>RT Variables

    - -%{ -%no strict qw/refs/; - -%foreach my $key (sort keys %{*RT::}) { -% next unless (${'RT::'.$key} ); -% next if (ref ${'RT::'.$key} ); - - - -% } -%} -
    RT::<%$key%> -% if ($key =~ /Password(?!Length)/i) { -Password not printed -% } else { -<%${'RT::'.$key} %> -% } -
    - -

    <&|/l&>Perl configuration

    -% require Config; -
    -<%Config::myconfig()%>
    -
    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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'); - -<& /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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -

    <&|/l&>Groups

    - -<& /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; - -<%ARGS> -$id => undef - diff --git a/rt/html/Admin/Users/Modify.html b/rt/html/Admin/Users/Modify.html deleted file mode 100644 index 1be96f695..000000000 --- a/rt/html/Admin/Users/Modify.html +++ /dev/null @@ -1,445 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Admin/Elements/Header, Title => $title &> -<& /Admin/Elements/UserTabs, - id => $id, - UserObj => $UserObj, - current_tab => $current_tab, - Title => $title &> - -<& /Elements/ListActions, actions => \@results &> - -
    -%if ($Create) { - -% } else { - -% } - - - - - - - - - -
    -<&| /Widgets/TitleBox, title => loc('Identity') &> - - - - - - - - - -
    -<&|/l&>Username: - - <&|/l&>(required) -
    -<&|/l&>Email: - - -
    -<&|/l&>Real Name: - - -
    -<&|/l&>Nickname: - - -
    -<&|/l&>Unix login: - - -
    -<&|/l&>Language: - -<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &> -
    -<&|/l&>Extra info: - - -
    - -
    - -<&| /Widgets/TitleBox, title => loc('Customers') &> -<& /Elements/EditCustomers, Object => $UserObj, CustomerString=> $CustomerString, ServiceString => $ServiceString &> - -
    - -<&| /Widgets/TitleBox, title => loc('Access control') &> - - /> -<&|/l&>Let this user access RT
    - - - - /> <&|/l&>Let this user be granted rights
    - -% unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) { - - - - - - - - -
    -<&|/l&>New Password: - - -
    -<&|/l&>Retype Password: - - -
    -% } - -<& /Elements/Callback, _CallbackName => 'LeftColumnBottom', UserObj => $UserObj, %ARGS &> -
    -<&| /Widgets/TitleBox, title => loc('Location') &> - - - - - - - - -
    -<&|/l&>Organization: - - -
    -<&|/l&>Address1: - - -
    -<&|/l&>Address2: - - -
    -<&|/l&>City: - - - -
    -<&|/l&>State: - - - -
    -<&|/l&>Zip: - - -
    -<&|/l&>Country: - - -
    - -
    -<&| /Widgets/TitleBox, title => loc('Phone numbers') &> - - - - - - -
    -<&|/l&>Residence: - -
    -
    -<&|/l&>Work: - -
    -
    -<&|/l&>Mobile: - -
    -
    -<&|/l&>Pager: - -
    -
    - -
    -<&| /Widgets/TitleBox, title => loc('Custom Fields') &> - -% my $CFs = $UserObj->CustomFields; -% while (my $CF = $CFs->Next) { - -% } -
    -<% $CF->Name %>: - -% if ($UserObj->id) { -<& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &> -% } else { -<& /Elements/EditCustomField, %ARGS, NamePrefix => 'Object-RT::User-new-CustomField-', CustomField => $CF &> -% } -
    - -<& /Elements/Callback, _CallbackName => 'RightColumnBottom', UserObj => $UserObj, %ARGS &> -
    -<&| /Widgets/TitleBox, title => loc('Comments about this user') &> - - -%if ($UserObj->Privileged) { -
    -<&| /Widgets/TitleBox, title => loc('Signature') &> - - -% } - -
    - -<& /Elements/Submit, Label => loc('Save Changes') &> -
    - -<%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 freeside customer links - push @results, ProcessObjectCustomers( 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; - - - - -<%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 -$OnlySearchForCustomers => undef -$OnlySearchForServices => undef -$CustomerString => undef -$ServiceString => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
    - - - -
    - -
    - -% for my $pane (@panes) { -<&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &> -<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &> -
    -% } - -<%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; - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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') &> - -

    <%$caption%>

    -

    <&|/l&>Select a user:

    - -%if (my $ids = join(',', @ids)) { -(<&|/l&>Download as a tab-delimited file)
    -%} - -

    -
    - -<&|/l&>Find people whose <& /Elements/SelectUsers &>
    - <&|/l&>Include disabled users in search. -
    -
    -
    - -<%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; -} - -<%ARGS> -$UserString => undef -$UserOp => '=' -$UserField => 'Name' -$IdLike => undef -$EmailLike => undef -$FindDisabledUsers => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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, -); - \ 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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') &> - - -<%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); - - - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
    - -<&| /Widgets/TitleBox, title => $title &> -<& /Ticket/Elements/ShowHistory , Ticket => $Ticket, Collapsed => 0, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowTitleBarCommands => 0 &> -
    -<& Elements/Approve, ticket => $Ticket, ShowApproving => 0 &> - -<& /Elements/Submit&> -
    -<& Elements/ShowDependency, Ticket => $Ticket &> - -<%init> -my $Ticket = LoadTicket($id); - -my $title = loc("Approval #[_1]: [_2]", $Ticket->Id, $Ticket->Subject); - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ($ShowApproving) { -% foreach my $approving ( $ticket->AllDependedOnBy( Type => 'ticket' ) ) { -
    - <&|/l, $approving->Id, $approving->Subject &>Originating ticket: #[_1] -
    -% if ($ShowCustomFields) { - <& /Ticket/Elements/ShowCustomFields, Ticket => $approving &> -% } -% if ($ShowHistory) { - <& /Ticket/Elements/ShowHistory, Ticket => $approving, Collapsed => 0, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowTitleBarCommands => 0 &> -% } -
    -
    -% } -% } -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    - - -
    -
    -
    -
    -<%ARGS> -$ShowApproving => 1 -$ShowCustomFields => 1 -$ShowHistory => 1 -$ticket => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 %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") &> - /> <&|/l&>Show pending requests
    - /> <&|/l&>Show approved requests
    - /> <&|/l&>Show denied requests
    - /> <&|/l&>Show requests awaiting other approvals
    - -<&|/l,""&>Only show approvals for requests created before [_1]
    - -<&|/l, ""&>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 ); - } -} - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -

    <&|/l&>Tickets which depend on this approval:

    - - - - - -
      -<%PERL> -my %show; -while (my $link = $approving->Next()) { - next unless ($link->BaseURI->IsLocal()); - my $text = ''; - 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 .= ''; - $show{$link->BaseObj->Id} = { - text => $text, - head => $head, - }; -} - -my $refer; -foreach my $id (sort keys %show) { - if ($_seen->{$id}++) { - $refer .= "" . $show{$id}{head} . ""; - next; - } - - $m->print($show{$id}{text}); -} -$m->print($refer); - - -
    - -% } -<%ARGS> -$Ticket -$_seen => {} - diff --git a/rt/html/Approvals/Elements/Tabs b/rt/html/Approvals/Elements/Tabs deleted file mode 100644 index 3a4ba7c02..000000000 --- a/rt/html/Approvals/Elements/Tabs +++ /dev/null @@ -1,58 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Elements/Tabs, - tabs => $tabs, - current_toptab => 'Approvals/', - current_tab => $current_tab, - Title => $Title &> - -<%ARGS> -$tabs => undef -$current_tab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
    -<& Elements/PendingMyApproval, %ARGS &> -<& /Elements/Submit, Label => loc('Go!') &> -
    -<%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); -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%attr> -AutoFlush => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%attr> -AutoFlush => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format => $FormatString ); - -my $item = 0; -foreach my $col (@Format) { - $item++; - if ( $col->{title} && ($col->{title} eq 'NEWLINE') ) { - while ( $item < $maxitems ) { - $m->out(qq{\n}); - $item++; - } - - $item = 0; - $m->out(qq{\n}); - } - else { - $m->out(''); - } -} - - diff --git a/rt/html/Elements/CollectionAsTable/ParseFormat b/rt/html/Elements/CollectionAsTable/ParseFormat deleted file mode 100644 index a85da31d4..000000000 --- a/rt/html/Elements/CollectionAsTable/ParseFormat +++ /dev/null @@ -1,106 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%ARGS> -$Format - - -<%init> -use Regexp::Common qw/delimited/; -my @Columns; - -while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) { - my $col = $1; - - if ($col =~ /^$RE{quoted}$/o) { - substr($col,0,1) = ""; - substr($col,-1,1) = ""; - } - - my $colref = { - title => '', - }; - - if ( $col =~ s!/STYLE:([^/]+)!!io ) { - $colref->{'style'} = $1; - } - if ( $col =~ s!/CLASS:([^/]+)!!io ) { - $colref->{'class'} = $1; - } - if ( $col =~ s!/TITLE:([^/]+)!!io ) { - $colref->{'title'} = $1; - } - if ( $col =~ s!/ALIGN:([^\/]+)!!io ) { - $colref->{'align'} = $1; - } - if ( $col =~ /__(.*?)__/gio ) { - my @subcols; - while ( $col =~ s/^(.*?)__(.*?)__//o ) { - push ( @subcols, $1 ) if ($1); - push ( @subcols, "__$2__" ); - $colref->{'attribute'} = $2; - } - push ( @subcols, $col ); - @{ $colref->{'output'} } = @subcols; - } - else { - @{ $colref->{'output'} } = ( "__" . $col . "__" ); - $colref->{'attribute'} = $col; - } - - if ( !$colref->{'title'} && grep { /^__(.+?)__$/io } - @{ $colref->{'output'} } ) - { - $colref->{'title'} = $1; - $colref->{'attribute'} = $1; - } - - - push @Columns, $colref; -} - return(@Columns); - diff --git a/rt/html/Elements/CollectionAsTable/Row b/rt/html/Elements/CollectionAsTable/Row deleted file mode 100644 index bb9032149..000000000 --- a/rt/html/Elements/CollectionAsTable/Row +++ /dev/null @@ -1,117 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%ARGS> -$i => undef -@Format => undef -$record => undef -$maxitems => undef -$Depth => undef -$Warning => undef - - -<%PERL> -use HTML::Entities; -$m->out('' ); -my $item; -foreach my $column (@Format) { - if ( defined $column->{title} && $column->{title} eq 'NEWLINE' ) { - while ( $item < $maxitems ) { - $m->out(qq{\n}); - $item++; - } - $item = 0; - $m->out(''); - $m->out('' ); - next; - } - $item++; - my $class = $column->{class} - ? encode_entities($column->{class}, q{'"&<>}) : 'collection-as-table'; - $m->out(qq{'); -} -$m->out(''); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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, $m->scomp('/Elements/SelectNewTicketQueue')&> [_1] - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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".''."\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, -); - -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Rows => 5 -$Cols => 15 -$Default => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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? -<% $value->Content %>
    -% } -% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { - -% } -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Default => undef -$Values => undef -$MaxValues => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -<% $value->Content %> -
    -% } -% (!$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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { - -% } else { - -% } -<%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; -} - -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Default => undef -$Values => undef -$Multiple => undef -$Cols -$Rows - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ) { -<& ShowCustomFieldImage, Object => $value &> -
    -% } -% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { - -% } -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Default => undef -$Values => undef -$MaxValues => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { - -%# XXX - Hide this select from w3m? -
    -% } - -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Default => undef -$Values => undef -$Multiple => 0 -$Rows => undef - - -<%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) { - -% pop @levels; -% } else { -% last; -% } -% } -% if ($level) { -% push @$CategoryRef, [0+@levels, $level]; - -% push @levels, $level; -% } -% } - -% } -% for (@levels) { - -% } -<%args> -$CustomField => undef -$Default => undef -$Values => undef -$SelectedRef => undef -$CategoryRef => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ) { -
    -% } -% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { - -% } -<%INIT> -# XXX - MultiValue textarea is for now outlawed. -$MaxValues = 1; - -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Default => undef -$Values => undef -$MaxValues => undef -$Cols -$Rows - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ) { -
    -% } -% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { - -% } -<%INIT> -# XXX - MultiValue textarea is for now outlawed. -$MaxValues = 1; - -<%ARGS> -$Object => undef -$CustomField => undef -$NamePrefix => undef -$Default => undef -$Values => undef -$MaxValues => undef -$Cols -$Rows - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%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; - -<%args> -$_CallbackName => 'Default' -$Page => undef - diff --git a/rt/html/Elements/Checkbox b/rt/html/Elements/Checkbox deleted file mode 100644 index e1d7f3d04..000000000 --- a/rt/html/Elements/Checkbox +++ /dev/null @@ -1,63 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - /> - -<%ARGS> -$Name => undef -$Default => undef -$True => undef -$False => undef -$IsChecked => undef - - -<%INIT> -$IsChecked = - ($Default && $Default =~ /checked/i) - ? " CHECKED " : ""; -1; - diff --git a/rt/html/Elements/CollectionAsTable/Header b/rt/html/Elements/CollectionAsTable/Header deleted file mode 100644 index cdcd2fde0..000000000 --- a/rt/html/Elements/CollectionAsTable/Header +++ /dev/null @@ -1,125 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%ARGS> -@Format => undef -$FormatString => undef -$AllowSorting => undef -$Order=>undef -$BaseURL => undef -$Query => undef -$Rows => undef -$Page => undef -$maxitems => undef - -
     
    '); - my $title = $col->{title} || ''; - $title =~ s/^__(.*)__$/$1/o; - $title = ( - $m->comp( - '/Elements/RT__Ticket/ColumnMap', - Name => $title, - Attr => 'title' - ) - || $title - ); - if ( - $AllowSorting - && $col->{'attribute'} - && $m->comp( - '/Elements/RT__Ticket/ColumnMap', - Name => $col->{'attribute'}, - Attr => 'attribute' - ) - ) - { - - $m->out( - '' - . loc($title) . '' - ); - } - else { - $m->out( loc($title) ); - } - $m->out('
     
    out( 'align="' . $column->{align} . '"' ) if ( $column->{align} ); - $m->out( 'style="' . $column->{style} . '"' ) if ( $column->{style} ); - $m->out('>'); - foreach my $subcol ( @{ $column->{output} } ) { - if ( $subcol =~ /^__(.*?)__$/o ) { - my $col = $1; - my $value = $m->comp( - '/Elements/RT__Ticket/ColumnMap', - Name => $col, - Attr => 'value' - ); - my @out; - - if ( $value && ref($value) ) { - - # All HTML snippets are returned by the callback function - # as scalar references. Data fetched from the objects are - # plain scalars, and needs to be escaped properly. - @out = - map { - ref($_) ? $$_ : $m->interp->apply_escapes( $_ => 'h' ) - } &{$value}( $record, $i ) - ; - } - else { - - # Simple value; just escape it. - @out = $m->interp->apply_escapes( $value => 'h' ); - } - s/\n/
    /gs for @out; - $m->out( @out ); - } - else { - $m->out($subcol); - } - } - $m->out('
    - - - - -
    -

    <&|/l&>Current Links

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    <&|/l&>(Check box to delete)
    <&|/l&>Depends on: -% while (my $link = $Object->DependsOn->Next) { - - <& ShowLink, URI => $link->TargetURI &>
    -% } -
    <&|/l&>Depended on by: -% while (my $link = $Object->DependedOnBy->Next) { - - <& ShowLink, URI => $link->BaseURI &>
    -% } -
    <&|/l&>Parents: -% while (my $link = $Object->MemberOf->Next) { - - <& ShowLink, URI => $link->TargetURI &>
    -% } -
    <&|/l&>Children: -% while (my $link = $Object->Members->Next) { - - <& ShowLink, URI => $link->BaseURI &>
    -% } -
    <&|/l&>Refers to: -% while (my $link = $Object->RefersTo->Next) { - - <& ShowLink, URI => $link->TargetURI &>
    -%} -
    <&|/l&>Referred to by: -% while (my $link = $Object->ReferredToBy->Next) { -% # Skip reminders -% next if (UNIVERSAL::isa($link->BaseObj, 'RT::Ticket') && $link->BaseObj->Type eq 'reminder'); - - <& ShowLink, URI => $link->BaseURI &>
    -% } -
    - -
    -

    <&|/l&>New Links

    -% if (ref($Object) eq 'RT::Ticket') { -<&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces. -<& /Elements/Callback, _CallbackName => 'ExtraLinkInstructions' &> -
    -% } elsif (ref($Object) eq 'RT::Queue') { -<&|/l&>Enter queues or URIs to link queues to. Separate multiple entries with spaces. -
    -% } else { -<&|/l&>Enter objects or URIs to link objects to. Separate multiple entries with spaces.
    -% } - -% if ($Merge) { - - - - -% } - - - - - - - - - - - - - - - - - - - - - - - - -
    <&|/l&>Merge into: <&|/l&>(only one ticket)
    <&|/l&>Depends on:
    <&|/l&>Depended on by:
    <&|/l&>Parents:
    <&|/l&>Children:
    <&|/l&>Refers to:
    <&|/l&>Referred to by:
    -
    - -<%INIT> -my $id; -if ($Object && $Object->Id) { - $id = $Object->Id; -} else { - $id = 'new'; -} - - -<%ARGS> -$Object => undef -$Merge => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
    -<%$Why%> -
    -<%$Details%> -
    - -<%cleanup> -$m->comp('/Elements/Footer'); -$m->abort(); - - -<%args> -$Code => undef -$Details =>'' -$Title => loc("RT Error") -$Why => loc("the calling component did not specify why") - - -<%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(); -} - diff --git a/rt/html/Elements/Footer b/rt/html/Elements/Footer deleted file mode 100644 index 914bbbd3b..000000000 --- a/rt/html/Elements/Footer +++ /dev/null @@ -1,75 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# End of div#body from /Elements/PageLayout - - - - - -<& /Elements/Callback, %ARGS &> - -% if ($Debug >= 2 ) { -% require Data::Dumper; -% my $d = Data::Dumper->new([\%ARGS], [qw(%ARGS)]); -
    -<%$d->Dump() %>
    -
    -% } - - - - - - - -% $m->abort(); - -<%ARGS> -$Debug => 0 -$Menu => 1 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/Header b/rt/html/Elements/Header deleted file mode 100644 index 571da6c90..000000000 --- a/rt/html/Elements/Header +++ /dev/null @@ -1,126 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<% include( '/elements/header.html', { - 'title' => $Title, - 'head' => $head, - 'nobr' => 1, - 'nocss' => 1, - }) |n -%> - -%# if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf', Object => $RT::System )) { -%# | <&|/l&>Preferences -%# } - -<%INIT> -$r->headers_out->{'Pragma'} = 'no-cache'; -$r->headers_out->{'Cache-control'} = 'no-cache'; - -require RT::URI::freeside; - -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 > 0) { - $head .= ''; -} - -$head .= < - - -END - -if ( $RSSAutoDiscovery ) { - $head .= qq(); -} - -$head .= < - - -'; - -$head .= $m->scomp( '/Elements/Callback', _CallbackName => 'Head', %ARGS ); - -my $etc = ''; -$etc .= qq[ id="comp-$id"] if $id; - - - -<%ARGS> -$Prefs => '/User/Prefs.html' -#$Focus => 'focus' -$Focus => '' -$Title => 'RT' -$Code => undef -$Refresh => 0 -$Why => undef -$ShowBar => 1 -$URL => undef -$RSSAutoDiscovery => undef -$onload => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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') &> -
      -% foreach my $action (@actions) { -% next unless $action; -% my $skip = 0; -% $m->comp('/Elements/Callback', _CallbackName => 'ModifyRow', row => \$action, skip => \$skip, %ARGS); -% next if $skip; -
    • <%$action%>
    • -% } -
    - -<%init> -@actions = grep $_, @actions; -return unless @actions; - -<%ARGS> -@actions => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - ; - - -<& /Elements/Callback, %ARGS, _CallbackName => 'Header' &> -<& /Elements/Header, Title => loc('Login'), Focus => 'user' &> - -%# End of div#quickbar from /Elements/Header - - -
  • -% if ($sep) { -
  • ···
  • -% } -% -% $postsep = $sep; -% } - -
- -<%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; - - -<%ARGS> -$current_toptab => "" -$toptabs => undef -$level => 0 -$last_level => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $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; -} - - -<%ARGS> -$QuoteTransaction => undef -$Name => 'Content' -$Default => '' -$Width => $RT::MessageBoxWidth || 72 -$Height => $RT::MessageBoxHeight || 15 -$Wrap => $RT::MessageBoxWrap || 'HARD' -$IncludeSignature => 1 - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ( $summary ) { - -% } - - -
> -% $show_cb->($_) foreach @$body; - -% $show_cb->($_) foreach @$summary; -
- -<%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"); - } -}; - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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") &> - -% my $i =0; -% while (my $reminder = $reminders->Next) { -% $i++; -% if ($reminder->RefersTo->First) { -% my $ticket= $reminder->RefersTo->First->TargetObj; - - -% }} -
<%$reminder->Subject%>
-
-#<%$ticket->id%>: <%$ticket->Subject%>
-<%$reminder->OwnerObj->Name %> <%$reminder->DueObj->Unix >0 ? '• '.$reminder->DueObj->AgeAsString : '' |n %> -
-
- - -<%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'); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 3185662e1..000000000 --- a/rt/html/Elements/PageLayout +++ /dev/null @@ -1,327 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% #false laziness w/menubar.html... shouldn't these just go in freeside.css? - -<% include('/elements/init_calendar.html') |n %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%INIT> -my @people = ('Actor', - 'Watcher', - 'WatcherGroup', - ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 . "}'"; - - - -% } -<%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(); - - - -<%ARGS> -%cfqueues => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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')&> -
- -% if (0) { ##FREESIDE MENUS INSTEAD## if ( $show_menu ) { -%# if ( $show_menu ) { - -% } - -%#already shown

<%$title%>

- -% my $sep = 0; -% my $postsep = 0; -% my $count = 0; -% my $class = { }; -% - - - - -%# - -%# } else { -%#  -% } - -% if (($actions && %$actions) || ($subactions && %$subactions)) { - -% 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} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && "· "|n%>{a}|n%><% $class->{a} ? ' name="focus"' : ''|n %>><% $page_tabs->{$tab}->{'title'} %> - -% $class->{a} = $path eq $current ? ' class="fsblackbuttonselected"' : ' class="fsblackbutton"'; - {a}|n%><% $class->{a} =~ 'selected' ? ' name="focus"' : ''|n %>><% $page_tabs->{$tab}->{'title'} %> - -% } -    -% $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} ? qq[ class="$class->{li}"] : ''|n %>><% $count > 1 && !$postsep && qq[· ]|n%> - -% #$class->{a} = $path eq $current ? ' class="fsblackbuttonselected"' : ' class="fsblackbutton"'; -% $type->{$action}->{class} ||= 'fsdarkbutton'; - -% if ($type->{"$action"}->{'html'}) { - <% $type->{"$action"}->{'html'} | n %> -% } else { - {$action}->{class} && ' class="'.$type->{$action}->{class}.'"' |n %><% $type->{$action}->{id} && ' id="'.$type->{$action}->{id}.'"' |n %>><%$type->{$action}->{'title'}%> -% } - -% } -% } -% } - -
- - -
-<& /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}; - } -} - - -%# 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 - - <%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]; - - - -<%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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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)); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - -% for my $condition (@$conditions) { - -% } - -% 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')"; - - -% for my $condition (@$conditions) { -% $Tickets->FromSQL( "Queue = $queue->{id} AND ". $condition->{cond} ); - -% } - -% } -
<&|/l&>Queue<% $condition->{name} %>
<% $queue->{Name} %><% $Tickets->Count %>
-<%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'}); - -<%ARGS> -$cache => undef -$queue_filter => undef -$conditions => () - diff --git a/rt/html/Elements/QuickCreate b/rt/html/Elements/QuickCreate deleted file mode 100644 index 83d3a0d38..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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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('Quick ticket creation') &> -
- - - - -%# -
-<&|/l&>Subject:
-
-<&|/l&>Queue:
<& /Elements/SelectNewTicketQueue, Name => 'Queue', ShowNullOption => 0 &> -
-<&|/l&>Owner:
- -
-
-
- -
- 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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("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') }] &> - -
-<%INIT> -my $unwanted = $session{'CurrentUser'}->UserObj->Preferences('QuickSearch', {}); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - - - -<%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 - ), - \'
', - } @{ $values->ItemsArrayRef }; - pop @values; # Remove that last
- 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 { - \'', - ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), - \'
', - } @{ $_[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 \'', loc('(pending approval)'), \''; - } - else { - return \'', loc('(pending other Collection)'), \''; - } - } - 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 (\'' , $date->AgeAsString , \''); - } 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 \('') } - }, - -}; - -<%init> -$m->comp( '/Elements/Callback', COLUMN_MAP => $COLUMN_MAP, _CallbackName => 'ColumnMap'); -return $ColumnMap->( $Name, $Attr ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 @refreshevery = qw(120 300 600 1200 3600 7200); - -<%ARGS> -$Name => undef -$Default => 0 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/Refresh, Name => 'HomeRefreshInterval', Default => $session {'home_refresh_interval'} &> -
-
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) ); - -<%args> -$Content => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -

<%$title%>

-<%ARGS> -$title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => 'AttachmentField' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -$True => loc("is") -$Default => 'true' -$TrueVal => 1 -$FalseVal => 0 -$False => loc("isn't") - - -<%INIT> -my $TrueDefault = ''; -my $FalseDefault =''; -if ($Default && $Default !~ /true/i) { - $FalseDefault = "SELECTED"; -} -else { - $TrueDefault = "SELECTED"; -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -@Options => ( loc('contains'), loc("doesn't contain"), loc('is'), loc("isn't"), loc('less than'), loc('greater than')) -@Values => ('LIKE', 'NOT LIKE', '=', '!=', '<', '>') -$Default => '' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -% } -% else { - -% } -<%args> -$Name => undef -$CustomField =>undef - diff --git a/rt/html/Elements/SelectDate b/rt/html/Elements/SelectDate deleted file mode 100644 index d911cf713..000000000 --- a/rt/html/Elements/SelectDate +++ /dev/null @@ -1,86 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# in PageLayout instead, once <% include('/elements/init_calendar.html') |n %> - - - -<%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"; -} - - -<%args> - -$ShowTime => undef -$menu_prefix=>'' -$current=>time -$Default => '' -$Name => undef -$Size => 16 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -$Default => undef -$Before => loc('Before') -$On => loc('On') -$After => loc('After') - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => 'DateType' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -@Options => (loc('less than'), loc('equal to'), loc('greater than'), loc('not equal to')) -@Values => qw(< = > !=) -$Default =>'' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/SelectMatch, Name=> 'GroupOp' &> - -<%INIT> -my $CFs = RT::CustomFields->new($session{'CurrentUser'}); -$CFs->LimitToChildType('RT::Group'); -$CFs->OrderBy( FIELD => 'Name' ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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> -$ShowNullOption => 1 -$ShowAllQueues => 1 -$Name => undef -$Verbose => undef -$Default => 0 -$Lite => 0 - - -<%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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => "LinkType" -$Default => undef - - -<%INIT> -# TODO handle Default - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -$Like => loc('contains') -$NotLike => loc("doesn't contain") -$True => loc('is') -$False => loc("isn't") -$Default => undef - -<%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"; -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 @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); - - - - - -<%ARGS> -$QueueObj => undef -$Name => undef -$Default => 0 -$User => undef -$TicketObj => undef -$DefaultValue => 1 -$DefaultLabel => "-" -$ValueAttribute => 'id' -$cfqueues => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - -% } -% else { - -% } -<%args> -$CheckQueueRight => 'CreateTicket' -$ShowNullOption => 1 -$ShowAllQueues => 1 -$Name => undef -$Verbose => undef -$NamedValues => 0 -$Default => 0 -$Lite => 0 - -<%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, - }; - } - } -} - diff --git a/rt/html/Elements/SelectResultsPerPage b/rt/html/Elements/SelectResultsPerPage deleted file mode 100644 index 4b1fa7f0c..000000000 --- a/rt/html/Elements/SelectResultsPerPage +++ /dev/null @@ -1,68 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# TODO: Better default handling - - - -<%INIT> -my @values = qw(0 10 25 50 100); -my @labels = (loc('Unlimited'), qw(10 25 50 100)); -$Default = 50 unless defined $Default; - -<%ARGS> - -$Name => undef -$Default => 50 - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 @orders = qw (ASC DESC); -my @order_names = (loc('Ascending'), loc('Descending')); - - - -<%ARGS> -$Name => 'SortOrder' -$Default => 'ASC' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $queue = new RT::Queue($session{'CurrentUser'}); -my @status = $queue->StatusArray(); - -<%ARGS> -$Name => undef -$Default => '' -$SkipDeleted => 0 -$DefaultValue => 1 -$DefaultLabel => "-" - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 = new RT::Tickets($session{'CurrentUser'}); -my @sortfields = $tickets->SortFields(); - - -<%ARGS> -$Name => 'SortTicketsBy' -$Default => 'id' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => 'TickType' -$Default => undef -@Types => qw(Approval Ticket) - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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> -$Name .= '-TimeUnits' unless $Name =~ /-TimeUnits$/io; - -<%ARGS> -$Name => '' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/SelectMatch, Name=> 'UserOp' &> - -<%INIT> -my $CFs = RT::CustomFields->new($session{'CurrentUser'}); -$CFs->LimitToChildType('RT::User'); -$CFs->OrderBy( FIELD => 'Name' ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 @types; -if ($Scope =~ 'queue') { - @types = qw(Cc AdminCc); -} -else { - @types = qw(Requestor Cc AdminCc); -} - -<%ARGS> -$AllowNull => 1 -$Default=>undef -$Scope => 'ticket' -$Name => 'WatcherType' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 (); - -<%args> -$SessionCookie => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<% $Object->Content %> -<%ARGS> -$Object => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; -<% $Object->Content %> - -<%ARGS> -$Object - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%ARGS> -$Object - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $Values = $Object->CustomFieldValues( $CustomField->Id ); -% my $count = $Values->Count; - - - - -% } -
<% $CustomField->Name %>: -% unless ( $count ) { -<&|/l&>(no value) -% } elsif ( $count == 1 ) { -% $print_value->( $CustomField, $Values->First ); -% } else { -
    -% while ( my $Value = $Values->Next ) { -
  • -% $print_value->( $CustomField, $Value ); -
  • -% } -
-% } -
-<%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(''); - } - 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('') 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( '
' ); - $m->print( loc("See also:") ); - $m->out( '' ); - $m->print( $value->IncludeContentForValue ); - $m->out( qq{
\n} ); - $m->out( qq{\n} ); - } -}; - - -<%ARGS> -$Object => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ($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%> -% } - -<%ARGS> -$URI => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - - - - - - - - - - -% # Allow people to add more rows to the table -% $m->comp('/Elements/Callback', %ARGS ); - -
<&|/l&>Depends on: -
    -% while (my $Link = $Ticket->DependsOn->Next) { -
  • <& ShowLink, URI => $Link->TargetURI &>
  • -% } -
-
<&|/l&>Depended on by: -
    -% while (my $Link = $Ticket->DependedOnBy->Next) { -
  • <& ShowLink, URI => $Link->BaseURI &>
  • -% } -
-
<&|/l&>Parents: -
    -% while (my $Link = $Ticket->MemberOf->Next) { -
  • <& ShowLink, URI => $Link->TargetURI &>
  • -% } -
-
<&|/l&>Children:<& /Ticket/Elements/ShowMembers, Ticket => $Ticket &>
<&|/l&>Refers to: -
    -% while (my $Link = $Ticket->RefersTo->Next) { -
  • <& ShowLink, URI => $Link->TargetURI &>
  • -% } -
-
<&|/l&>Referred to by: -
    -% while (my $Link = $Ticket->ReferredToBy->Next) { -% next if (UNIVERSAL::isa($Link->BaseObj, 'RT::Ticket') && $Link->BaseObj->Type eq 'reminder'); -
  • <& ShowLink, URI => $Link->BaseURI &>
  • -% } -
-
- -<%ARGS> -$Ticket => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $GroupMember = $GroupMembers->Next ) { -% my $Group = RT::Group->new($session{'CurrentUser'}); -% $Group->Load($GroupMember->GroupId) or next; -% if ($Group->Domain eq 'UserDefined') { -
  • <% $Group->Name %>
  • -% } elsif ($Group->Domain eq 'SystemInternal') { -
  • <% loc($Group->Type) %>
  • -% } -% } -
-<%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' }, -); - -<%ARGS> -$UserObj - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); - - -<%ARGS> -$Name => undef -$SavedSearch => undef -%Override => () - diff --git a/rt/html/Elements/SimpleSearch b/rt/html/Elements/SimpleSearch deleted file mode 100644 index 5f83da03e..000000000 --- a/rt/html/Elements/SimpleSearch +++ /dev/null @@ -1,58 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
- -
-Advanced - -
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ($CheckAll) { - -% } -% if ($ClearAll) { - -% } -% if ($Reset) { - -% } -
-
-% if ($AlternateLabel) { - <%$AlternateCaption%> - value="<%$AlternateLabel%>" class="button" /> -% } else { - <%$Caption%> - value="<%$Label%>" class="button" /> -% } -
-
-
- -<%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') - diff --git a/rt/html/Elements/Tabs b/rt/html/Elements/Tabs deleted file mode 100644 index 7b3d80928..000000000 --- a/rt/html/Elements/Tabs +++ /dev/null @@ -1,120 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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, -&> - -<%INIT> -my $action; -my $basetabs = { - ' A'=> { title => 'Billing Main', - path => &RT::URI::freeside::FreesideURL(), - }, - A => { #title => loc('Homepage'), - title => 'Ticketing Main', - path => '', - }, - Ab => { title => loc('Simple Ticket Search'), - path => 'Search/Simple.html' - }, - B => { title => loc('Adv. Ticket Search'), - 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; -} - - require RT::URI::freeside; - - # Now let callbacks add their extra tabs - $m->comp('/Elements/Callback', - topactions => $topactions, - toptabs => $toptabs, %ARGS); - - -<%ARGS> -$current_toptab => undef -$current_tab => undef -$toptabs => undef -$topactions => undef -$tabs => undef -$actions => undef -$subactions => undef -$Title => undef -$show_menu => 1 - diff --git a/rt/html/Elements/TicketList b/rt/html/Elements/TicketList deleted file mode 100644 index 7f715d921..000000000 --- a/rt/html/Elements/TicketList +++ /dev/null @@ -1,179 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -% 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. -% # hun, this flushes things out out-of-order for me on "RT at a glance"...? -% # $m->flush_buffer() unless ($i % 10); -<& /Elements/CollectionAsTable/Row, Format => \@Format, i => $i, record => $record, maxitems => $maxitems &> -% } - -
- -% if ($Rows && $ShowNavigation) { -
-% 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 ) -); - -% if ($Page > 1) { -<&|/l&>Previous Page -% } -% if (($Page * $Rows) < $TotalFound) { -<&|/l&>Next Page -% } -% } -<%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(); - - -<%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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%ARGS> -$CustomFields -$ARGSRef -$NamePrefix => "Object-RT::Ticket--CustomField-" - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -
-
- -<&|/l&>Close window - -
- - - -% foreach my $wday (@weekdays) { - -% } - -% foreach my $week (@cal) { - -% foreach my $day (@{$week}) { - -% } #foreach $day - -% } # foreach $week -
- - <% $months[$DisplayedMonth-1] %> <% $DisplayedYear %> - -
<%$wday%>
-% if ($day) { -% my $datestr = sprintf('%04d-%02d-%02d', $DisplayedYear, $DisplayedMonth, $day); - <% $day %> -% } else { -   -% } -
-
-
- - -% $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); - - -<%args> -$field => 'none' -$DisplayedMonth => undef -$DisplayedYear => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -RT: Logout - - - -

<&|/l&>You have been logged out of RT. - -
-
-<&|/l&>You're welcome to login again. - -% $m->abort(); - -<%INIT> -$m->comp('/Elements/Callback', _CallbackName => 'BeforeSessionDelete', %ARGS); - -if (defined %session) { - tied(%session)->delete; -} - -$m->comp('/Elements/Callback', _CallbackName => 'AfterSessionDelete', %ARGS); - - -<%ARGS> -$URL => $RT::WebPath."/" - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/footer.css b/rt/html/NoAuth/css/3.4-compat/footer.css deleted file mode 100644 index 326ff647d..000000000 --- a/rt/html/NoAuth/css/3.4-compat/footer.css +++ /dev/null @@ -1,61 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#footer { - clear: both; - font-size: 0.8em; - margin-top: 5em; - padding-bottom: 2em; - color: #888; -} - -#footer p { - text-align: right; - padding: 0 0.5em 0 0; - margin: 0; -} - diff --git a/rt/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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/login.css b/rt/html/NoAuth/css/3.4-compat/login.css deleted file mode 100644 index 7b8fad6a7..000000000 --- a/rt/html/NoAuth/css/3.4-compat/login.css +++ /dev/null @@ -1,54 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#body.login-body { - width: 98%; -} - -#login-box { - width: 30em; -} 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/quickbar.css b/rt/html/NoAuth/css/3.4-compat/quickbar.css deleted file mode 100644 index a7b23d5e5..000000000 --- a/rt/html/NoAuth/css/3.4-compat/quickbar.css +++ /dev/null @@ -1,82 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#quickbar { - border: 1px solid transparent; -} - -#quickbar #quick-personal { - display: inline; - color: #888; - padding: 0.5em 1em 0 0; - float: right; -} - -#quickbar #quick-personal span { - font-weight: bold; -} - -#quickbar #quick-personal :link, -#quickbar #quick-personal :visited -{ - color: #888; - font-weight: bold; -} - -#quickbar #quick-personal :link:hover, -#quickbar #quick-personal :visited:hover -{ - color: black; -} - -#quickbar #topactions { - color: white; - font-size: 0.9em; - position: relative; - right: 1em; - float: right; -} diff --git a/rt/html/NoAuth/css/3.4-compat/ticket.css b/rt/html/NoAuth/css/3.4-compat/ticket.css deleted file mode 100644 index b51c70198..000000000 --- a/rt/html/NoAuth/css/3.4-compat/ticket.css +++ /dev/null @@ -1,50 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.value { - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/forms.css b/rt/html/NoAuth/css/3.5-default/forms.css deleted file mode 100755 index 3b7f2d6fd..000000000 --- a/rt/html/NoAuth/css/3.5-default/forms.css +++ /dev/null @@ -1,136 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -form input.button { - border: 3px double #069; - border-top-color: #08c; - border-left-color: #08c; - padding: 0.25em; - background: white; - font-weight: bold; - font-size: 1em; - margin: 0.5em 0.5em 0 0.5em; -} - -form input.button:active { - border: 3px double #08c; - border-top-color: #069; - border-left-color: #069; -} - -form select { - border: 1px solid #069; - padding: 1px; -} - -form input.field, form input, form textarea { - border: 1px solid #069; - padding: 3px; -} - -form input.checkbox, form input.radio { - border: none; - padding: 0; -} - -/* form .entry input, form .value input */ - -.label, form label, .labeltop { - font-weight: bold; -} - -.labeltop { - vertical-align: top; -} - -.submit { - font-weight: bold; - color: #a00; - font-size: 1.1em; - padding: 0.3em 1.5em 0 1.5em; - border-top: 1px solid #930; - margin: 1.5em 0 2.5em 0; -} - -.submit .buttons { float: right; } -.submit .extra-buttons { float: left; } -.submit .button { font-size: 0.9em; } -.submit .submit-clear { display: none; } - -.input-row { - clear: both; - padding: 0.25em; -} - -%# ComboBox styles... some properties like height and width must be dynamically -%# set in the JS (at least for now). -.combobox { - border: 1px solid #069; - padding: 4px; -} - -.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: 1px; -} - -.combobox .combo-list { - border: 1px outset; - z-index: 200; -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/logo.css b/rt/html/NoAuth/css/3.5-default/logo.css deleted file mode 100644 index d2a173748..000000000 --- a/rt/html/NoAuth/css/3.5-default/logo.css +++ /dev/null @@ -1,60 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#logo { - float: left; - clear: left; - - margin: 0.5em 0 0.5em 10px; -} - -#logo img { border: none; } -#logo div.rtname { - text-align: center; - font-weight: bold; -} - diff --git a/rt/html/NoAuth/css/3.5-default/main.css b/rt/html/NoAuth/css/3.5-default/main.css deleted file mode 100644 index ed4a6989c..000000000 --- a/rt/html/NoAuth/css/3.5-default/main.css +++ /dev/null @@ -1,62 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -@import "misc.css"; -@import "login.css"; -@import "logo.css"; -@import "quickbar.css"; -@import "body.css"; -@import "approvals.css"; -@import "titlebox.css"; -@import "forms.css"; -@import "ticket.css"; -@import "transactions.css"; -@import "nav.css"; -@import "header.css"; -@import "footer.css"; -@import "freeside.css"; - 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 981dea36d..000000000 --- a/rt/html/NoAuth/css/3.5-default/misc.css +++ /dev/null @@ -1,95 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -body { - /* font-family: Verdana, sans-serif; */ - font-family: Arial, Verdana, Helvetica, sans-serif; - font-size: 76%; - margin: 0; - /* background-color: white; */ - background-color: #e8e8e8; -} - -.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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/ticket.css b/rt/html/NoAuth/css/3.5-default/ticket.css deleted file mode 100644 index 7fa0e9e0a..000000000 --- a/rt/html/NoAuth/css/3.5-default/ticket.css +++ /dev/null @@ -1,57 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.ticket-info-cfs .label { - vertical-align: top; -} - -.ticket-info-cfs ul { - margin: 0; - padding: 0; - margin-left: 0.5em; - list-style: none; -} diff --git a/rt/html/NoAuth/css/3.5-default/titlebox.css b/rt/html/NoAuth/css/3.5-default/titlebox.css deleted file mode 100644 index 82961bb38..000000000 --- a/rt/html/NoAuth/css/3.5-default/titlebox.css +++ /dev/null @@ -1,180 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.titlebox { - margin-bottom: 1em; -} - -.titlebox .titlebox-content { - margin-top: -1px; - padding: 0.25em .50em 0.125em .50em; - /*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 fee5c52f2..000000000 --- a/rt/html/NoAuth/css/3.5-default/transactions.css +++ /dev/null @@ -1,150 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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.odd { - background: #fff; -} - - -.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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%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; -} - - diff --git a/rt/html/NoAuth/css/print.css b/rt/html/NoAuth/css/print.css deleted file mode 100644 index 80a0c780f..000000000 --- a/rt/html/NoAuth/css/print.css +++ /dev/null @@ -1,85 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -* { - float: none; - position: static; -} - -body { - margin: 1em; - font-size: 10pt; -} - -#body { - margin: 0; -} - -#header h1 { - margin-bottom: 2em; -} - -#header { - padding: 0 !important; -} - -#quickbar, -#nav, -#header #page-menu, -#header #actions-menu, -.titlebox .title .widget, -#footer -{ -display: none; -} - -a:link, a:visited { - background: transparent; - font-weight: bold !important; - text-decoration: underline !important; -} - 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; - diff --git a/rt/html/NoAuth/images/bplogo.gif b/rt/html/NoAuth/images/bplogo.gif deleted file mode 100644 index 1bb0adfb4d1fbdcad385a74c7ea74d32f634df76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmVie000F35XecZy*TU5yZ>M)j#+UGWU8)g>vksk z&U9_h@vZNCPvyR#a5w_K2FN6`qHI!-g~D>uR1&WtqwB!!atlY!jBFQ{6Pk=so{JM-P?%<( zQH7wAJO&E{6RentjTi*26Sb~yYN-Hfk!8EFfT}&Lwg9!q7KReWxyG@}v%qY2Nf=7Q zKfJ^@0tyQT63Mx;(EzLp0ssLB3kjSUh)>hpj`Y6(+TA+=2@41)eG4ZomcMrb!HI*R z=Z~FGC#nF80_EYheEe>tTXzuNHcb8l7baWSVb`=gyU6rW6K!9{9nP99P&dKI$Z-pl zb-440CzET~UIs~KDP7H30dnRVkn^0-ry6IzdUsStQi1>kD22*(hr0wE{{^f%A*2MR zSi7oiF%ZF7h2|)jCPaM#WU z>BH|dzE6XFtS)A2s4hS zU3nMQ_Z=H634jzBp-OdYOqK!?W38n{Ox l`A}2_M!ivCN@Z`>)Z?8$w4{_Ygs#6^u;)?r!6!{eo=rRVYU$OtTkm{0 z_3X>t_di~K`Ss)X-+%x9{U;G9{u6aBN=+KKj%_@)C#=r%>^jfe`pAKUk--`OxYljB diff --git a/rt/html/NoAuth/images/css/cb.gif b/rt/html/NoAuth/images/css/cb.gif deleted file mode 100644 index 49a4a97b63ab512c18f877e983a784c68a8952f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmZ?wbhEHb+|#lX*?1LA?qU|^9p*yEYG(&FJRv)qpFCTAZ^?Ab8!N#n*f KNdgWm4Auav_bhn; 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 6bca03d10e58ab51033dfe73277abb95ae1bf326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmZ?wbhEHbZ5BhuT!yR#47rOLO4c!yZDc6l%uu_Vq2T~S(_w~| zV+?Jl7}`%Wbe#GB|G(ltQRkx6#FEq$h4Rdj426)4R0a3U+yVy0pDc`A4Ezi_3_t)f poPkC5!%0ity)P~;O)b28pdoyM#S<5e3@sVo*Agd`whJ;?0|4qjFk=7! 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 d7327103a9e832199d9aae932c16fcc5b7db68e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmZ?wbhEHbRgnXSdyBeP@Y+mp%9Xhs^FfPTfm_BlZBCsfuBK#0SG{b pGqA{hIBChb_r;~9OEd0nwz&InLioiwAq(cH8%S_6&lhB{1_0>IM{EE9 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 dc272ee5d81ae70222f767a1b4a3fbfc4c11466f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmZ?wbhEHb4AHV+mClM(A6Ll_1O)N=GQ7F$W$xsN%NL6sp%q?J0{K>+|#URh1 r!vF*z$1t!;KTz*m>@e?`r`D?zTjH67{jE)OAN4pE>R1PHFjxZs<(Fm9 diff --git a/rt/html/NoAuth/images/css/cbr.gif b/rt/html/NoAuth/images/css/cbr.gif deleted file mode 100644 index eeb7ff44414cc27b51fccf43198058151cc9157d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmZ?wbhEHb+|#lX*?1LA?qU|^B{aMF@_@6$_5p1_Ygs#6^u;)?r!6!{eo=rRVYU$OtTkm{0 z_3X>t_di~K`Ss)X-+%x9{U;G9{$yd~VvuLhVE_VTajZ=Y4o{<4$1A{dHei3Iy diff --git a/rt/html/NoAuth/images/css/ct.gif b/rt/html/NoAuth/images/css/ct.gif deleted file mode 100644 index d2ae8d8ae52f42843c40a7e016fe2d78684588ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmZ?wbhEHb+|#lX*?1LA?qU|^BnaB?LNZ5BhuT!yR#47rOLO4c!yZDc6l%uu_Vq2T~S(_w~| zV+?Jl7}`%Wbe#GB|G(l-7Dg@xeg+)|AOM-cz#@NP!P8Zx`rViF{RgnXSdyBeP@Y+mp%9Xhs^FfPTfm_BlZBCsfuBK#0SG{b pGqA`B@Jybu`}<3Ak+R!iCXp*-m;TgQ@Qb5&weF|pD=sVy)&TnRM;rhE 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 bb316cf048227fb6123584f694982768f8665748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHb4AHV+mClM(A6Ll_1O)N=GQ7F$W$xsN%NL6sp%q?J0{K>+|#URh1 p!vF*z$1t!;B?QQHf1aDsH6zo?B-hKvaMl%#=K524Z<+)ctO0keW|RN` diff --git a/rt/html/NoAuth/images/css/ctr.gif b/rt/html/NoAuth/images/css/ctr.gif deleted file mode 100644 index d17e647c019b1677141bd2db279ebb3a9e9a7b0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmZ?wbhEHb+|#lX*?1LA?qU|^9E5Li5Gum1Dm+1HqoYi}7$l6`6pHR5*>j z&^<~+K@^7JXEX>JL=6^6z|Ph+=uYhJt+WvYcOXI$*_Bnz;!O((<@5*3MpC}R;3 zy@;AWUl_w|Lj|9ANtZ@f}M#*tn}p#T5?07*qoM6N<$g1>W*5&!@I 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 a83500aadc99270bb34a939625b9922f7f84b2c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^YCz1%!3HGbj>q`|DVAa<&kznEsNqQI0P-bETq8Eak-(R=pt!aOEN5!MTvIe7Rw zk9}tT%T!Z(cg>=Qp+qp^g8>@07}$$65R{{u{k$U`^9(JKOnKCXD%; zfm`1>{^oBTGnPwioByqzbv5H|iHDMRtsSlRJW@Tn;rF)hLTlLGtcc6+iF3XnR(wR{ z@V{02vJ*`cqQCxEdlA25-$9;kk;4lE{evTTZv^Fj5NY20*py2rnCJNHPx-BLTb?`( hU|kaR^XlH2`Mw(hbw89&-2(J3gQu&X%Q~loCIHE>hmrsQ 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 aa7eed06119f572e459aa07e9ab03bcda51e50d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1164 zcmV;71atdGNk%w1VcZ200OwTz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui0Ne!<000R70GSCKNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%brcUw(Z-vbL-yCySMM(z=I1PPQ1ABX#;6KA)G7NtRCaBj z&^<~+K@^7JXG{=7L@*YTpq;MZ;x62S*qBNi!Mg>okVdPN?!jH?-GQAFZHyoWMU=5f z5WR?+KVKLa&dfRAI}_}*qj9M$uvqW!?{9c|7<*(H+oQFHU}vM*%$EVgifwO_7Z;s~cPO{Ec@_JU|H7*#*G>0000q`|DVAa<&kznEsNqQI0P-bETq8Eak-(R=pt+B_yl5w;7PIe7Rw zk0~Gf#`)pu)X=qxiHC%9rn6kuQjt0zEYj$%Tqwa3yfJh0gl&Je`mUdQ^7~w$XKC}| z@(moW|DPfGNoOg`rlfm;O!-!wYziNi3BJoByqzbv486iUZ2C!keyD94zii{G0pUFoN|)z`i*CwZ@Lx zJqCV;IexFKMZ*}cP5r;V|J%gZ-aLk$hB@b7S&9S2rbyd3JbzHpD05ll@ViBSyc4Sx kkM3E`6148mn_FkhpZ^PNay|Zh6VS&Dp00i_>zopr0QZcF@&Et; 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 3c296dcae93ceda29c1af6d1ee3787c0e8388ab4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmZ?wbhEHbdhCYGe8D3oWGWGIAWq$;>)<`yt0{$yd~ kVqj#@VE_V<76v9ko~BH;<+TZuJT7t0O{&rlWni!d05Db;hyVZp 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 33d8ab1e26e993d1b2c715381ecefedbc03ed271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^+(69E!3HGng5-u&wghk1ynTE)5S4FVruMpLq8@*k>d~ZzcZb7 z^wF4dfbol%ig)6FA^xPYDla|9Ckzq~buv63->^B;l39P>UjMT1Ws~E4>jgi)d^a^{ z+Kr^U>NN-K4%^;IzyDRD@ZbeLDT@^O-BGK9PAT)vc*ve#;s2xed51;$)@!#dhCYGe8D3oWGWGIAWq$;>)<`yt0{$yd~ kVqj#@VE_V<76vAP9^T~~J1;((G|BSDhpivJGBH>K05&EX$p8QV diff --git a/rt/html/NoAuth/images/favicon.png b/rt/html/NoAuth/images/favicon.png deleted file mode 100644 index ed1ee37ffe6915978a91337057c7a3074f179a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)+W2)BwrUy#YqRdUkFs$R+g?P)~;tlh*kO^}2~HsPKC=y2q?&)zUyFs8d@c;vf~ zTgYrlYFa -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 '+url +'...'; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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;i0) { - 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;i0) 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 -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) }; -} - -<%ARGS> -$GroupObj => undef -$current_subtab => undef -$Title => undef -$Searches => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
- -

- - -
- -
- -% for my $pane (@panes) { -<&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &> -<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &> -
-% } -<&|/Widgets/TitleBox, title => loc('Options'), bodyclass => "" &> -
- <&|/l&>Rows per box: -
- -<%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; - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -

<&|/l&>Select queues to be displayed on the "RT at a glance" page

-
-
    -% for my $queue (@queues) { -
  • {$queue->Name}) { -checked -% } -/><%$queue->Name%>: <%$queue->Description%>
  • -% } -
-<& /Elements/Submit, Caption => loc("Save Changes"), Label => loc('Save'), Name => 'Save'&> - -
- -<%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'}; -} - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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')) { -

- <&|/l&>You can also edit the predefined search itself: - <% $search->Name %> -

-% } - -
- - - -<& /Search/Elements/DisplayOptions, %$SearchArg, %ARGS, - AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat &> -<& /Elements/Submit, Caption => loc("Save"), Label => loc('Save'), Name => 'Save'&> - -
- -<%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.'); -} - - diff --git a/rt/html/Prefs/SearchOptions.html b/rt/html/Prefs/SearchOptions.html deleted file mode 100644 index 06f32ba7e..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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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("Ticketing Search Preferences") &> -<& /User/Elements/Tabs, - current_tab => "Prefs/SearchOptions.html", - Title => loc("Search Preferences") -&> - -
- - <& /Search/Elements/DisplayOptions, %ARGS, - Format=> $Format, - AvailableColumns => $AvailableColumns, - CurrentFormat => $CurrentFormat, - RowsPerPage => $RowsPerPage, - OrderBy => $OrderBy, - Order => $Order &> - -<& /Elements/Submit, Name => 'SavePreferences', Label => loc('Save Changes') &> -
- -<%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 -); - - -<%ARGS> -$Format => undef -$Description => undef -$Order => undef -$OrderBy => undef -$RowsPerPage => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => {} - -<%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 => '', - 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 '') { - 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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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]; - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ]; - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => {} - -<%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 ]; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%ARGS> -$queue => 1 -$action => "correspond" -$ticket => undef - -<%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(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - -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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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."; - -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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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(); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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: - -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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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: - -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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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: - -RT/<% $RT::VERSION %> <% $status %> - -<% $output |n %> 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -&> - -
- - - - - - - - - - - - - - - - - -
-<& Elements/PickCriteria, query => $Query, cfqueues => $queues &> -<& /Elements/Submit, Caption => loc('Add these terms to your search'), Label => loc('Add'), Name => 'AddClause'&> - -<& Elements/EditQuery, - %ARGS, - actions => \@actions, - optionlist => $optionlist, - Description => $Description &> -<& /Elements/Submit, Label => loc('Add and Search'), Name => 'DoSearch'&> -
-<& Elements/EditSearches, CurrentSearch => $search_hash, Dirty => $dirty, SearchId => $SearchId &> -
- -<& Elements/DisplayOptions, %ARGS, Format=> $Format, -AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat, RowsPerPage => $RowsPerPage, OrderBy => $OrderBy, Order => $Order &> -<& /Elements/Submit, Label => loc('Add and Search'), Name => 'DoSearch'&> -
-
- -<%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() } @$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); -} - -# }}} - - - -<%ARGS> -$NewQuery => 0 -$SearchId => undef -$Query => undef -$Format => undef -$Description => undef -$Order => undef -$OrderBy => undef -$RowsPerPage => undef -$HideResults => 0 -@clauses => () - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
-% foreach my $var qw(Query Format OrderBy Order Rows Page) { - -%} -<& /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?" - &> - -
- -<& /Elements/Submit, Label => loc('Update'), CheckAll => 1, ClearAll => 1 &> -
-<&|/Widgets/TitleBox, title => $title &> - - - - - -
- - - - - - - - - - - - - - - -
<&|/l&>Make Owner: <& /Elements/SelectOwner, Name => "Owner" &> ( <&|/l&>Force change)
<&|/l&>Add Requestor:
<&|/l&>Remove Requestor:
<&|/l&>Add Cc:
<&|/l&>Remove Cc:
<&|/l&>Add AdminCc:
<&|/l&>Remove AdminCc:
-
- - - - - - - - - - - - - - - - - - - -
<&|/l&>Make subject:
<&|/l&>Make priority:
<&|/l&>Make queue: <& /Elements/SelectQueue, Name => "Queue" &>
<&|/l&>Make Status: <& /Elements/SelectStatus, Name => "Status" &>
<&|/l&>Make date Starts: <& /Elements/SelectDate, Name => "Starts_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Started: <& /Elements/SelectDate, Name => "Started_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Told: <& /Elements/SelectDate, Name => "Told_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Due: <& /Elements/SelectDate, Name => "Due_Date", ShowTime => 0, Default => '' &>
<&|/l&>Make date Resolved: <& /Elements/SelectDate, Name => "Resolved_Date", ShowTime => 0, Default => '' &>
- -
- -<&| /Widgets/TitleBox, title => loc('Add comments or replies to selected tickets') &> - - - - -% while (my $CF = $TxnCFs->Next()) { - - - - -% } # end if while - - -
<&|/l&>Update Type: -
<&|/l&>Subject:
<% $CF->Name %>:<& /Elements/EditCustomField, - CustomField => $CF, - NamePrefix => "Object-RT::Transaction--CustomField-" - &><% $CF->FriendlyType %>
<&|/l&>Attach:
<&|/l&>Message: - <& /Elements/MessageBox, Name=>"UpdateContent"&> -
- - -<&|/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; - - - - - - - -% while (my $cf = $cfs->Next()) { - - -% 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') { - - -% } elsif ($cf->Type eq 'Combobox') { - - -% } elsif ($cf->Type eq 'Freeform') { - - -% } elsif ($cf->Type eq 'Text') { - - -% } else { -% $RT::Logger->crit("Unknown CustomField type: " . $cf->Type); -% } - -% } -
<&|/l&>Name<&|/l&>Add values<&|/l&>Delete values
<%$cf->Name%>
-(<%$cf->FriendlyType%>)
<& /Elements/EditCustomFieldSelect, @add &><& /Elements/EditCustomFieldSelect, @del &><& /Elements/EditCustomFieldCombobox, @add &><& /Elements/EditCustomFieldCombobox, @del &><& /Elements/EditCustomFieldFreeform, @add &><& /Elements/EditCustomFieldFreeform, @del &><& /Elements/EditCustomFieldText, @add &> 
- - -<&|/Widgets/TitleBox, title => loc('Edit Links'), color => "#336633"&> -<&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.
-<& /Ticket/Elements/BulkLinks &> - - -<& /Elements/Submit, Label => loc('Update') &> - - -
- - -<%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 ); - - -<%args> -$Format => undef -$Page => 1 -$Rows => undef -$Order => 'ASC' -$OrderBy => 'id' -$Query => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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' - -<%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 -# 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 ); - - -<%METHOD Plot> -<%ARGS> -$plot => undef - -<%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); - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 ); - - -<& /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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- - -
- -
-<& /Elements/Submit, Label => loc("Apply"), Reset => 1, Caption => loc("Apply your changes")&> -
- -<%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'}, - ); - - - - -<%ARGS> -$Query => undef -$Format => undef -$SearchId => 'new' -@actions => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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 = "" 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} .= ""; - $column{Suffix} .= ""; - } - if ( $Face eq "Italic" ) { - $column{Prefix} .= ""; - $column{Suffix} .= ""; - } - if ($Size) { - $column{Prefix} .= "<" . $m->interp->apply_escapes( $Size, 'h' ) . ">"; - $column{Suffix} .= "interp->apply_escapes( $Size, 'h' ) . ">"; - } - if ( $Link eq "Display" ) { - $column{Prefix} .= - ""; - $column{Suffix} .= ""; - } - elsif ( $Link eq "Take" ) { - $column{Prefix} .= ""; - $column{Suffix} .= ""; - } - - 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 "" ); - $row .= $field->{Suffix} if $field->{Suffix}; - $row .= "'"; - push( @format_string, $row ); -} - -$Format = join(",\n", @format_string); - - -return($Format, \@fields, \@seen); - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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' - -<%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); - - -<% loc('Query:') %> <% $Query %>
- -
- - - - - - -% my ($i,$total); -% while (my $key = shift @sorted_keys) { -% $i++; -% my $value = shift @sorted_values; -% $total += $value; - - - - -% } - -%$i++; - - - - - -
<% $tix->Label($PrimaryGroupBy) %> -<&|/l&>Tickets -
-<%$key%> - -<%$value%> -
-<%loc('Total')%> - -<%$total%> -
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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") &> - - - - - -
-<& EditFormat, %ARGS &> - - - -% for my $o (0..3) { - - - - -% } - - - -
-% if ($o == 0) { -<&|/l&>Order by: -% } - - - -
-<&|/l&>Rows per page: - -<& /Elements/SelectResultsPerPage, - Name => "RowsPerPage", - Default => $RowsPerPage &> -
-
- - -<%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 ); -} - - - -<%ARGS> -$Order => undef -$OrderBy => undef -$RowsPerPage => undef -$Format => undef -$GroupBy => 'id' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>Add Columns: - -<&|/l&>Format: - -<&|/l&>Show Columns: -
- - -<&|/l&>Link: - -
<&|/l&>Title: -
<&|/l&>Size: - -
<&|/l&>Style: - -
- - - -
-
- - - -
-
-
- -<%ARGS> -$CurrentFormat => undef -$AvailableColumns => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) &> - -

- - - - - - -%# -

- -<%ARGS> -$Description -$optionlist -$actions - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &>
-% } else { -<& SelectSearchObject, Name => 'Owner', Objects => \@Objects &>
-% } -<&|/l&>Description:
- -% if ($SearchId ne 'new') { - -% if ($Dirty) { - -% } - -% if ($AllowCopy) { - -% } - - -% } - -
-% } -<&|/l&>Load saved search:
-<& SelectSearchesForObjects, Name => 'LoadSavedSearch', Objects => \@Objects, SearchType => $SearchType &> - - - -<%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'); - - - -<%ARGS> -$SearchType => 'Ticket' -$SearchId => undef -$CurrentSearch => undef -$Description => undef -$HideResults => 0 -$Dirty => 0 -$AllowCopy => 1 -$Title => loc('Saved searches') - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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] ) { -<%loc('Results')%>
-% foreach my $action (@actions) { -% next unless ($action); -% my @item = @$action; -% if ($item[1] < 0) { - -% } - <%$item[0]%>
-% if ($item[1] < 0) { -
-% } -% } -
-% } -<%init> -@actions = grep (/./,@actions); - -<%ARGS> -@actions => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>id - -<& /Elements/SelectEqualityOperator, Name => "idOp" &> - - -
-<& /Elements/SelectAttachmentField, Name => 'AttachmentField' &> - -<& /Elements/SelectBoolean, Name => "AttachmentOp", - True => loc("matches"), - False => loc("does not match"), - TrueVal => 'LIKE', - FalseVal => 'NOT LIKE' -&> - - -
-<&|/l&>Queue - -<& /Elements/SelectBoolean, Name => "QueueOp" , - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', - FalseVal => '!=' &> - -<& /Elements/SelectQueue, - Name => "ValueOfQueue", - NamedValues => 1, - CheckQueueRight => 'ShowTicket' &> -
-<&|/l&>Status - -<& /Elements/SelectBoolean, Name => "StatusOp", - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', - FalseVal => '!=' -&> - -<& /Elements/SelectStatus, Name => "ValueOfStatus", SkipDeleted => 1 &> -
- - -<& /Elements/SelectBoolean, Name => "ActorOp", - TrueVal=> '=', - FalseVal => '!=' -&> - -<& /Elements/SelectOwner, Name => "ValueOfActor", ValueAttribute => 'Name' &> -
-<& SelectPersonType, Name => 'WatcherField', Default => 'Requestor' &> - -<& /Elements/SelectMatch, Name => "WatcherOp" &> - - -
-<& /Elements/SelectDateType, Name=>"DateField" &> - -<& /Elements/SelectDateRelation, Name=>"DateOp" &> - -<& /Elements/SelectDate, Name => "ValueOfDate", ShowTime => 0, Default => '' &> -
- - -<& /Elements/SelectEqualityOperator, Name => "TimeOp" &> - - -<& /Elements/SelectTimeUnits, Name =>'ValueOfTime' &> -
- - -<& /Elements/SelectEqualityOperator, Name => "PriorityOp" &> - - -
-<& SelectLinks, Name=>"LinksField" &> - -<& /Elements/SelectBoolean, Name => "LinksOp", - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', - FalseVal => '!=' &> - - -
-<% $CustomField->Name %> - - <& /Elements/SelectCustomFieldOperator, Name => $name . "Op", - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', FalseVal => '!=' &> - -<& /Elements/SelectCustomFieldValue, Name => "ValueOf" . $name, - CustomField => $CustomField, - &> -
- - - - - - - - - -
- - - -
- <&|/l&>Aggregator: - <& SelectAndOr, Name => "AndOr" &> -
-
-
-
- - <& PickBasics &> - <& PickCFs, cfqueues => \%cfqueues &> -
-
 
- - - -<%ARGS> -$addquery => 0 -$query => undef -%cfqueues => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -% 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>AND -<&|/l&>OR - -<%ARGS> -$Name => "Operator" - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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' - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $groups = new RT::Groups($session{'CurrentUser'}); -$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain); - - -<%ARGS> -$AllowNull => 1 -$Default=> '' -$Name => 'Group' -$Domain => 'UserDefined'; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => '' - - -<%init> -use RT::Report::Tickets; -my $report = RT::Report::Tickets->new( $session{'CurrentUser'} ); -my @options = $report->Groupings( Query => $Query ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 => 'LinksField' - - -<%INIT> -my @fields = ('HasMember', - 'MemberOf', - 'DependsOn', - 'DependedOnBy', - 'RefersTo', - 'ReferredToBy', - 'LinkedTo', - ); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 @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); - - -<%ARGS> -$AllowNull => 1 -$Suffix => '' -$Default=>undef -$Scope => 'ticket' -$Name => 'WatcherType' - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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', - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ); -
-
-%foreach my $key (keys(%hiddens)) { - -%} -<& /Elements/Refresh, Name => 'TicketsRefreshInterval', Default => $session {'tickets_refresh_interval'} &> - -
-
-
-<&|/l&>Update multiple tickets
-<&|/l&>Bookmarkable link
-<&|/l&>spreadsheet | -<&|/l&>RSS | -<&|/l&>Work offline
-
<&|/l&>chart -% %hiddens = (Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order); -%foreach my $key (keys(%hiddens)) { - -%} -<&|/l, $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query) &>grouped by [_1] -<&|/l, $m->scomp('Elements/SelectChartType', Name => 'ChartStyle') &>style: [_1] - -
-<& /Elements/Callback, _CallbackName => 'SearchActions', QueryString => $QueryString&> -
-<%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'}; -} - -<%CLEANUP> -$session{'tickets'}->PrepForSerialization(); - -<%ARGS> -$Query => undef -$Format => undef -$HideResults => 0 -$Rows => undef -$Page => 1 -$OrderBy => undef -$Order => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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(); - diff --git a/rt/html/Search/Results.tsv b/rt/html/Search/Results.tsv deleted file mode 100644 index b7c9a42e7..000000000 --- a/rt/html/Search/Results.tsv +++ /dev/null @@ -1,134 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%ARGS> -$OrderBy => 'id' -$Order => 'ASC' - -<%INIT> - -my $Tickets = RT::Tickets->new( $session{'CurrentUser'} ); -$Tickets->FromSQL( $ARGS{'Query'} ); -if ( $OrderBy =~ /\|/ ) { - - # Multiple Sorts - my @OrderBy = split /\|/, $OrderBy; - my @Order = split /\|/, $Order; - $Tickets->OrderByCols( - map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } - ( 0 .. $#OrderBy ) ); -} -else { - $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); -} - -my @rows; -my %known_cfs; - -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'); -while ( my $Ticket = $Tickets->Next()) { - my $row; - foreach my $attr (@attrs) { - if ($attr =~ /(.*)->ISO$/ and $Ticket->$1->Unix <= 0) { - $row->{$attr} = ""; - } else { - my $method = '$Ticket->'.$attr.'()'; - $row->{$attr} = eval $method; - if ($@) {die "Failed to find $attr - ". $@}; - } - } - - 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 @header; - foreach my $attr (@attrs) { - my $label = $attr; - $label =~ s'Obj-.(?:AsString|Name|ISO)''g; - $label =~ s'-\>MemberEmailAddressesAsString''g; - push @header, $label; - } - 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"}; - } - foreach my $id (sort keys %known_cfs) { - my $val = $row->{'CustomField-'.$id}; - $val =~ s/(\n|\r)//g; - push @row, $val; - } - $m->out(join("\t",@row)); - $m->out("\n"); -} - -$m->abort(); - diff --git a/rt/html/Search/Simple.html b/rt/html/Search/Simple.html deleted file mode 100644 index c531bd1e8..000000000 --- a/rt/html/Search/Simple.html +++ /dev/null @@ -1,107 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Elements/Header, Title => $title &> -<& /Elements/Tabs, - current_toptab => "Search/Simple.html", - Title => $title -&> - -<& /Elements/Callback, _CallbackName => 'PreForm', %ARGS &> - -
-
- -

<&|/l&>Search for tickets. Enter id numbers, queues by name, Owners by username and Requestors by email address.

- -

<&|/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 fulltext:word.

-

<&|/l&>RT will look for anything else you enter in ticket subjects.

- -
-
-
- -
- -
- -<& /Elements/Callback, _CallbackName => 'PostForm', %ARGS &> - -
- -<%INIT> -my $title = loc("Search for tickets"); -use RT::Search::Googleish; - -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); - } - - my %args = ( - Argument => $q, - TicketsObj => $tickets, - ); - - $m->comp('/Elements/Callback', %ARGS, _CallbackName => 'SearchArgs', args => \%args); - - my $search = RT::Search::Googleish->new(%args); - - $m->comp( "Results.html", Query => $search->QueryToSQL() ); - $m->comp( "/Elements/Footer" ); - $m->abort(); -} - - -<%ARGS> -$q => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<&|/l&>Queue: - - <% $queue_obj->Name %> (<%$queue_obj->Description || ''%>) -
<&|/l&>Requestors: - -
<&|/l&>Cc: - -
<&|/l&>Subject: - -
- <& /Ticket/Elements/EditCustomFields, QueueObj => $queue_obj &> -
<&|/l&>Attach file: - -
-<&|/l&>Describe the issue below:
-% if (exists $ARGS{Content}) { -<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &> -% } else { -<& /Elements/MessageBox &> -% } -
-<& /Elements/Submit, Label => loc("Create ticket")&> - - -
-<%args> -$Queue => undef - -<%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(); -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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") &> - -

<&|/l&>Select a queue for your new ticket

- -
-% while (my $queue = $queues->Next) { -% next unless $queue->CurrentUserHasRight('CreateTicket'); - -
<%$queue->Name%>
-
<%$queue->Description%>
-% } -
-<%init> -my $queues = RT::Queues->new($session{'CurrentUser'}); -$queues->UnLimit; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - - - - - -
- <&| /Widgets/TitleBox, title => loc('The Basics'), - title_class=> 'inverse', - color => "#993333" &> - <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &> - <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &> - - - <&| /Widgets/TitleBox, title => loc("Dates"), - title_class=> 'inverse', - color => "#663366" &> - <& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &> - -
- - - -%#!!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 ); - - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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/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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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{ - '__id__/TITLE:#', - '__Subject__/TITLE:Subject', - Status, - Requestors, - OwnerName}; - -<%ARGS> -$friendly_status => loc('open') -$title => loc("My [_1] tickets", $friendly_status) -@roles => ('Watcher') -@status => ('open', 'new', 'stalled') -$BaseURL => undef -$Page => 1 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -&> - -<%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') - } - }; - -<%ARGS> -$Title => undef -$current_toptab => undef -$current_tab => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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') &> -

<%loc('Error')%>

-<&| /Widgets/TitleBox, title => $Title &> -<%$Why%> -
- -<%$Details%> - - - - - - -<%args> -$Code => undef -$Details => undef -$Title => loc("RT Error") -$Why => loc("the calling component did not specify why") - - -<%INIT> -$RT::Logger->error("WebRT: $Why ($Details)"); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
- -% unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) { -<&| /Widgets/TitleBox, title => loc('Change password') &> -<&|/l&>New password: -<&|/l&>Confirm: - -
-% } -<& /Elements/Submit, Label => loc('Save Changes') &> -
- - -<%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'}++; - - -<%ARGS> -$Signature => undef -$NewPass1 => undef -$NewPass2 => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) -&> - - -
- - - - - - - - - - - - -% if (exists $session{'Attachments'}) { - - - - -% } # end of if - - - - -
- <&|/l&>Status - - <& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)",loc($DefaultStatus)) &> -
- <&|/l&>Subject - - -
- <&|/l&>Attached file - - <&|/l&>Check box to delete
-% foreach my $attach_name (keys %{$session{'Attachments'}}) { - <%$attach_name%>
-% } # end of foreach -
- <&|/l&>Attach - - - -
-<& /Ticket/Elements/EditCustomFields, TicketObj => $Ticket &> -<& /Elements/MessageBox, - Name => "UpdateContent", - QuoteTransaction => $ARGS{QuoteTransaction} - &> -
- - -<& /Elements/Submit &> -
- - - -<%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') ); - - - -<%ARGS> -$id => undef -$Action => undef -$DefaultStatus => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - -<%attr> -AutoFlush => 0 - diff --git a/rt/html/Ticket/Create.html b/rt/html/Ticket/Create.html deleted file mode 100644 index 9b38d2608..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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
- -<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &> - -
- -<&| /Widgets/TitleBox, title => loc("Create a new ticket") &> - - - - - - - - - - - - - - - - - - - - - - - - - - - -% if ($TxnCFs->Count) { -% while (my $CF = $TxnCFs->Next()) { - - - - -% } -% } - -% if (exists $session{'Attachments'}) { - - - - -% } # end of if - - - - - - - - - -
<&|/l&>Queue:<& Elements/ShowQueue, QueueObj => $QueueObj &> - -<&|/l&>Status: - -<& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}||'new', DefaultValue => 0 &> - -<&|/l&>Owner: - -<& /Elements/SelectOwner, Name => "Owner", QueueObj => $QueueObj, Default => $ARGS{Owner}||$RT::Nobody->Id, DefaultValue => 0 &> -
-<&|/l&>Requestors: - - -
-<&|/l&>Cc: - -
- -<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will receive future updates.) -
-<&|/l&>Admin Cc: - -
- -<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people will receive future updates.) -
-<&|/l&>Subject: - - -
-<& /Ticket/Elements/EditCustomFields, QueueObj => $QueueObj &> -
<% $CF->Name %>:<& /Elements/EditCustomField, CustomField => $CF, NamePrefix => - "Object-RT::Transaction--CustomField-" &><% $CF->FriendlyType %>
-<&|/l&>Attached file: - -<&|/l&>Check box to delete
-% foreach my $attach_name (keys %{$session{'Attachments'}}) { -<%$attach_name%>
-% } # end of foreach -
-<&|/l&>Attach file: - - - -
-<&|/l&>Describe the issue below:
-<& /Elements/Callback, _CallbackName => 'BeforeMessageBox', QueueObj => $QueueObj, %ARGS &> -% if (exists $ARGS{Content}) { -<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &> -% } else { -<& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &> -%} - -
-
-
- -<& /Elements/Submit, Label => loc("Create")&> -
- -
- - - - - - - -
- - <&| /Widgets/TitleBox, title => loc('The Basics'), - title_class=> 'inverse', - color => "#993333" &> - - - - - - - - - - -
<&|/l&>Priority:
<&|/l&>Final Priority:
<&|/l&>Time Estimated: - -<& /Elements/SelectTimeUnits, Name =>'TimeEstimated' &> - -
<&|/l&>Time Worked: - -<& /Elements/SelectTimeUnits, Name =>'TimeWorked' &> - -
<&|/l&>Time Left: -<& /Elements/SelectTimeUnits, Name =>'TimeLeft' &> -
- -
-<&|/Widgets/TitleBox, title => loc("Dates"), - title_class=> 'inverse', - color => "#663366" &> - - - - -
<&|/l&>Starts:<& /Elements/SelectDate, Name => "Starts", Default => $ARGS{Starts} || '' &>
<&|/l&>Due:<& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || '' &>
- -
-
-<&| /Widgets/TitleBox, title => loc('Links'), title_class=> 'inverse' &> - -<&|/l&>(Enter ticket ids or URLs, separated with spaces) - - - - - - - - - -
<&|/l&>Depends on
<&|/l&>Depended on by
<&|/l&>Parents
<&|/l&>Children
<&|/l&>Refers to
<&|/l&>Referred to by
- -
- -
-<& /Elements/Submit, Label => loc("Create") &> -
-
- -<%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[] . loc('Show basics') . q[], - }, - B => { - html => q[] . loc('Show details') . q[], - }, -}; - - -<%ARGS> -$DependsOn => undef -$DependedOnBy => undef -$MemberOf => undef -$QuoteTransaction => undef -$Queue => undef -$CloneTicket => undef - diff --git a/rt/html/Ticket/Display.html b/rt/html/Ticket/Display.html deleted file mode 100644 index d0422c008..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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> -<& /Ticket/Elements/Tabs, - Ticket => $TicketObj, - current_tab => 'Ticket/Display.html?id='.$TicketObj->id, - Title => loc("Ticket #[_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 &> - - -
- -<& /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 - - -<%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); - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
-<%$msg%>
- -<&|/l&>Add new watchers:
- - -% if ($Users and $Users->Count) { - -% while (my $u = $Users->Next ) { - -% } -% } - -% if ($Groups and $Groups->Count) { - -% while (my $g = $Groups->Next ) { - -% } -% } - - - - - -
-<&|/l&>Type - -<&|/l&>Username -
<&/Elements/SelectWatcherType, Name => "Ticket-AddWatcher-Principal-".$u->PrincipalId &><%$u->Name%> (<%$u->RealName%>)
-<&|/l&>Type - -<&|/l&>Group -
<&/Elements/SelectWatcherType, Name => "Ticket-AddWatcher-Principal-".$g->PrincipalId, Scope => 'queue' &><%$g->Name%> (<%$g->Description%>)
-<&|/l&>Type - -<&|/l&>Email -
-<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail1" &> - - -
-<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail2" &> - - -
-<&/Elements/SelectWatcherType, Name => "WatcherTypeEmail3" &> - - -
- -<%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); - } - - - -<%ARGS> -$UserField => 'Name' -$UserOp => '=' -$UserString => undef -$GroupField => 'Name' -$GroupOp => '=' -$GroupString => undef -$PrivilegedOnly => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>Merge into: <&|/l&>(only one ticket)
<&|/l&>Depends on:
<&|/l&>Depended on by:
<&|/l&>Parents:
<&|/l&>Children:
<&|/l&>Refers to:
<&|/l&>Referred to by:
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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, _CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS &> -
<&|/l&>Subject:
<&|/l&>Status:<%$SelectStatus|n%>
<&|/l&>Queue:<%$SelectQueue|n%>
<&|/l&>Owner:<& /Elements/SelectOwner, - Name => 'Owner', - QueueObj => $TicketObj->QueueObj, - TicketObj => $TicketObj, - Default => $TicketObj->OwnerObj->Id, - DefaultValue => 0, - &>
<&|/l&>Time Estimated: - <& /Elements/SelectTimeUnits, Name =>'TimeEstimated' &> -
<&|/l&>Time Worked: - <& /Elements/SelectTimeUnits, Name =>'TimeWorked' &> -
<&|/l&>Time Left: - <& /Elements/SelectTimeUnits, Name =>'TimeLeft' &> -
<&|/l&>Priority:
<&|/l&>Final Priority:
- -<%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); - - -<%ARGS> - -$TicketObj => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'}); - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $i = 0; -% while ( my $CustomField = $CustomFields->Next ) { -% next unless $CustomField->CurrentUserHasRight('ModifyCustomField'); -% $i++; -% if ( $i % 2 ) { - -% } - - -% unless ( $i % 2 ) { - -% } - -% } - -%# close row if required -% if ( $i % 2 ) { - -% } - -
- - - - - -
- <%$CustomField->Name%>
- <%$CustomField->FriendlyType%> -
<& /Elements/EditCustomField, - Object => $TicketObj, - CustomField => $CustomField, - NamePrefix => $NamePrefix , - Default => $m->notes('Field-' . $CustomField->Id), - &> -% if (my $msg = $m->notes('InvalidField-' . $CustomField->Id)) { -
- <% $msg %> -% } -
-
-<%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); - - -<%ARGS> -$TicketObj => undef -$QueueObj => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>Starts:<& /Elements/SelectDate, menu_prefix => 'Starts', current => 0 &> - (<% $TicketObj->StartsObj->AsString %>)
<&|/l&>Started:<& /Elements/SelectDate, menu_prefix => 'Started', current => 0 &> (<%$TicketObj->StartedObj->AsString %>)
- <&|/l&>Last Contact: - - <& /Elements/SelectDate, menu_prefix => 'Told', current => 0 &> (<% $TicketObj->ToldObj->AsString %>) -
<&|/l&>Due: - <& /Elements/SelectDate, menu_prefix => 'Due', current => 0 &> (<% $TicketObj->DueObj->AsString %>) -
-<%ARGS> -$TicketObj => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>New watchers

-<&|/l&>Find people whose
-<& /Elements/SelectUsers &> - -
-<&|/l&>Find groups whose
-<& /Elements/SelectGroups &> - - -<& AddWatchers, Ticket => $Ticket, UserString => $UserString, - UserOp => $UserOp, UserField => $UserField, - GroupString => $GroupString, GroupOp => $GroupOp, - GroupField => $GroupField, PrivilegedOnly => $PrivilegedOnly &> -
-

<&|/l&>Owner

-<&|/l&>Owner: <& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id, DefaultValue => 0&> -

<&|/l&>Current watchers

-<&|/l&>(Check box to delete)
- -<&|/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 &> - -
- -<%ARGS> -$UserField => undef -$UserOp => undef -$UserString => undef -$GroupField => undef -$GroupOp => undef -$GroupString => undef -$PrivilegedOnly => undef -$Ticket => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -%# Print out a placeholder if there are none. -%if ($Members->Count == 0 ) { -
  • <&|/l&>none
  • -% } - - -%while (my $watcher=$Members->Next) { -
  • - -%if ($watcher->MemberObj->IsUser) { - -<%$watcher->MemberObj->Object->Name%> -% if ($TicketObj and grep { $_->Content eq $watcher->MemberObj->Object->EmailAddress } $TicketObj->SquelchMailTo) { -<&|/l&>(Will not be sent email) -% } - -%} else { - -<%$watcher->MemberObj->Object->Name%> -%} -
  • -% } -
-<%INIT> -my $Members = $Watchers->MembersObj; - -<%ARGS> -$TicketObj => undef -$Watchers => undef - - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - -<%ARGS> -$Ticket => undef -$Tickets => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - -<%ARGS> -$Ticket => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - - -<%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; - -

<&|/l&>This message will be sent to...

- -% if ( $Object ) { -<&|/l&>(Check boxes to disable notifications to the listed recipients)
-% foreach my $scrip (@{$Object->Scrips->Prepared}) { -% next unless $scrip->ActionObj->Action->isa('RT::Action::SendEmail'); -<% $scrip->Description %>
-<&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)&>[_1] [_2] with template [_3] -
-%foreach my $type qw(To Cc Bcc) { -%my @addresses = $scrip->ActionObj->Action->$type(); -
    -%foreach my $addr (@addresses) { -
  • <%loc($type)%>: <%$addr->address%> -% } -
-% } -% if ($RT::PreviewScripMessages) { - -% } -% } -% } -
- -

<&|/l&>Messages about this ticket will not be sent to...

-<&|/l&>(Check boxes to enable notifications to the listed recipients) -
-
    -% foreach my $recipient (@non_recipients) { -
  • -<% $recipient->Content %> -% } -
-<& /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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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; - - - -
-% while (my $reminder = $reminder_collection->Next) { -% if ($reminder->Status eq 'resolved' && !$ShowCompleted) { - -% } elsif ($Edit) { -<& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket &> -% } else { -<& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket &> -% } -% } -
-
-

<&|/l&>New reminder:

-<& SELF:NewReminder, Ticket => $Ticket &> -<%method NewReminder> -<%args> -$Ticket - -
- - -
-
- -<& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, DefaultValue => 0 &> -
-
- -<& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &> -
-
- -<%method EditEntry> -<%args> -$Reminder -$Ticket - -Status eq 'resolved' ? 'CHECKED' : '' %> -/> - • - <& /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 : '' %>)
- -<%method ShowEntry> -<%args> -$Reminder -$Ticket - -Status eq 'resolved' ? 'CHECKED' : '' %> -/> - <%$Reminder->Subject%> • - <%$Reminder->OwnerObj->Name%> - <%$Reminder->DueObj->Unix>0 ? "• ". $Reminder->DueObj->AgeAsString : '' |n%>
- 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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%>
- - -% } - - -
-% } - -<%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 ); -} - - -<%ARGS> -$Ticket => undef -$Attachments => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ($Ticket->TimeEstimated) { - - - - -% } -% if ($Ticket->TimeWorked) { - - - - -% } - - - - - - - - - - - - -<& /Elements/Callback, _CallbackName => 'EndOfList', TicketObj => $Ticket, %ARGS &> -
<&|/l&>Id:<%$Ticket->Id %>
<&|/l&>Status:<&|/l&><% $Ticket->Status%>
<&|/l&>Estimated:<& ShowTime, minutes => $Ticket->TimeEstimated &>
<&|/l&>Worked:<& ShowTime, minutes => $Ticket->TimeWorked &>
<&|/l&>Left:<& ShowTime, minutes => $Ticket->TimeLeft &>
<&|/l&>Priority:<%$Ticket->Priority%>/<%$Ticket->FinalPriority %>
<&|/l&>Queue:<& ShowQueue, QueueObj => $Ticket->QueueObj &>
-<%ARGS> -$Ticket => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $UpdatedString = $Ticket->LastUpdated ? loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) : loc("Never"); -% if ($UpdatedLink) { - -% } else { - -% } - -
<&|/l&>Created:<% $Ticket->CreatedObj->AsString %>
<&|/l&>Starts:<% $Ticket->StartsObj->AsString %>
<&|/l&>Started:<% $Ticket->StartedObj->AsString %>
<&|/l&>Last Contact:<% $Ticket->ToldObj->AsString %>
<&|/l&>Due:<% $Ticket->DueObj->AsString %>
<&|/l&>Closed:<% $Ticket->ResolvedObj->AsString %>
<&|/l&>Updated:<% $UpdatedString | h %><% $UpdatedString | h %>
-<%ARGS> -$Ticket => undef -$UpdatedLink => 1 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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:
-% while (my $Link = $Ticket->DependsOn->Next) { -% my $member = $Link->TargetObj; -<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> -[<%$member->Status%>] -
-% } -<&|/l&>Depended on by:
-% while (my $Link = $Ticket->DependedOnBy->Next) { -% my $member = $Link->TargetObj; -<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> -[<%$member->Status%>] -
-% } - -<%ARGS> -$Ticket => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &>
-% } -% my $GroupMembers = $Group->MembersObj; -% $GroupMembers->LimitToGroups(); -% while (my $member = $GroupMembers->Next()) { -<&|/l&>Group: <%$member->MemberObj->Object->Name%>
-% } - -<%ARGS> -$Group => undef -$Ticket => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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. - -<%perl> -if ($ShowDisplayModes or $ShowTitle) { - my $title = $ShowTitle - ? loc('History') - : ' '; - - my $titleright; - - if ($ShowDisplayModes) { - $titleright = q[] . loc('Display mode') . ': '; - - if ($ShowHeaders) { - $titleright .= qq{} . - loc("Brief headers") . - qq{ — }; - $titleright .= q[] . loc("Full headers") . ""; - } - else { - $titleright .= q[] . loc("Brief headers") . " — "; - $titleright .= qq{} . - loc("Full headers") . - qq{}; - } - } - -<& /Widgets/TitleBoxStart, title => $title, titleright => $titleright &> -% } - -
-<%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(); -} - - -
-% 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); - - -<%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" - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 $link = $members->Next) { -
  • <& /Elements/ShowLink, URI => $link->BaseURI &>
    -% if ($depth < 8) { -<& /Ticket/Elements/ShowMembers, Ticket => $link->BaseObj, depth => ($depth+1) &> -% } -
  • -% } -
- -<%INIT> - -my $members = $Ticket->Members; -return unless $members->Count; - - - -<%ARGS> -$Ticket => undef -$depth => 1 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -% foreach my $header (@headers) { -% next unless $display_headers{_all} -% or ($display_headers{ lc $header->{Tag} } -% and length $header->{Value}); - - - - -% } -
<%$header->{'Tag'}%>:<%$header->{'Value'} | n%>
-<%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); - - -<%ARGS> -$Headers => undef -$DisplayHeaders => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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)) { -
-<%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{$}{
}mg - if defined $content; - - -<%$content |n%> -% } -% } # end foreach -
-% } else { -% my $content = $Message; -% RT::Interface::Web::EscapeUTF8(\$content); -% $m->comp('/Elements/Callback', content => \$content, %ARGS); -% $content =~ s{$}{
}mg; -<%$content |n%> -% } -<%INIT> -use URI::URL; - -<%ARGS> -$Message => undef -$Depth => 0 -$Transaction => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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&>Owner:<& ShowUserEntry, User => $Ticket->OwnerObj, Ticket => $Ticket &>
<&|/l&>Requestors:<& ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket &>
<&|/l&>Cc:<& ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket &>
<&|/l&>AdminCc:<& ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket &>
-<%ARGS> -$Ticket => undef - diff --git a/rt/html/Ticket/Elements/ShowQueue b/rt/html/Ticket/Elements/ShowQueue deleted file mode 100644 index da94d3993..000000000 --- a/rt/html/Ticket/Elements/ShowQueue +++ /dev/null @@ -1,56 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<% $QueueObj->Name %> -<%ARGS> -$QueueObj - -<%INIT> -my $value = $QueueObj->Name; -$value = '#'. $QueueObj->id - unless defined $value && length $value; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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'); - - -<&| /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:
-<% ($requestor->Comments || loc("No comment entered about this user")) %>
- -<&|/l, $rows &>This user's [_1] highest priority tickets:
- - -<&|/l&>Groups this user belongs to:
- -<& /Elements/ShowMemberships, UserObj => $requestor &> - - - -%} -<%ARGS> -$Ticket=>undef -$DisplayPath => "/Ticket/Display.html" - diff --git a/rt/html/Ticket/Elements/ShowSummary b/rt/html/Ticket/Elements/ShowSummary deleted file mode 100644 index 2f153f3bc..000000000 --- a/rt/html/Ticket/Elements/ShowSummary +++ /dev/null @@ -1,120 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - -
- <&| /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 &> - - - <&| /Widgets/TitleBox, title => loc('Customers'), - title_href =>"$RT::WebPath/Ticket/ModifyCustomers.html?id=".$Ticket->Id, - class=> 'ticket-info-customers' &> - <& /Ticket/Elements/ShowCustomers, Ticket => $Ticket &> - - - <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments &> -
- <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &> - - <& /Elements/Callback, %ARGS, _CallbackName => 'LeftColumn' &> -
- <&|/Widgets/TitleBox, title => loc("Reminders"), - title_href =>"$RT::WebPath/Ticket/Reminders.html?id=".$Ticket->Id, - class => 'ticket-info-reminders' &> - - - - -
-
- <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &> -
-
-
- - <&| /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' &> - -
-<%ARGS> -$Ticket => undef -$Attachments => undef - - - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
<% $RowNum % 2 ? ' odd' : ' even' %>"> -% $m->comp('/Elements/Callback', _CallbackName => 'ModifyDisplay', titlebar_cmd => \$titlebar_commands, Transaction => $Transaction, %ARGS); - - - - - -% my $desc = $Transaction->BriefDescription; -% $m->comp('/Elements/Callback', _CallbackName => 'ModifyDisplay', text => \$desc, Transaction => $Transaction, %ARGS); - - - - - - - - - -
- # - <% $LastTransaction ? ' ' : ' ' |n %> - <% $transdate|n %> - <%$Transaction->CreatorObj->Name%> - <%$TicketString%> <%$desc%> - <%$TimeTaken%><%$titlebar_commands|n%>
-% if ($Transaction->CustomFieldValues->Count) { - <& /Elements/ShowCustomFields, Object => $Transaction &> -% } -% $m->comp('ShowTransactionAttachments', %ARGS, Parent => 0) unless ($Collapsed ||!$ShowBody); -
-
- -<%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 - - -<%INIT> - -my ( $TimeTaken, $TicketString, $type_class ); - -my $transdate = $Transaction->CreatedAsString(); -$transdate =~ s/\s/ /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 = ' '; - -my @DisplayHeaders=qw ( _all); - -if ( $Transaction->Type =~ /EmailRecord$/ ) { - @DisplayHeaders = qw(To Cc Bcc); - - $titlebar_commands .= - "[Ticket - . "&Transaction=" - . $Transaction->Id - . "&Attachment=" - . ( $Attachments->[0] && $Attachments->[0]->id ) - . '">' . loc('Show') . "] "; - $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 .= - "[Ticket - . "&QuoteTransaction=" - . $Transaction->Id - . "&Action=Respond\">" - . loc('Reply') - . "] "; - } - if ( $Transaction->TicketObj->CurrentUserHasRight('CommentOnTicket') - or $Transaction->TicketObj->CurrentUserHasRight('ModifyTicket')) { - $titlebar_commands .= - "[Ticket - . "&QuoteTransaction=" - . $Transaction->Id - . "&Action=Comment\">" - . loc('Comment') . "]"; - } - } -} - diff --git a/rt/html/Ticket/Elements/ShowTransactionAttachments b/rt/html/Ticket/Elements/ShowTransactionAttachments deleted file mode 100644 index 66823d743..000000000 --- a/rt/html/Ticket/Elements/ShowTransactionAttachments +++ /dev/null @@ -1,215 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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> - - # show a download link - if ( $size > 1024 ) { - $size = loc( "[_1]k", int( $size / 102.4 ) / 10 ); - } - else { - $size = loc( "[_1]b", $size ); - } - - -<&|/l&>Download <%$message->Filename || loc('(untitled)') %> - -[<%$message->ContentType%> <% $size %>] - -
-% } -% # }}} -
-<%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 ) { - - #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 ($@) { 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('' ); - } - 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 -); - - -
-% } -<%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 - -<%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); -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { -<<%$User->EmailAddress%>> -% } -% if ($Ticket and grep { $_->Content eq $User->EmailAddress } $Ticket->SquelchMailTo) { -<&|/l&>(Will not be sent email) -% } - -<%ARGS> -$User => undef -$Ticket => undef - diff --git a/rt/html/Ticket/Elements/Tabs b/rt/html/Ticket/Elements/Tabs deleted file mode 100644 index 3149e6b7c..000000000 --- a/rt/html/Ticket/Elements/Tabs +++ /dev/null @@ -1,250 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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, }, - _Eb=> { title => loc('Customers'), - path => "Ticket/ModifyCustomers.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}; - } -} - - - - - -<%ARGS> -$Ticket => undef -$subtabs => undef -$current_tab => '' -$current_subtab => '' -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) &> - -
- -<& /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 - - -<%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); - - - - - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> -
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &> - -<&| /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" &> -
-<%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"); -} - - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &> - - -<&| /Widgets/TitleBox, title => loc('Modify ticket # [_1]', $Ticket->Id) &> -<& Elements/EditBasics, TicketObj => $Ticket &> -<& Elements/EditCustomFields, TicketObj => $Ticket &> - - -
- -<&| /Widgets/TitleBox, title => loc('Dates') &> -<& Elements/EditDates, TicketObj => $Ticket &> - - -
- - -<&| /Widgets/TitleBox, title => loc('People') &> -<& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &> - - -
- -<&| /Widgets/TitleBox, title => loc('Links') &> -<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &> - - -
- -<&| /Widgets/TitleBox, title => loc('Update ticket') &> - - - - - - - - - -% if (my $TxnCFs = $Ticket->TransactionCustomFields) { -% while (my $CF = $TxnCFs->Next()) { - - - - -% } # end if while -% } # end of if - - - - - - - - -
<&|/l&>Update Type: - -
<&|/l&>Subject:
<% $CF->Name %>:<& /Elements/EditCustomField, - CustomField => $CF, - NamePrefix => "Object-RT::Transaction--CustomField-" - &><% $CF->FriendlyType %>
<&|/l&>Attach:
<&|/l&>Content:<& /Elements/MessageBox, Name=>"UpdateContent", QuoteTransaction=>$ARGS{QuoteTransaction} &>
- - - -<& /Elements/Submit, - Label => loc('Save Changes'), - Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &> -
- -<%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"); -} - - - - - - -<%ARGS> -$OnlySearchForPeople => undef -$OnlySearchForGroup => undef -$UserField => undef -$UserOp => undef -$UserString => undef -$GroupString => undef -$GroupOp => undef -$GroupField => undef -$id => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &> - -<&| /Widgets/TitleBox,title => loc('Modify dates for ticket # [_1]', $TicketObj->Id) &> -<& Elements/EditDates, TicketObj => $TicketObj &> - -<& /Elements/Submit, Label => loc('Save Changes') &> -
- - -<%INIT> - -my $TicketObj = LoadTicket($id); -$m->comp('/Elements/Callback', TicketObj => $TicketObj, ARGSRef => \%ARGS); -my @results = ProcessTicketDates( TicketObj => $TicketObj, ARGSRef => \%ARGS); - - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- -<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &> -<&| /Widgets/TitleBox, title => loc('Edit Links') &> - -<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &> - -<& /Elements/Submit, Label => loc('Save Changes') &> -
- - - - -<%INIT> - -my $Ticket = LoadTicket($id); - -my @results; -$m->comp('/Elements/Callback', TicketObj => $Ticket, ARGSRef => \%ARGS, Results => \@results ); -push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS ); - - - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- -<& /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" &> -
- -<%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; - - - - -<%ARGS> -$OnlySearchForPeople => undef -$OnlySearchForGroup => undef -$UserField => undef -$UserOp => undef -$UserString => undef -$GroupField => undef -$GroupOp => undef -$GroupString => undef -$id => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) &> -
-<&|/Widgets/TitleBox, title => loc("Reminders"), - title_class=> 'inverse', - color => "#666699" &> - -<& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 1, Edit => 1 &> - -<& /Elements/Submit, Label => 'Save'&> -
- - -<%INIT> - -my $Ticket = LoadTicket($id); - - -<%ARGS> -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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)); - } - - -<& /Elements/Header, ShowBar => 0 &> -
-<%$AttachmentObj->Headers%>
-
-<%$AttachmentObj->Content%>
-
- - -%$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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
-<& /Elements/Callback, _CallbackName => 'FormStart',ARGSRef =>\%ARGS &> - - - - - - - -% my $skip; -<& /Elements/Callback, _CallbackName => 'BeforeUpdateType', skip => \$skip, %ARGS &> -% if (!$skip) { -
-% } - - - - - -% if (exists $session{'Attachments'}) { - - - - -% } # end of if - -% if (my $TxnCFs = $TicketObj->TransactionCustomFields) { -% while (my $CF = $TxnCFs->Next()) { - - - - -% } # end if while -% } # end of if - - - -
<&|/l&>Status: -<& /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: -<& /Elements/SelectTimeUnits, Name => 'UpdateTimeWorked'&> -
<&|/l&>Update Type: -
<&|/l&>Subject:
<&|/l&>Cc: " />
- -<&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will receive future updates.) -
<&|/l&>Bcc: " />
- -<&|/l&>(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will receive future updates.) -
-<&|/l&>Attached file: - -<&|/l&>Check box to delete
-% foreach my $attach_name (keys %{$session{'Attachments'}}) { -<%$attach_name%>
-% } # end of foreach -
<% $CF->Name %>:<& /Elements/EditCustomField, CustomField => $CF, NamePrefix => - "Object-RT::Transaction--CustomField-" &><% $CF->FriendlyType %>
<&|/l&>Attach: -
<&|/l&>Message: -<& /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 &> -% } -
- - - - -<& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket' &> -% if ($TicketObj->CurrentUserHasRight('ShowOutgoingEmail')) { -<& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &> -% } -
-<%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; -} - - - -<%ARGS> -$id => undef -$Action => undef -$DefaultStatus => undef - diff --git a/rt/html/Tools/Elements/Tabs b/rt/html/Tools/Elements/Tabs deleted file mode 100644 index b341c3ca0..000000000 --- a/rt/html/Tools/Elements/Tabs +++ /dev/null @@ -1,84 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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', - }, - b => { - title => loc('Reports'), - path => 'Tools/Reports/index.html', - }, - c => { - title => loc('My Day'), - path => 'Tools/MyDay.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; - } -} - -<%ARGS> -$subtabs => undef -$current_tab => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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]) -
- -% while ( my $Ticket = $Tickets->Next()) { -% my $class; -% $i++; -% if ($i % 2 ) { -% $class = 'class="oddline"'; -% } -> -> - -> - - - -% } -

<%$Ticket->Id%>: -<%$Ticket->Subject%>

<&|/l&>Worked: <&|/l&>minutes -<&|/l&>Comments:
<&|/l&>Status: <& /Elements/SelectStatus, Name=> 'UpdateStatus-'.$Ticket->Id, - DefaultLabel => loc("[_1] (Unchanged)",loc($Ticket->Status())) &>
-<& /Elements/Submit, Label => loc('Record all updates') , Reset => 1 &> -
- -<%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'); - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
- - - - - - - - - - - - - - - -
-<&|/l&>Default Queue: - -<& /Elements/SelectQueue, Name => "qname", NamedValues => 1 &> -<&|/l&>If no queue is specified, create tickets in this queue. -
-<&|/l&>Default Requestor: - - -<&|/l&>If no Requestor is specified, create tickets with this requestor. -
-<&|/l&>Template: - - -
-<&|/l&>Get template from file: - - - -
-<& /Elements/Submit, Name => 'UpdateTickets', Label => loc('Upload'), Caption => loc("Upload your changes"), color => "#993333" &> - -
-<%args> -$requestoraddress => '' -$qname => undef -$string => undef - -<%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(); - } -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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); - -<& /Elements/Header, Title => $title &> -<& /Tools/Reports/Elements/Tabs, current_tab => 'Tools/Reports/CreatedByDates.html', Title => $title &> -
-% 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 &> -% } - -
- -
<&|/l&>Queue: <& /Elements/SelectQueue, Name => 'Queue', NamedValues => 1, Default => $q->id &> -
<&|/l&>Tickets created after: - -
<&|/l&>Tickets created before: - - -<& /Elements/Submit&> -
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - } -} - - - -<%ARGS> -$subtabs => undef -$current_tab => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%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); - -<& /Elements/Header, Title => $title &> -<& /Tools/Reports/Elements/Tabs, current_tab => 'Tools/Reports/ResolvedByDates.html', Title => $title &> -
-% 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 &> -% } - -
- -
<&|/l&>Queue: <& /Elements/SelectQueue, Name => 'Queue', NamedValues => 1, Default => $q->id &> -
<&|/l&>Tickets resolved after: - -
<&|/l&>Tickets resolved before: - - -<& /Elements/Submit&> -
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 - -<%init> -my $title = loc("Resolved tickets, grouped by owner"); -my $q = RT::Queue->new($session{'CurrentUser'}); -$q->LoadByCols(Name => $Queue); - -<& /Elements/Header, Title => $title &> -<& /Tools/Reports/Elements/Tabs, current_tab => '/Tools/Reports/ResolvedByOwner.html', Title => $title &> -
-% 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 &> -% } - -
- -<&|/l&>Queue: <& /Elements/SelectQueue, Name => 'Queue', NamedValues => 1, Default => $q->id &> -<& /Elements/Submit&> -
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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - -
-<& 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') &> -
-<%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; -} - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -

<%$sectionheading%>

-<%perl> - -foreach my $object (keys %{$objects->{$ObjectType}}) { -unless ($ObjectType eq 'RT::System') { -my $object_obj = @{$objects->{$ObjectType}{$object}}[0]->Object; - - -

<% $object_obj->Name %>

-% } - - - -% while (my $pg = $personalgroups->Next) { - -% } - -<%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; -} - -% $i++; -% - - -% while (my $pg = $personalgroups->Next) { - -% } - - -%} -
<&|/l&>Personal groups:<%$pg->Name%>
-<% loc($right->RightName) %>
-
<&|/l, $right->PrincipalObj->Object->SelfDescription &>as granted to [_1]
-
- {$pg->PrincipalId} && 'CHECKED' %> /> -% if ( $del_hash->{$pg->PrincipalId}) { - -% } - 
-% } -<%init> - -my $sectionheading = loc("[_1] rights", loc($ObjectType =~ /^RT::(.*)$/)); -# 'System' # loc -# 'Group' # loc -# 'Queue' # loc - - -<%args> -$ObjectType => undef -$objects => undef -$personalgroups => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 }; - - -<%ARGS> -$GroupObj => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - } - } - - - -<%ARGS> -$subtabs => undef -$current_tab => undef -$current_subtab => undef -$Title => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - - -
- - - - - - - - - - - -
-<&|/l&>Add members - -<&|/l&>Current members -
-<& /Admin/Elements/SelectNewGroupMembers, Name => "AddMembers", Group => $Group &> - - -% if ($Group->MembersObj->Count == 0 ) { -<&|/l&>(No members) -% } else { -<&|/l&>(Check box to delete) -
-
-<&|/l&>Users -% my $UserMembers = $Group->MembersObj; -% $UserMembers->LimitToUsers(); -
    -% while (my $member = $UserMembers->Next()) { -
  • -<%$member->MemberObj->Object->Name%> (<%$member->MemberObj->Object->RealName%>) -% } -
-<&|/l&>Groups -
    -% my $GroupMembers = $Group->MembersObj; -% $GroupMembers->LimitToGroups(); -% while (my $member = $GroupMembers->Next()) { -
  • -<%$member->MemberObj->Object->Name%> -% } -
-% } -
-<& /Elements/Submit, Label => loc('Modify Members') &> -
- - -<%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); - - - -<%ARGS> -$AddMembersUsers => undef -$AddMembersGroups => undef -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 &> - - -
- -%unless ($Group->Id) { - -% } else { - -% } - - - - - - - -
-<&|/l&>Name: -
-<&|/l&>Description:
- - /> <&|/l&>Enabled (Unchecking this box disables this group)
-
-<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &> -
-<%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"; -} - - - - -<%ARGS> -$Create => undef -$Name => undef -$Description => undef -$SetEnabled => undef -$Enabled => undef -$id => undef - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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:
- - -<%INIT> -my $Groups = RT::Groups->new($session{'CurrentUser'}); -$Groups->LimitToPersonalGroupsFor($session{'CurrentUser'}->PrincipalId()); -my $title = loc('Personal groups'); - - -<%ARGS> - diff --git a/rt/html/User/Prefs.html b/rt/html/User/Prefs.html deleted file mode 100644 index 56d2ee05b..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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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("Ticketing Preferences") &> -<& /User/Elements/Tabs, - current_tab => 'User/Prefs.html', - Title=>loc("Preferences") &> - -<& /Elements/ListActions, actions => \@results &> - -
- - - - - - - - - - - - - - - -
-<&| /Widgets/TitleBox, title => loc('Identity'), id => "user-prefs-identity" &> - - - - - - - - - - - - - - - - - - -
<&|/l&>Email:
<&|/l&>Real Name:
<&|/l&>Nickname:
<&|/l&>Language:<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &>
- -<&| /Widgets/TitleBox, title => loc('Phone numbers'), id => "user-prefs-phone" &> - - - - - - - - - - - - - - - - - -
<&|/l&>Residence:
<&|/l&>Work:
<&|/l&>Mobile:
<&|/l&>Pager:
- -<& /Elements/Callback, _CallbackName => 'FormLeftColumn', UserObj => $UserObj, %ARGS &> -
-% unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) { -<&| /Widgets/TitleBox, title => loc('Password'), id => "user-prefs-password" &> - - - - - - - - -
-<&|/l&>New Password: - - -
-<&|/l&>Retype Password: - - -
- -% } - -<&| /Widgets/TitleBox, title => loc('Location'), id => "user-prefs-location" &> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<&|/l&>Organization:
<&|/l&>Address1:
<&|/l&>Address2:
<&|/l&>City:
<&|/l&>State:
<&|/l&>Zip:
<&|/l&>Country:
- -<& /Elements/Callback, _CallbackName => 'FormRightColumn', UserObj => $UserObj, %ARGS &> -
-%if ($UserObj->Privileged) { -
-<&| /Widgets/TitleBox, title => loc('Signature') &> - - -% } - -
- -<& /Elements/Callback, _CallbackName => 'FormEnd', UserObj => $UserObj, %ARGS &> - -<& /Elements/Submit, Label => loc('Save Preferences') &> -
- - -<%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"); -} - -# }}} -} - - - - - -<%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 - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - autocomplete="off" /> -
-
- -
-<%ARGS> -$Name -$Size => undef -$Rows => 5 -$Default => '' -@Values => () - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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; - - - -<%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; - -<%ARGS> -$self -$args - - - - -<%method show> -
-<& /Search/Elements/EditSearches, Name => 'Owner', SearchType => $self->{SearchType}, AllowCopy => 0, - CurrentSearch => $self->{CurrentSearch}, SearchId => $self->{SearchId}, Title => $Title &>
-<%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} ) { - - -% } -% } -
-<%ARGS> -$self => undef -$Action => '' -$Title => loc('Saved searches') - -<%init> - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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) { - - -% } -<%ARGS> -$nojs => 0 - - - -<%method new> -<%init> -$ARGS{_item_map} = {map {$_->[0] => $_->[1]} @{$ARGS{Available}}}; -return \%ARGS; - - - -<%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}; -} - - -<%ARGS> -$self => undef - - - - -<%method current> -% for (@{$self->{Current}}) { - -% } -<%INIT> - -<%ARGS> -$self => undef - - - - -<%method show> -
- -<& SelectionBox:current, self => $self &> - -<&|/l&>Available: -
- - - -% unless ($ARGS{'NoArrows'}) { - - -% } - -% if ($ARGS{'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' &> -% } -
- -% unless ($nojs) { - -% } -<%ARGS> -$self => undef -$size => 10 -$nojs => 0 - -<%INIT> -my $name = $self->{Name}; -my %selected = map {$_ => 1} @{$self->{Selected}}; - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
- <& TitleBoxStart, %ARGS &><% $m->content | n %><& TitleBoxEnd &> -
-<%ARGS> -$class => '' - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
- - - -% #Manually flush the content buffer after each titlebox is displayed -% $m->flush_buffer(); - -<%ARGS> -$title => undef -$content => undef - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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 ($hideable) { - X -% } - <% $title_href && qq[] | n %><% $title |n %><% $title_href && "" |n%> - <% $titleright_href && qq[] | n %><% $titleright |n %><% $titleright_href && "" |n%> -
-
- -<%ARGS> -$width => undef -$class => '' -$bodyclass => '' -$title_href => undef -$title => '' -$title_class => '' -$titleright_href => undef -$titleright => undef -$id => '' -$hideable => 1 - - -<%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"; - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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]} ]" : "" - ) - ); - } -} - - -<& /Elements/Footer, %ARGS &> -<%ARGS> -$user => undef -$pass => undef -$menu => undef - 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'} &> - - - -Almost there! - - - -

-

You're almost there!

-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 mod_perl, FastCGI or SpeedyCGI handler. - -If you need commercial support, please contact us at sales@bestpractical.com. - - - 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 -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license 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); - diff --git a/rt/lib/RT.pm b/rt/lib/RT.pm index 033e5e607..da14b04b5 100644 --- a/rt/lib/RT.pm +++ b/rt/lib/RT.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,61 +45,79 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} -package RT; + use strict; -use RT::I18N; -use RT::CurrentUser; -use RT::System; - -use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger - $CORE_CONFIG_FILE - $SITE_CONFIG_FILE - $BasePath - $EtcPath - $VarPath - $LocalPath - $LocalEtcPath - $LocalLexiconPath - $LogDir - $BinPath - $MasonComponentRoot - $MasonLocalComponentRoot - $MasonDataDir - $MasonSessionDir -); - -$VERSION = '3.6.10'; -$CORE_CONFIG_FILE = "/opt/rt3/etc/RT_Config.pm"; -$SITE_CONFIG_FILE = "/opt/rt3/etc/RT_SiteConfig.pm"; - - - -$BasePath = '/opt/rt3'; - -$EtcPath = '/opt/rt3/etc'; -$BinPath = '/opt/rt3/bin'; -$VarPath = '/opt/rt3/var'; -$LocalPath = '/opt/rt3/local'; -$LocalEtcPath = '/opt/rt3/local/etc'; -$LocalLexiconPath = '/opt/rt3/local/po'; +use warnings; + +package RT; + + +use File::Spec (); +use Cwd (); + +use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_INSTALL_MODE); + +our $VERSION = '3.8.7'; + + + +our $BasePath = '/opt/rt3'; +our $EtcPath = 'etc'; +our $BinPath = 'bin'; +our $SbinPath = 'sbin'; +our $VarPath = 'var'; +our $PluginPath = 'plugins'; +our $LocalPath = 'local'; +our $LocalEtcPath = 'local/etc'; +our $LocalLibPath = 'local/lib'; +our $LocalLexiconPath = 'local/po'; +our $LocalPluginPath = $LocalPath."/plugins"; + # $MasonComponentRoot is where your rt instance keeps its mason html files -$MasonComponentRoot = '/var/www/freeside/rt'; +our $MasonComponentRoot = '/var/www/freeside/rt'; # $MasonLocalComponentRoot is where your rt instance keeps its site-local # mason html files. -$MasonLocalComponentRoot = '/opt/rt3/local/html'; +our $MasonLocalComponentRoot = 'local/html'; # $MasonDataDir Where mason keeps its datafiles -$MasonDataDir = '/usr/local/etc/freeside/masondata'; +our $MasonDataDir = '/usr/local/etc/freeside/masondata'; # RT needs to put session data (for preserving state between connections # via the web interface) -$MasonSessionDir = '/opt/rt3/var/session_data'; +our $MasonSessionDir = 'var/session_data'; + +unless ( File::Spec->file_name_is_absolute($EtcPath) ) { + +# if BasePath exists and is absolute, we won't infer it from $INC{'RT.pm'}. +# otherwise RT.pm will make src dir(where we configure RT) be the BasePath +# instead of the --prefix one + unless ( -d $BasePath && File::Spec->file_name_is_absolute($BasePath) ) { + my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1]; + # need rel2abs here is to make sure path is absolute, since $INC{'RT.pm'} + # is not always absolute + $BasePath = + File::Spec->rel2abs( + File::Spec->catdir( $pm_path, File::Spec->updir ) ); + } + + $BasePath = Cwd::realpath( $BasePath ); + + for my $path ( qw/EtcPath BinPath SbinPath VarPath LocalPath LocalEtcPath + LocalLibPath LocalLexiconPath PluginPath LocalPluginPath + MasonComponentRoot MasonLocalComponentRoot MasonDataDir + MasonSessionDir/ ) { + no strict 'refs'; + # just change relative ones + $$path = File::Spec->catfile( $BasePath, $$path ) + unless File::Spec->file_name_is_absolute( $$path ); + } +} =head1 NAME @@ -112,12 +130,14 @@ A fully featured request tracker package =head1 DESCRIPTION +=head2 INITIALIZATION + =head2 LoadConfig Load RT's config file. First, the site configuration file -(C) is loaded, in order to establish overall site +(F) is loaded, in order to establish overall site settings like hostname and name of RT instance. Then, the core -configuration file (C) is loaded to set fallback values +configuration file (F) is loaded to set fallback values for all settings; it bases some values on settings from the site configuration file. @@ -128,59 +148,33 @@ have not been set already. =cut sub LoadConfig { - local *Set = sub { $_[0] = $_[1] unless defined $_[0] }; - - my $username = getpwuid($>); - my $group = getgrgid($(); - my $message = <LoadConfigs; + require RT::I18N; # RT::Essentials mistakenly recommends that WebPath be set to '/'. # If the user does that, do what they mean. $RT::WebPath = '' if ($RT::WebPath eq '/'); - $ENV{'TZ'} = $RT::Timezone if ($RT::Timezone); + # fix relative LogDir and GnuPG homedir + unless ( File::Spec->file_name_is_absolute( $Config->Get('LogDir') ) ) { + $Config->Set( LogDir => + File::Spec->catfile( $BasePath, $Config->Get('LogDir') ) ); + } + my $gpgopts = $Config->Get('GnuPGOptions'); + unless ( File::Spec->file_name_is_absolute( $gpgopts->{homedir} ) ) { + $gpgopts->{homedir} = File::Spec->catfile( $BasePath, $gpgopts->{homedir} ); + } + RT::I18N->Init; } =head2 Init -Conenct to the database, set up logging. +L, L, +L and L. =cut @@ -188,41 +182,34 @@ sub Init { CheckPerlRequirements(); + InitPluginPaths(); + #Get a database connection ConnectToDatabase(); - - #RT's system user is a genuine database user. its id lives here - $SystemUser = new RT::CurrentUser(); - $SystemUser->LoadByName('RT_System'); - - #RT's "nobody user" is a genuine database user. its ID lives here. - $Nobody = new RT::CurrentUser(); - $Nobody->LoadByName('Nobody'); - - $System = RT::System->new(); - + InitSystemObjects(); InitClasses(); InitLogging(); -} + InitPlugins(); + RT->Config->PostLoadCheck; +} =head2 ConnectToDatabase -Get a database connection +Get a database connection. See also . =cut sub ConnectToDatabase { require RT::Handle; - unless ($Handle && $Handle->dbh && $Handle->dbh->ping) { - $Handle = RT::Handle->new(); - } - $Handle->Connect(); + $Handle = new RT::Handle unless $Handle; + $Handle->Connect; + return $Handle; } =head2 InitLogging -Create the RT::Logger object. +Create the Logger object and set up signal handlers. =cut @@ -231,112 +218,141 @@ sub InitLogging { # We have to set the record separator ($, man perlvar) # or Log::Dispatch starts getting # really pissy, as some other module we use unsets it. - $, = ''; use Log::Dispatch 1.6; - unless ($RT::Logger) { + my %level_to_num = ( + map( { $_ => } 0..7 ), + debug => 0, + info => 1, + notice => 2, + warning => 3, + error => 4, 'err' => 4, + critical => 5, crit => 5, + alert => 6, + emergency => 7, emerg => 7, + ); - $RT::Logger = Log::Dispatch->new(); + unless ( $RT::Logger ) { - my $simple_cb = sub { - # if this code throw any warning we can get segfault - no warnings; + $RT::Logger = Log::Dispatch->new; - my %p = @_; + my $stack_from_level; + if ( $stack_from_level = RT->Config->Get('LogStackTraces') ) { + # if option has old style '\d'(true) value + $stack_from_level = 0 if $stack_from_level =~ /^\d+$/; + $stack_from_level = $level_to_num{ $stack_from_level } || 0; + } else { + $stack_from_level = 99; # don't log + } - my $frame = 0; # stack frame index - # skip Log::* stack frames - $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ ); + my $simple_cb = sub { + # if this code throw any warning we can get segfault + no warnings; + my %p = @_; + + # skip Log::* stack frames + my $frame = 0; + $frame++ while caller($frame) && caller($frame) =~ /^Log::/; + my ($package, $filename, $line) = caller($frame); + + $p{'message'} =~ s/(?:\r*\n)+$//; + return "[". gmtime(time) ."] [". $p{'level'} ."]: " + . $p{'message'} ." ($filename:$line)\n"; + }; + + my $syslog_cb = sub { + # if this code throw any warning we can get segfault + no warnings; + my %p = @_; + + my $frame = 0; # stack frame index + # skip Log::* stack frames + $frame++ while caller($frame) && caller($frame) =~ /^Log::/; + my ($package, $filename, $line) = caller($frame); + + # syswrite() cannot take utf8; turn it off here. + Encode::_utf8_off($p{message}); + + $p{message} =~ s/(?:\r*\n)+$//; + if ($p{level} eq 'debug') { + return "$p{message}\n"; + } else { + return "$p{message} ($filename:$line)\n"; + } + }; - my ($package, $filename, $line) = caller($frame); - $p{message} =~ s/(?:\r*\n)+$//; - my $str = "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n"; + my $stack_cb = sub { + no warnings; + my %p = @_; + return $p{'message'} unless $level_to_num{ $p{'level'} } >= $stack_from_level; + + require Devel::StackTrace; + my $trace = Devel::StackTrace->new( ignore_class => [ 'Log::Dispatch', 'Log::Dispatch::Base' ] ); + return $p{'message'} . $trace->as_string; - if( $RT::LogStackTraces ) { - $str .= "\nStack trace:\n"; # skip calling of the Log::* subroutins - $frame++ while( caller($frame) && (caller($frame))[3] =~ /^Log::/ ); + my $frame = 0; + $frame++ while caller($frame) && caller($frame) =~ /^Log::/; + $frame++ while caller($frame) && (caller($frame))[3] =~ /^Log::/; + + $p{'message'} .= "\nStack trace:\n"; while( my ($package, $filename, $line, $sub) = caller($frame++) ) { - $str .= "\t". $sub ."() called at $filename:$line\n"; + $p{'message'} .= "\t$sub(...) called at $filename:$line\n"; + } + return $p{'message'}; + }; + + if ( $Config->Get('LogToFile') ) { + my ($filename, $logdir) = ( + $Config->Get('LogToFileNamed') || 'rt.log', + $Config->Get('LogDir') || File::Spec->catdir( $VarPath, 'log' ), + ); + if ( $filename =~ m![/\\]! ) { # looks like an absolute path. + ($logdir) = $filename =~ m{^(.*[/\\])}; + } + else { + $filename = File::Spec->catfile( $logdir, $filename ); } - } - return $str; - }; - - my $syslog_cb = sub { - my %p = @_; - - my $frame = 0; # stack frame index - # skip Log::* stack frames - $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ ); - my ($package, $filename, $line) = caller($frame); - # syswrite() cannot take utf8; turn it off here. - Encode::_utf8_off($p{message}); + unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) { + # localizing here would be hard when we don't have a current user yet + die "Log file '$filename' couldn't be written or created.\n RT can't run."; + } - $p{message} =~ s/(?:\r*\n)+$//; - if ($p{level} eq 'debug') { - return "$p{message}\n" - } else { - return "$p{message} ($filename:$line)\n" - } - }; - - if ($RT::LogToFile) { - my ($filename, $logdir); - if ($RT::LogToFileNamed =~ m![/\\]!) { - # looks like an absolute path. - $filename = $RT::LogToFileNamed; - ($logdir) = $RT::LogToFileNamed =~ m!^(.*[/\\])!; + require Log::Dispatch::File; + $RT::Logger->add( Log::Dispatch::File->new + ( name=>'file', + min_level=> $Config->Get('LogToFile'), + filename=> $filename, + mode=>'append', + callbacks => [ $simple_cb, $stack_cb ], + )); } - else { - $filename = "$RT::LogDir/$RT::LogToFileNamed"; - $logdir = $RT::LogDir; + if ( $Config->Get('LogToScreen') ) { + require Log::Dispatch::Screen; + $RT::Logger->add( Log::Dispatch::Screen->new + ( name => 'screen', + min_level => $Config->Get('LogToScreen'), + callbacks => [ $simple_cb, $stack_cb ], + stderr => 1, + )); } - - unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) { - # localizing here would be hard when we don't have a current user yet - die "Log file $filename couldn't be written or created.\n RT can't run."; + if ( $Config->Get('LogToSyslog') ) { + require Log::Dispatch::Syslog; + $RT::Logger->add(Log::Dispatch::Syslog->new + ( name => 'syslog', + ident => 'RT', + min_level => $Config->Get('LogToSyslog'), + callbacks => [ $syslog_cb, $stack_cb ], + stderr => 1, + $Config->Get('LogToSyslogConf'), + )); } - - package Log::Dispatch::File; - require Log::Dispatch::File; - $RT::Logger->add(Log::Dispatch::File->new - ( name=>'rtlog', - min_level=> $RT::LogToFile, - filename=> $filename, - mode=>'append', - callbacks => $simple_cb, - )); - } - if ($RT::LogToScreen) { - package Log::Dispatch::Screen; - require Log::Dispatch::Screen; - $RT::Logger->add(Log::Dispatch::Screen->new - ( name => 'screen', - min_level => $RT::LogToScreen, - callbacks => $simple_cb, - stderr => 1, - )); - } - if ($RT::LogToSyslog) { - package Log::Dispatch::Syslog; - require Log::Dispatch::Syslog; - $RT::Logger->add(Log::Dispatch::Syslog->new - ( name => 'syslog', - ident => 'RT', - min_level => $RT::LogToSyslog, - callbacks => $syslog_cb, - stderr => 1, - @RT::LogToSyslogConf - )); - } - } -# {{{ Signal handlers +# Signal handlers ## This is the default handling of warnings and die'ings in the code ## (including other used modules - maybe except for errors catched by ## Mason). It will log all problems through the standard logging @@ -355,16 +371,15 @@ sub InitLogging { #When we call die, trap it and log->crit with the value of the die. -$SIG{__DIE__} = sub { - unless ($^S || !defined $^S ) { - $RT::Handle->Rollback(); - $RT::Logger->crit("$_[0]"); - } - die $_[0]; -}; - -# }}} - + $SIG{__DIE__} = sub { + # if we are not in eval and perl is not parsing code + # then rollback transactions and log RT error + unless ($^S || !defined $^S ) { + $RT::Handle->Rollback(1) if $RT::Handle; + $RT::Logger->crit("$_[0]") if $RT::Logger; + } + die $_[0]; + }; } @@ -400,10 +415,9 @@ EOF } } - =head2 InitClasses -Load all modules that define base classes +Load all modules that define base classes. =cut @@ -426,6 +440,8 @@ sub InitClasses { require RT::ObjectCustomFields; require RT::ObjectCustomFieldValues; require RT::Attributes; + require RT::Dashboard; + require RT::Approval; # on a cold server (just after restart) people could have an object # in the session, as we deserialize it so we never call constructor @@ -452,21 +468,196 @@ sub InitClasses { ); } -# }}} +=head2 InitSystemObjects + +Initializes system objects: C<$RT::System>, C<$RT::SystemUser> +and C<$RT::Nobody>. + +=cut + +sub InitSystemObjects { + + #RT's system user is a genuine database user. its id lives here + require RT::CurrentUser; + $SystemUser = new RT::CurrentUser; + $SystemUser->LoadByName('RT_System'); + + #RT's "nobody user" is a genuine database user. its ID lives here. + $Nobody = new RT::CurrentUser; + $Nobody->LoadByName('Nobody'); + + require RT::System; + $System = RT::System->new( $SystemUser ); +} + +=head1 CLASS METHODS + +=head2 Config + +Returns the current L, but note that +you must L first otherwise this method +returns undef. + +Method can be called as class method. + +=cut + +sub Config { return $Config } + +=head2 DatabaseHandle + +Returns the current L. + +See also L. + +=cut + +sub DatabaseHandle { return $Handle } + +=head2 Logger + +Returns the logger. See also L. + +=cut + +sub Logger { return $Logger } + +=head2 System + +Returns the current L. See also +L. + +=cut + +sub System { return $System } + +=head2 SystemUser + +Returns the system user's object, it's object of +L class that represents the system. See also +L. + +=cut + +sub SystemUser { return $SystemUser } + +=head2 Nobody + +Returns object of Nobody. It's object of L class +that represents a user who can own ticket and nothing else. See +also L. + +=cut + +sub Nobody { return $Nobody } + +=head2 Plugins + +Returns a listref of all Plugins currently configured for this RT instance. +You can define plugins by adding them to the @Plugins list in your RT_SiteConfig + +=cut + +our @PLUGINS = (); +sub Plugins { + my $self = shift; + unless (@PLUGINS) { + $self->InitPluginPaths; + @PLUGINS = $self->InitPlugins; + } + return \@PLUGINS; +} + +=head2 PluginDirs + +Takes optional subdir (e.g. po, lib, etc.) and return plugins' dirs that exist. + +This code chacke plugins names or anything else and required when main config +is loaded to load plugins' configs. + +=cut + +sub PluginDirs { + my $self = shift; + my $subdir = shift; + + require RT::Plugin; + + my @res; + foreach my $plugin (grep $_, RT->Config->Get('Plugins')) { + my $path = RT::Plugin->new( name => $plugin )->Path( $subdir ); + next unless -d $path; + push @res, $path; + } + return @res; +} + +=head2 InitPluginPaths + +Push plugins' lib paths into @INC right after F. +In case F isn't in @INC, append them to @INC + +=cut + +sub InitPluginPaths { + my $self = shift || __PACKAGE__; + + my @lib_dirs = $self->PluginDirs('lib'); + + my @tmp_inc; + my $added; + for (@INC) { + if ( Cwd::realpath($_) eq $RT::LocalLibPath) { + push @tmp_inc, $_, @lib_dirs; + $added = 1; + } else { + push @tmp_inc, $_; + } + } + + # append @lib_dirs in case $RT::LocalLibPath isn't in @INC + push @tmp_inc, @lib_dirs unless $added; + + my %seen; + @INC = grep !$seen{$_}++, @tmp_inc; +} + +=head2 InitPlugins + +Initialze all Plugins found in the RT configuration file, setting up their lib and HTML::Mason component roots. +=cut + +sub InitPlugins { + my $self = shift; + my @plugins; + require RT::Plugin; + foreach my $plugin (grep $_, RT->Config->Get('Plugins')) { + $plugin->require; + die $UNIVERSAL::require::ERROR if ($UNIVERSAL::require::ERROR); + push @plugins, RT::Plugin->new(name =>$plugin); + } + return @plugins; +} -sub SystemUser { - return($SystemUser); -} -sub Nobody { - return ($Nobody); +sub InstallMode { + my $self = shift; + if (@_) { + $_INSTALL_MODE = shift; + if($_INSTALL_MODE) { + require RT::CurrentUser; + $SystemUser = RT::CurrentUser->new(); + } + } + return $_INSTALL_MODE; } + =head1 BUGS -Please report them to rt-bugs@fsck.com, if you know what's broken and have at least -some idea of what needs to be fixed. +Please report them to rt-bugs@bestpractical.com, if you know what's +broken and have at least some idea of what needs to be fixed. If you're not sure what's going on, report them rt-devel@lists.bestpractical.com. @@ -475,14 +666,6 @@ If you're not sure what's going on, report them rt-devel@lists.bestpractical.com L L -=begin testing - -ok ($RT::Nobody->Name() eq 'Nobody', "Nobody is nobody"); -ok ($RT::Nobody->Name() ne 'root', "Nobody isn't named root"); -ok ($RT::SystemUser->Name() eq 'RT_System', "The system user is RT_System"); -ok ($RT::SystemUser->Name() ne 'noname', "The system user isn't noname"); - -=end testing =cut diff --git a/rt/lib/RT/Groups_Overlay.pm b/rt/lib/RT/Groups_Overlay.pm index aba5cc0b3..407b905b9 100644 --- a/rt/lib/RT/Groups_Overlay.pm +++ b/rt/lib/RT/Groups_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + =head1 NAME RT::Groups - a collection of RT::Group objects @@ -52,7 +53,7 @@ =head1 SYNOPSIS use RT::Groups; - my $groups = $RT::Groups->new($CurrentUser); + my $groups = RT::Groups->new($CurrentUser); $groups->UnLimit(); while (my $group = $groups->Next()) { print $group->Id ." is a group id\n"; @@ -64,11 +65,6 @@ =head1 METHODS -=begin testing - -ok (require RT::Groups); - -=end testing =cut @@ -88,24 +84,6 @@ use RT::Users; # {{{ sub _Init -=begin testing - -# next had bugs -# Groups->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => xx ); -my $g = RT::Group->new($RT::SystemUser); -my ($id, $msg) = $g->CreateUserDefinedGroup(Name => 'GroupsNotEqualTest'); -ok ($id, "created group #". $g->id) or diag("error: $msg"); - -my $groups = RT::Groups->new($RT::SystemUser); -$groups->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $g->id ); -$groups->LimitToUserDefinedGroups(); -my $bug = grep $_->id == $g->id, @{$groups->ItemsArrayRef}; -ok (!$bug, "didn't find group"); - -=end testing - -=cut - sub _Init { my $self = shift; $self->{'table'} = "Groups"; @@ -172,7 +150,7 @@ sub LimitToSystemInternalGroups { # {{{ LimiToUserDefinedGroups -=head2 LimitToUserDefined Groups +=head2 LimitToUserDefinedGroups Return only UserDefined Groups @@ -189,7 +167,7 @@ sub LimitToUserDefinedGroups { # }}} -# {{{ LimiToPersonalGroups +# {{{ LimiToPersonalGroupsFor =head2 LimitToPersonalGroupsFor PRINCIPAL_ID @@ -265,27 +243,6 @@ sub LimitToRolesForSystem { Limits the set of groups returned to groups which have Principal PRINCIPAL_ID as a member - -=begin testing - -my $u = RT::User->new($RT::SystemUser); -$u->Create(Name => 'Membertests'); -my $g = RT::Group->new($RT::SystemUser); -my ($id, $msg) = $g->CreateUserDefinedGroup(Name => 'Membertests'); -ok ($id, $msg); - -my ($aid, $amsg) =$g->AddMember($u->id); -ok ($aid, $amsg); -ok($g->HasMember($u->PrincipalObj),"G has member u"); - -my $groups = RT::Groups->new($RT::SystemUser); -$groups->LimitToUserDefinedGroups(); -$groups->WithMember(PrincipalId => $u->id); -ok ($groups->Count == 1,"found the 1 group - " . $groups->Count); -ok ($groups->First->Id == $g->Id, "it's the right one"); - -=end testing - =cut @@ -307,92 +264,42 @@ sub WithMember { $self->Limit(ALIAS => $members, FIELD => 'MemberId', OPERATOR => '=', VALUE => $args{'PrincipalId'}); } +sub WithoutMember { + my $self = shift; + my %args = ( + PrincipalId => undef, + Recursively => undef, + @_ + ); + + my $members = $args{'Recursively'} ? 'CachedGroupMembers' : 'GroupMembers'; + my $members_alias = $self->Join( + TYPE => 'LEFT', + FIELD1 => 'id', + TABLE2 => $members, + FIELD2 => 'GroupId', + ); + $self->Limit( + LEFTJOIN => $members_alias, + ALIAS => $members_alias, + FIELD => 'MemberId', + OPERATOR => '=', + VALUE => $args{'PrincipalId'}, + ); + $self->Limit( + ALIAS => $members_alias, + FIELD => 'MemberId', + OPERATOR => 'IS', + VALUE => 'NULL', + QUOTEVALUE => 0, + ); +} =head2 WithRight { Right => RIGHTNAME, Object => RT::Record, IncludeSystemRights => 1, IncludeSuperusers => 0, EquivObjects => [ ] } Find all groups which have RIGHTNAME for RT::Record. Optionally include global rights and superusers. By default, include the global rights, but not the superusers. -=begin testing - -my $q = RT::Queue->new($RT::SystemUser); -my ($id, $msg) =$q->Create( Name => 'GlobalACLTest'); -ok ($id, $msg); - -my $testuser = RT::User->new($RT::SystemUser); -($id,$msg) = $testuser->Create(Name => 'JustAnAdminCc'); -ok ($id,$msg); - -my $global_admin_cc = RT::Group->new($RT::SystemUser); -$global_admin_cc->LoadSystemRoleGroup('AdminCc'); -ok($global_admin_cc->id, "Found the global admincc group"); -my $groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'OwnTicket', Object => $q); -is($groups->Count, 1); -($id, $msg) = $global_admin_cc->PrincipalObj->GrantRight(Right =>'OwnTicket', Object=> $RT::System); -ok ($id,$msg); -ok (!$testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does not have the right to own tickets in the test queue"); -($id, $msg) = $q->AddWatcher(Type => 'AdminCc', PrincipalId => $testuser->id); -ok($id,$msg); -ok ($testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does have the right to own tickets now. thank god."); - -$groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'OwnTicket', Object => $q); -ok ($id,$msg); -is($groups->Count, 3); - -my $RTxGroup = RT::Group->new($RT::SystemUser); -($id, $msg) = $RTxGroup->CreateUserDefinedGroup( Name => 'RTxGroup', Description => "RTx extension group"); -ok ($id,$msg); - -my $RTxSysObj = {}; -bless $RTxSysObj, 'RTx::System'; -*RTx::System::Id = sub { 1; }; -*RTx::System::id = *RTx::System::Id; -my $ace = RT::Record->new($RT::SystemUser); -$ace->Table('ACL'); -$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); -($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System', ObjectId => 1); -ok ($id, "ACL for RTxSysObj created"); - -my $RTxObj = {}; -bless $RTxObj, 'RTx::System::Record'; -*RTx::System::Record::Id = sub { 4; }; -*RTx::System::Record::id = *RTx::System::Record::Id; - -$groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxSysObj); -is($groups->Count, 1, "RTxGroupRight found for RTxSysObj"); - -$groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj); -is($groups->Count, 0, "RTxGroupRight not found for RTxObj"); - -$groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]); -is($groups->Count, 1, "RTxGroupRight found for RTxObj using EquivObjects"); - -$ace = RT::Record->new($RT::SystemUser); -$ace->Table('ACL'); -$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); -($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System::Record', ObjectId => 5 ); -ok ($id, "ACL for RTxObj created"); - -my $RTxObj2 = {}; -bless $RTxObj2, 'RTx::System::Record'; -*RTx::System::Record::Id = sub { 5; }; - -$groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2); -is($groups->Count, 1, "RTxGroupRight found for RTxObj2"); - -$groups = RT::Groups->new($RT::SystemUser); -$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]); -is($groups->Count, 1, "RTxGroupRight found for RTxObj2"); - - - -=end testing =cut diff --git a/rt/lib/RT/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 \n" -"Language-Team: rt-devel \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 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -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 not change who will receive future updates.)" -msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epostaddresser. Endrer ikke 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 not change who will recieve future updates.)" -msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epostaddresser. Endrer ikke 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 not 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 will receive future updates.)" -msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste av administrative epostaddresser. Disse vil vil 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 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. Does not change who will receive future updates.)" -msgstr "(Sender en kopi av denne oppdateringen til en komma-separert liste av epostaddresser. Endrer ikke 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 not change who will recieve future updates.)" -msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epost-addresser. Endrer ikke 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 not 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 will receive future updates.)" -msgstr "(Sender en kopi av dette oppdateringen til en kommaseparert liste med epostaddresser. Disse vill 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 will 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 " %1" -msgstr "" - -#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr " %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 of the GNU GPL." -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 -#. ("".$session{'CurrentUser'}->Name."") -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 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Vis kun godkjennelse for saker opprettet etter %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -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 Best Practical Solutions, LLC." -msgstr "RT %1 fra Best Practical Solutions, LLC." - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent \\n" -msgstr "RT %1. Copyright 1996-%1 Jesse Vincent \\n" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent \\n" -msgstr "RT %1. Copyright 1996-2002 Jesse Vincent \\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 © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under Version 2 of the GNU General Public License." -msgstr "RT er © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Den er distribuert under Version 2 of the GNU General Public License." - -#: NOT FOUND IN SOURCE -msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under Version 2 of the GNU General Public License." -msgstr "RT er © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. Den er distribuert under Version 2 of the GNU General Public License." - -#: 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 __id__ and __CustomField__ 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 id numbers, queues by name, Owners by username and Requestors by email address. 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 fulltext:word." -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 -#. ('sales@bestpractical.com') -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 , 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 \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 \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 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -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 not 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.Não 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 will 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 vão 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 not 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.Não 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 will receive future updates.)" -msgstr "(Envia uma cópia desta atualização para uma lista de endereços de separados por ví­rgula. Estas pessoas vão 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 " %1" -msgstr " %1" - -#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:785 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr " %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 of the GNU GPL." -msgstr "Distribuido sob a versão 2 da GNU GPL." - -#: 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 -#. ("".$session{'CurrentUser'}->Name."") -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 -#. ("") -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 -#. ("") -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 \\n" -msgstr "" -"RT %1. Direitos reservados 1996-%1 Jesse Vincent " -"\\n" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent \\n" -msgstr "" -"RT %1. Direitos reservados 1996-2002 Jesse Vincent \\\\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 __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT vai substituir __id__ e __CustomField__ 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 id numbers, queues by name, Owners by username and Requestors by email address. RT will look for anything else you enter in ticket bodies and attachments." -msgstr "Busca por tí­quetes. Informar id por número, filas por nome, Proprietários por nomedeusuário e Requisitantes por endereço de e-email. 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 fulltext:word." -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 fulltext:palavra." - -#: 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 -#. ('sales@bestpractical.com') -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 \n" -"Language-Team: rt-devel \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 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -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 not 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 will 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 not 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 will 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 " %1" -msgstr " %1" - -#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:785 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr " %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 of the GNU GPL." -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 -#. ("".$session{'CurrentUser'}->Name."") -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 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -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 __id__ and __CustomField__ 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 id numbers, queues by name, Owners by username and Requestors by email address." -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 fulltext:word." -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 fulltext:palavra." - -#: 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 -#. ('sales@bestpractical.com') -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 \n" -"Language-Team: rt-devel \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 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -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 not change who will receive future updates.)" -msgstr "(送出本份更新的密件副本给名单上以逗号隔开的电子邮件地址。这不会更改后续的收件者名单。)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will recieve future updates.)" -msgstr "(送出本份更新的密件副本给名单上以逗号隔开的电子邮件地址。这不会更改后续的收件者名单。)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not 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 will receive future updates.)" -msgstr "(送出本份更新的副本给名单上以逗号隔开的管理员电子邮件地址。这将会更改后续的收件者名单。)" - -#: html/Ticket/Create.html:103 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people 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. Does not 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. Does not change who will recieve future updates.)" -msgstr "(送出本份更新的副本给名单上以逗号隔开的电子邮件地址。这不会更改后续的收件者名单。)" - -#: html/Ticket/Update.html:86 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does not 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 will receive future updates.)" -msgstr "(送出本份更新的副本给名单上以逗号隔开的电子邮件地址。这将会更改后续的收件者名单。)" - -#: html/Ticket/Create.html:93 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will 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 " %1" -msgstr " %1" - -#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr " %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 of the GNU GPL." -msgstr "依 GNU 通用公共授权 第二版散布。" - -#: 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 -#. ("".$session{'CurrentUser'}->Name."") -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 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "仅显示 %1 之后新增的申请单" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -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 Best Practical Solutions, LLC." -msgstr "RT %1 版,Best Practical Solutions 公司出品。" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent \\n" -msgstr "RT %1。版权所有 1996-%1 Jesse Vincent \\n" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent \\n" -msgstr "RT %1。版权所有 1996-2002 Jesse Vincent \\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 © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under Version 2 of the GNU General Public License." -msgstr "RT 版权所有 1996-%1 Jesse Vincent <jesse@bestpractical.com>。
本软体依 GNU 通用公共授权第二版 散布。" - -#: 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 __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT 会将 __id__ 及 __CustomField__ 置换成纪录编号及自订字段" - -#: 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 id numbers, queues by name, Owners by username and Requestors by email address. 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 "搜寻结果,依 %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 fulltext:word." -msgstr "对所有申请单的全文进行检索,可能会需要很久的时间。但如果您真的有需要,可键入 fulltext:文字 来搜寻申请单的所有纪录。" - -#: 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 "" -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 -#. ('sales@bestpractical.com') -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 \n" -"Language-Team: rt-devel \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 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -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 not change who will receive future updates.)" -msgstr "(送出本份更新的密件副本給名單上以逗號隔開的電子郵件位址。這不會更改後續的收件者名單。)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will recieve future updates.)" -msgstr "(送出本份更新的密件副本給名單上以逗號隔開的電子郵件位址。這不會更改後續的收件者名單。)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not 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 will receive future updates.)" -msgstr "(送出本份更新的副本給名單上以逗號隔開的管理員電子郵件位址。這將會更改後續的收件者名單。)" - -#: html/Ticket/Create.html:103 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people 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. Does not 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. Does not change who will recieve future updates.)" -msgstr "(送出本份更新的副本給名單上以逗號隔開的電子郵件位址。這不會更改後續的收件者名單。)" - -#: html/Ticket/Update.html:86 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does not 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 will receive future updates.)" -msgstr "(送出本份更新的副本給名單上以逗號隔開的電子郵件位址。這將會更改後續的收件者名單。)" - -#: html/Ticket/Create.html:93 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will 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 " %1" -msgstr " %1" - -#: docs/design_docs/string-extraction-guide.txt:54 lib/RT/StyleGuide.pod:787 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr " %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 of the GNU GPL." -msgstr "依 GNU 通用公共授權 第二版散布。" - -#: 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 -#. ("".$session{'CurrentUser'}->Name."") -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 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "僅顯示 %1 之後新增的申請單" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -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 Best Practical Solutions, LLC." -msgstr "RT %1 版,Best Practical Solutions 公司出品。" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent \\n" -msgstr "RT %1。版權所有 1996-%1 Jesse Vincent \\n" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent \\n" -msgstr "RT %1。版權所有 1996-2002 Jesse Vincent \\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 © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under Version 2 of the GNU General Public License." -msgstr "RT 版權所有 1996-%1 Jesse Vincent <jesse@bestpractical.com>。
本軟體依 GNU 通用公共授權第二版 散佈。" - -#: 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 __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT 會將 __id__ 及 __CustomField__ 置換成紀錄編號及自訂欄位" - -#: 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 id numbers, queues by name, Owners by username and Requestors by email address. 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 "搜尋結果,依 %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 fulltext:word." -msgstr "對所有申請單的全文進行檢索,可能會需要很久的時間。但如果您真的有需要,可鍵入 fulltext:文字 來搜尋申請單的所有紀錄。" - -#: 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 -#. ('sales@bestpractical.com') -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/Record.pm b/rt/lib/RT/Record.pm index 8664e2867..4f38b0405 100755 --- a/rt/lib/RT/Record.pm +++ b/rt/lib/RT/Record.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + =head1 NAME RT::Record - Base class for RT record objects @@ -55,11 +56,6 @@ =head1 DESCRIPTION -=begin testing - -ok (require RT::Record); - -=end testing =head1 METHODS @@ -70,25 +66,22 @@ package RT::Record; use strict; use warnings; -our @ISA; -use base qw(RT::Base); - use RT::Date; use RT::I18N; use RT::User; use RT::Attributes; -use DBIx::SearchBuilder::Record::Cachable; use Encode qw(); our $_TABLE_ATTR = { }; - -if ( $RT::DontCacheSearchBuilderRecords ) { - push (@ISA, 'DBIx::SearchBuilder::Record'); -} else { - push (@ISA, 'DBIx::SearchBuilder::Record::Cachable'); - +use RT::Base; +my $base = 'DBIx::SearchBuilder::Record::Cachable'; +if ( $RT::Config && $RT::Config->Get('DontCacheSearchBuilderRecords') ) { + $base = 'DBIx::SearchBuilder::Record'; } +eval "require $base" or die $@; +our @ISA = 'RT::Base'; +push @ISA, $base; # {{{ sub _Init @@ -108,10 +101,7 @@ The primary keys for RT classes is 'id' =cut -sub _PrimaryKeys { - my $self = shift; - return ( ['id'] ); -} +sub _PrimaryKeys { return ['id'] } # }}} @@ -137,14 +127,6 @@ sub Delete { Returns a string which is this object's type. The type is the class, without the "RT::" prefix. -=begin testing - -my $ticket = RT::Ticket->new($RT::SystemUser); -my $group = RT::Group->new($RT::SystemUser); -is($ticket->ObjectTypeStr, 'Ticket', "Ticket returns correct typestring"); -is($group->ObjectTypeStr, 'Group', "Group returns correct typestring"); - -=end testing =cut @@ -260,10 +242,7 @@ sub FirstAttribute { # {{{ sub _Handle -sub _Handle { - my $self = shift; - return ($RT::Handle); -} +sub _Handle { return $RT::Handle } # }}} @@ -336,8 +315,6 @@ sub Create { } if (UNIVERSAL::isa('errno',$id)) { - exit(0); - warn "It's here!"; return(undef); } @@ -367,40 +344,29 @@ DB is case sensitive sub LoadByCols { my $self = shift; - my %hash = (@_); # We don't want to hang onto this delete $self->{'attributes'}; + return $self->SUPER::LoadByCols( @_ ) unless $self->_Handle->CaseSensitive; + # If this database is case sensitive we need to uncase objects for # explicit loading - if ( $self->_Handle->CaseSensitive ) { - my %newhash; - foreach my $key ( keys %hash ) { - - # If we've been passed an empty value, we can't do the lookup. - # We don't need to explicitly downcase integers or an id. - if ( $key =~ '^id$' - || !defined( $hash{$key} ) - || $hash{$key} =~ /^\d+$/ - ) - { - $newhash{$key} = $hash{$key}; - } - else { - my ($op, $val, $func); - ($key, $op, $val, $func) = $self->_Handle->_MakeClauseCaseInsensitive($key, '=', $hash{$key}); - $newhash{$key}->{operator} = $op; - $newhash{$key}->{value} = $val; - $newhash{$key}->{function} = $func; - } + my %hash = (@_); + foreach my $key ( keys %hash ) { + + # If we've been passed an empty value, we can't do the lookup. + # We don't need to explicitly downcase integers or an id. + if ( $key ne 'id' && defined $hash{ $key } && $hash{ $key } !~ /^\d+$/ ) { + my ($op, $val, $func); + ($key, $op, $val, $func) = + $self->_Handle->_MakeClauseCaseInsensitive( $key, '=', delete $hash{ $key } ); + $hash{$key}->{operator} = $op; + $hash{$key}->{value} = $val; + $hash{$key}->{function} = $func; } - - # We've clobbered everything we care about. bash the old hash - # and replace it with the new hash - %hash = %newhash; } - $self->SUPER::LoadByCols(%hash); + return $self->SUPER::LoadByCols( %hash ); } # }}} @@ -529,7 +495,7 @@ sub _Set { $msg = $self->loc( "[_1] changed from [_2] to [_3]", - $args{'Field'}, + $self->loc( $args{'Field'} ), ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), '"' . $self->__Value( $args{'Field'}) . '"' ); @@ -662,27 +628,20 @@ sub SQLType { } - sub __Value { my $self = shift; my $field = shift; - my %args = ( decode_utf8 => 1, - @_ ); + my %args = ( decode_utf8 => 1, @_ ); - unless (defined $field && $field) { - $RT::Logger->error("$self __Value called with undef field"); + unless ( $field ) { + $RT::Logger->error("__Value called with undef field"); } - my $value = $self->SUPER::__Value($field); - - return('') if ( !defined($value) || $value eq ''); + my $value = $self->SUPER::__Value( $field ); if( $args{'decode_utf8'} ) { - # XXX: is_utf8 check should be here unless Encode bug would be fixed - # see http://rt.cpan.org/NoAuth/Bug.html?id=14559 - return Encode::decode_utf8($value) unless Encode::is_utf8($value); + return Encode::decode_utf8( $value ) unless Encode::is_utf8( $value ); } else { - # check is_utf8 here just to be shure - return Encode::encode_utf8($value) if Encode::is_utf8($value); + return Encode::encode_utf8( $value ) if Encode::is_utf8( $value ); } return $value; } @@ -700,6 +659,7 @@ sub _CacheConfig { sub _BuildTableAttributes { my $self = shift; + my $class = ref($self) || $self; my $attributes; if ( UNIVERSAL::can( $self, '_CoreAccessible' ) ) { @@ -711,37 +671,19 @@ sub _BuildTableAttributes { foreach my $column (%$attributes) { foreach my $attr ( %{ $attributes->{$column} } ) { - $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; - } - } - if ( UNIVERSAL::can( $self, '_OverlayAccessible' ) ) { - $attributes = $self->_OverlayAccessible(); - - foreach my $column (%$attributes) { - foreach my $attr ( %{ $attributes->{$column} } ) { - $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; - } + $_TABLE_ATTR->{$class}->{$column}->{$attr} = $attributes->{$column}->{$attr}; } } - if ( UNIVERSAL::can( $self, '_VendorAccessible' ) ) { - $attributes = $self->_VendorAccessible(); + foreach my $method ( qw(_OverlayAccessible _VendorAccessible _LocalAccessible) ) { + next unless UNIVERSAL::can( $self, $method ); + $attributes = $self->$method(); foreach my $column (%$attributes) { foreach my $attr ( %{ $attributes->{$column} } ) { - $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; + $_TABLE_ATTR->{$class}->{$column}->{$attr} = $attributes->{$column}->{$attr}; } } } - if ( UNIVERSAL::can( $self, '_LocalAccessible' ) ) { - $attributes = $self->_LocalAccessible(); - - foreach my $column (%$attributes) { - foreach my $attr ( %{ $attributes->{$column} } ) { - $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; - } - } - } - } @@ -754,7 +696,7 @@ DBIx::SearchBuilder::Record sub _ClassAccessible { my $self = shift; - return $_TABLE_ATTR->{ref($self)}; + return $_TABLE_ATTR->{ref($self) || $self}; } =head2 _Accessible COLUMN ATTRIBUTE @@ -787,19 +729,19 @@ sub _EncodeLOB { my $ContentEncoding = 'none'; #get the max attachment length from RT - my $MaxSize = $RT::MaxAttachmentSize; + my $MaxSize = RT->Config->Get('MaxAttachmentSize'); #if the current attachment contains nulls and the #database doesn't support embedded nulls - if ( $RT::AlwaysUseBase64 or + if ( RT->Config->Get('AlwaysUseBase64') or ( !$RT::Handle->BinarySafeBLOBs ) && ( $Body =~ /\x00/ ) ) { # set a flag telling us to mimencode the attachment $ContentEncoding = 'base64'; #cut the max attchment size by 25% (for mime-encoding overhead. - $RT::Logger->debug("Max size is $MaxSize\n"); + $RT::Logger->debug("Max size is $MaxSize"); $MaxSize = $MaxSize * 3 / 4; # Some databases (postgres) can't handle non-utf8 data } elsif ( !$RT::Handle->BinarySafeBLOBs @@ -812,7 +754,7 @@ sub _EncodeLOB { if ( ($MaxSize) and ( $MaxSize < length($Body) ) ) { # if we're supposed to truncate large attachments - if ($RT::TruncateLongAttachments) { + if (RT->Config->Get('TruncateLongAttachments')) { # truncate the attachment to that length. $Body = substr( $Body, 0, $MaxSize ); @@ -820,13 +762,12 @@ sub _EncodeLOB { } # elsif we're supposed to drop large attachments on the floor, - elsif ($RT::DropLongAttachments) { + elsif (RT->Config->Get('DropLongAttachments')) { # drop the attachment on the floor $RT::Logger->info( "$self: Dropped an attachment of size " - . length($Body) . "\n" - . "It started: " . substr( $Body, 0, 60 ) . "\n" - ); + . length($Body)); + $RT::Logger->info( "It started: " . substr( $Body, 0, 60 ) ); return ("none", "Large attachment dropped" ); } } @@ -850,8 +791,8 @@ sub _EncodeLOB { sub _DecodeLOB { my $self = shift; - my $ContentType = shift; - my $ContentEncoding = shift; + my $ContentType = shift || ''; + my $ContentEncoding = shift || 'none'; my $Content = shift; if ( $ContentEncoding eq 'base64' ) { @@ -870,7 +811,6 @@ sub _DecodeLOB { return ($Content); } -# {{{ LINKDIRMAP # A helper table for links mapping to make it easier # to build and parse links between tickets @@ -944,11 +884,18 @@ sub Update { # This is in an eval block because $object might not exist. # and might not have a Name method. But "can" won't find autoloaded # items. If it fails, we don't care - eval { - my $object = $attribute . "Obj"; - next if ($self->$object->Name eq $value); + do { + no warnings "uninitialized"; + local $@; + eval { + my $object = $attribute . "Obj"; + my $name = $self->$object->Name; + next if $name eq $value || $name eq ($value || 0); + }; + next if $value eq $self->$attribute(); + next if ($value || 0) eq $self->$attribute(); }; - next if ( $value eq $self->$attribute() ); + my $method = "Set$attribute"; my ( $code, $msg ) = $self->$method($value); my ($prefix) = ref($self) =~ /RT(?:.*)::(\w+)/; @@ -956,7 +903,17 @@ sub Update { # Default to $id, but use name if we can get it. my $label = $self->id; $label = $self->Name if (UNIVERSAL::can($self,'Name')); - push @results, $self->loc( "$prefix [_1]", $label ) . ': '. $msg; + # this requires model names to be loc'ed. + +=for loc + + "Ticket" # loc + "User" # loc + "Group" # loc + "Queue" # loc +=cut + + push @results, $self->loc( $prefix ) . " $label: ". $msg; =for loc @@ -1065,54 +1022,10 @@ sub DependedOnBy { =head2 HasUnresolvedDependencies - Takes a paramhash of Type (default to '__any'). Returns true if -$self->UnresolvedDependencies returns an object with one or more members -of that type. Returns false otherwise - - -=begin testing - -my $t1 = RT::Ticket->new($RT::SystemUser); -my ($id, $trans, $msg) = $t1->Create(Subject => 'DepTest1', Queue => 'general'); -ok($id, "Created dep test 1 - $msg"); - -my $t2 = RT::Ticket->new($RT::SystemUser); -my ($id2, $trans, $msg2) = $t2->Create(Subject => 'DepTest2', Queue => 'general'); -ok($id2, "Created dep test 2 - $msg2"); -my $t3 = RT::Ticket->new($RT::SystemUser); -my ($id3, $trans, $msg3) = $t3->Create(Subject => 'DepTest3', Queue => 'general', Type => 'approval'); -ok($id3, "Created dep test 3 - $msg3"); -my ($addid, $addmsg); -ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t2->id)); -ok ($addid, $addmsg); -ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t3->id)); - -ok ($addid, $addmsg); -my $link = RT::Link->new($RT::SystemUser); -my ($rv, $msg) = $link->Load($addid); -ok ($rv, $msg); -ok ($link->LocalTarget == $t3->id, "Link LocalTarget is correct"); -ok ($link->LocalBase == $t1->id, "Link LocalBase is correct"); - -ok ($t1->HasUnresolvedDependencies, "Ticket ".$t1->Id." has unresolved deps"); -ok (!$t1->HasUnresolvedDependencies( Type => 'blah' ), "Ticket ".$t1->Id." has no unresolved blahs"); -ok ($t1->HasUnresolvedDependencies( Type => 'approval' ), "Ticket ".$t1->Id." has unresolved approvals"); -ok (!$t2->HasUnresolvedDependencies, "Ticket ".$t2->Id." has no unresolved deps"); -; - -my ($rid, $rmsg)= $t1->Resolve(); -ok(!$rid, $rmsg); -my ($rid2, $rmsg2) = $t2->Resolve(); -ok ($rid2, $rmsg2); -($rid, $rmsg)= $t1->Resolve(); -ok(!$rid, $rmsg); -my ($rid3,$rmsg3) = $t3->Resolve; -ok ($rid3,$rmsg3); -($rid, $rmsg)= $t1->Resolve(); -ok($rid, $rmsg); - - -=end testing +Takes a paramhash of Type (default to '__any'). Returns the number of +unresolved dependencies, if $self->UnresolvedDependencies returns an +object with one or more members of that type. Returns false +otherwise. =cut @@ -1135,7 +1048,7 @@ sub HasUnresolvedDependencies { } if ($deps->Count > 0) { - return 1; + return $deps->Count; } else { return (undef); @@ -1184,27 +1097,54 @@ dependency search. sub AllDependedOnBy { my $self = shift; - my $dep = $self->DependedOnBy; + return $self->_AllLinkedTickets( LinkType => 'DependsOn', + Direction => 'Target', @_ ); +} + +=head2 AllDependsOn + +Returns an array of RT::Ticket objects which this ticket (directly or +indirectly) depends on; takes an optional 'Type' argument in the param +hash, which will limit returned tickets to that type, as well as cause +tickets with that type to serve as 'leaf' nodes that stops the +recursive dependency search. + +=cut + +sub AllDependsOn { + my $self = shift; + return $self->_AllLinkedTickets( LinkType => 'DependsOn', + Direction => 'Base', @_ ); +} + +sub _AllLinkedTickets { + my $self = shift; + my %args = ( + LinkType => undef, + Direction => undef, Type => undef, _found => {}, _top => 1, @_ ); + my $dep = $self->_Links( $args{Direction}, $args{LinkType}); while (my $link = $dep->Next()) { - next unless ($link->BaseURI->IsLocal()); - next if $args{_found}{$link->BaseObj->Id}; + my $uri = $args{Direction} eq 'Target' ? $link->BaseURI : $link->TargetURI; + next unless ($uri->IsLocal()); + my $obj = $args{Direction} eq 'Target' ? $link->BaseObj : $link->TargetObj; + next if $args{_found}{$obj->Id}; if (!$args{Type}) { - $args{_found}{$link->BaseObj->Id} = $link->BaseObj; - $link->BaseObj->AllDependedOnBy( %args, _top => 0 ); + $args{_found}{$obj->Id} = $obj; + $obj->_AllLinkedTickets( %args, _top => 0 ); } - elsif ($link->BaseObj->Type eq $args{Type}) { - $args{_found}{$link->BaseObj->Id} = $link->BaseObj; + elsif ($obj->Type eq $args{Type}) { + $args{_found}{$obj->Id} = $obj; } else { - $link->BaseObj->AllDependedOnBy( %args, _top => 0 ); + $obj->_AllLinkedTickets( %args, _top => 0 ); } } @@ -1305,6 +1245,50 @@ sub _Links { # }}} +# {{{ sub FormatType + +=head2 FormatType + +Takes a Type and returns a string that is more human readable. + +=cut + +sub FormatType{ + my $self = shift; + my %args = ( Type => '', + @_ + ); + $args{Type} =~ s/([A-Z])/" " . lc $1/ge; + $args{Type} =~ s/^\s+//; + return $args{Type}; +} + + +# }}} + +# {{{ sub FormatLink + +=head2 FormatLink + +Takes either a Target or a Base and returns a string of human friendly text. + +=cut + +sub FormatLink { + my $self = shift; + my %args = ( Object => undef, + FallBack => '', + @_ + ); + my $text = "URI " . $args{FallBack}; + if ($args{Object} && $args{Object}->isa("RT::Ticket")) { + $text = "Ticket " . $args{Object}->id; + } + return $text; +} + +# }}} + # {{{ sub _AddLink =head2 _AddLink @@ -1316,7 +1300,6 @@ Returns C, C and C flag. =cut - sub _AddLink { my $self = shift; my %args = ( Target => '', @@ -1331,7 +1314,7 @@ sub _AddLink { my $direction; if ( $args{'Base'} and $args{'Target'} ) { - $RT::Logger->debug( "$self tried to create a link. both base and target were specified\n" ); + $RT::Logger->debug( "$self tried to create a link. both base and target were specified" ); return ( 0, $self->loc("Can't specifiy both base and target") ); } elsif ( $args{'Base'} ) { @@ -1373,10 +1356,14 @@ sub _AddLink { return ( 0, $self->loc("Link could not be created") ); } + my $basetext = $self->FormatLink(Object => $link->BaseObj, + FallBack => $args{Base}); + my $targettext = $self->FormatLink(Object => $link->TargetObj, + FallBack => $args{Target}); + my $typetext = $self->FormatType(Type => $args{Type}); my $TransString = - "Record $args{'Base'} $args{Type} record $args{'Target'}."; - - return ( $linkid, $self->loc( "Link created ([_1])", $TransString ) ); + "$basetext $typetext $targettext."; + return ( $linkid, $TransString ) ; } # }}} @@ -1407,7 +1394,7 @@ sub _DeleteLink { my $remote_link; if ( $args{'Base'} and $args{'Target'} ) { - $RT::Logger->debug("$self ->_DeleteLink. got both Base and Target\n"); + $RT::Logger->debug("$self ->_DeleteLink. got both Base and Target"); return ( 0, $self->loc("Can't specifiy both base and target") ); } elsif ( $args{'Base'} ) { @@ -1421,28 +1408,32 @@ sub _DeleteLink { $direction='Base'; } else { - $RT::Logger->error("Base or Target must be specified\n"); + $RT::Logger->error("Base or Target must be specified"); return ( 0, $self->loc('Either base or target must be specified') ); } my $link = new RT::Link( $self->CurrentUser ); - $RT::Logger->debug( "Trying to load link: " . $args{'Base'} . " " . $args{'Type'} . " " . $args{'Target'} . "\n" ); + $RT::Logger->debug( "Trying to load link: " . $args{'Base'} . " " . $args{'Type'} . " " . $args{'Target'} ); $link->LoadByParams( Base=> $args{'Base'}, Type=> $args{'Type'}, Target=> $args{'Target'} ); #it's a real link. - if ( $link->id ) { + if ( $link->id ) { + my $basetext = $self->FormatLink(Object => $link->BaseObj, + FallBack => $args{Base}); + my $targettext = $self->FormatLink(Object => $link->TargetObj, + FallBack => $args{Target}); + my $typetext = $self->FormatType(Type => $args{Type}); my $linkid = $link->id; $link->Delete(); - - my $TransString = "Record $args{'Base'} no longer $args{Type} record $args{'Target'}."; - return ( 1, $self->loc("Link deleted ([_1])", $TransString)); + my $TransString = "$basetext no longer $typetext $targettext."; + return ( 1, $TransString); } #if it's not a link we can find else { - $RT::Logger->debug("Couldn't find that link\n"); + $RT::Logger->debug("Couldn't find that link"); return ( 0, $self->loc("Link not found") ); } } @@ -1521,7 +1512,7 @@ sub _NewTransaction { if ( defined $args{'TimeTaken'} and $self->can('_UpdateTimeTaken')) { $self->_UpdateTimeTaken( $args{'TimeTaken'} ); } - if ( $RT::UseTransactionBatch and $transaction ) { + if ( RT->Config->Get('UseTransactionBatch') and $transaction ) { push @{$self->{_TransactionBatch}}, $trans if $args{'CommitScrips'}; } return ( $transaction, $msg, $trans ); @@ -1564,11 +1555,13 @@ sub Transactions { sub CustomFields { my $self = shift; my $cfs = RT::CustomFields->new( $self->CurrentUser ); - + + $cfs->SetContextObject( $self ); # XXX handle multiple types properly $cfs->LimitToLookupType( $self->CustomFieldLookupType ); $cfs->LimitToGlobalOrObjectId( - $self->_LookupId( $self->CustomFieldLookupType ) ); + $self->_LookupId( $self->CustomFieldLookupType ) + ); return $cfs; } @@ -1601,27 +1594,18 @@ sub CustomFieldLookupType { return ref($self); } -#TODO Deprecated API. Destroy in 3.6 -sub _LookupTypes { - my $self = shift; - $RT::Logger->warning("_LookupTypes call is deprecated at (". join(":",caller)."). Replace with CustomFieldLookupType"); - - return($self->CustomFieldLookupType); - -} - # {{{ AddCustomFieldValue =head2 AddCustomFieldValue { Field => FIELD, Value => VALUE } -VALUE should be a string. -FIELD can be a CustomField object OR a CustomField ID. - +VALUE should be a string. FIELD can be any identifier of a CustomField +supported by L method. -Adds VALUE as a value of CustomField FIELD. If this is a single-value custom field, -deletes the old value. +Adds VALUE as a value of CustomField FIELD. If this is a single-value custom field, +deletes the old value. If VALUE is not a valid value for the custom field, returns -(0, 'Error message' ) otherwise, returns (1, 'Success Message') +(0, 'Error message' ) otherwise, returns ($id, 'Success Message') where +$id is ID of created L object. =cut @@ -1635,12 +1619,13 @@ sub _AddCustomFieldValue { my %args = ( Field => undef, Value => undef, + LargeContent => undef, + ContentType => undef, RecordTransaction => 1, @_ ); my $cf = $self->LoadCustomFieldByIdentifier($args{'Field'}); - unless ( $cf->Id ) { return ( 0, $self->loc( "Custom field [_1] not found", $args{'Field'} ) ); } @@ -1656,8 +1641,11 @@ sub _AddCustomFieldValue { ) ); } - # Load up a ObjectCustomFieldValues object for this custom field and this ticket - my $values = $cf->ValuesForObject($self); + + # empty string is not correct value of any CF, so undef it + foreach ( qw(Value LargeContent) ) { + $args{ $_ } = undef if defined $args{ $_ } && !length $args{ $_ }; + } unless ( $cf->ValidateValue( $args{'Value'} ) ) { return ( 0, $self->loc("Invalid value for custom field") ); @@ -1665,11 +1653,14 @@ sub _AddCustomFieldValue { # If the custom field only accepts a certain # of values, delete the existing # value and record a "changed from foo to bar" transaction - unless ( $cf->UnlimitedValues) { + unless ( $cf->UnlimitedValues ) { - # We need to whack any old values here. In most cases, the custom field should - # only have one value to delete. In the pathalogical case, this custom field - # used to be a multiple and we have many values to whack.... + # Load up a ObjectCustomFieldValues object for this custom field and this ticket + my $values = $cf->ValuesForObject($self); + + # We need to whack any old values here. In most cases, the custom field should + # only have one value to delete. In the pathalogical case, this custom field + # used to be a multiple and we have many values to whack.... my $cf_values = $values->Count; if ( $cf_values > $cf->MaxValues ) { @@ -1698,8 +1689,27 @@ sub _AddCustomFieldValue { my ( $old_value, $old_content ); if ( $old_value = $values->First ) { - $old_content = $old_value->Content(); - return (1) if( $old_content eq $args{'Value'} && $old_value->LargeContent eq $args{'LargeContent'});; + $old_content = $old_value->Content; + $old_content = undef if defined $old_content && !length $old_content; + + my $is_the_same = 1; + if ( defined $args{'Value'} ) { + $is_the_same = 0 unless defined $old_content + && lc $old_content eq lc $args{'Value'}; + } else { + $is_the_same = 0 if defined $old_content; + } + if ( $is_the_same ) { + my $old_content = $old_value->LargeContent; + if ( defined $args{'LargeContent'} ) { + $is_the_same = 0 unless defined $old_content + && $old_content eq $args{'LargeContent'}; + } else { + $is_the_same = 0 if defined $old_content; + } + } + + return $old_value->id if $is_the_same; } my ( $new_value_id, $value_msg ) = $cf->AddValueForObject( @@ -1709,19 +1719,17 @@ sub _AddCustomFieldValue { ContentType => $args{'ContentType'}, ); - unless ($new_value_id) { - return ( 0, $self->loc( "Could not add new custom field value: [_1]", $value_msg) ); + unless ( $new_value_id ) { + return ( 0, $self->loc( "Could not add new custom field value: [_1]", $value_msg ) ); } my $new_value = RT::ObjectCustomFieldValue->new( $self->CurrentUser ); - $new_value->Load($new_value_id); + $new_value->Load( $new_value_id ); # now that adding the new value was successful, delete the old one - if ($old_value) { + if ( $old_value ) { my ( $val, $msg ) = $old_value->Delete(); - unless ($val) { - return ( 0, $msg ); - } + return ( 0, $msg ) unless $val; } if ( $args{'RecordTransaction'} ) { @@ -1734,47 +1742,45 @@ sub _AddCustomFieldValue { ); } - if ( $old_value eq '' ) { - return ( 1, $self->loc( "[_1] [_2] added", $cf->Name, $new_value->Content )); + my $new_content = $new_value->Content; + unless ( defined $old_content && length $old_content ) { + return ( $new_value_id, $self->loc( "[_1] [_2] added", $cf->Name, $new_content )); } - elsif ( $new_value->Content eq '' ) { - return ( 1, - $self->loc( "[_1] [_2] deleted", $cf->Name, $old_value->Content ) ); + elsif ( !defined $new_content || !length $new_content ) { + return ( $new_value_id, + $self->loc( "[_1] [_2] deleted", $cf->Name, $old_content ) ); } else { - return ( 1, $self->loc( "[_1] [_2] changed to [_3]", $cf->Name, $old_content, $new_value->Content)); + return ( $new_value_id, $self->loc( "[_1] [_2] changed to [_3]", $cf->Name, $old_content, $new_content)); } } # otherwise, just add a new value and record "new value added" else { - my ($new_value_id, $value_msg) = $cf->AddValueForObject( + my ($new_value_id, $msg) = $cf->AddValueForObject( Object => $self, Content => $args{'Value'}, LargeContent => $args{'LargeContent'}, ContentType => $args{'ContentType'}, ); - unless ($new_value_id) { - return ( 0, $self->loc( "Could not add new custom field value: [_1]", $value_msg) ); + unless ( $new_value_id ) { + return ( 0, $self->loc( "Could not add new custom field value: [_1]", $msg ) ); } if ( $args{'RecordTransaction'} ) { - my ( $TransactionId, $Msg, $TransactionObj ) = - $self->_NewTransaction( + my ( $tid, $msg ) = $self->_NewTransaction( Type => 'CustomField', Field => $cf->Id, NewReference => $new_value_id, ReferenceType => 'RT::ObjectCustomFieldValue', - ); - unless ($TransactionId) { - return ( 0, - $self->loc( "Couldn't create a transaction: [_1]", $Msg ) ); + ); + unless ( $tid ) { + return ( 0, $self->loc( "Couldn't create a transaction: [_1]", $msg ) ); } } - return ( 1, $self->loc( "[_1] added as a value for [_2]", $args{'Value'}, $cf->Name)); + return ( $new_value_id, $self->loc( "[_1] added as a value for [_2]", $args{'Value'}, $cf->Name ) ); } - } # }}} @@ -1802,10 +1808,10 @@ sub DeleteCustomFieldValue { ); my $cf = $self->LoadCustomFieldByIdentifier($args{'Field'}); - unless ( $cf->Id ) { return ( 0, $self->loc( "Custom field [_1] not found", $args{'Field'} ) ); } + my ( $val, $msg ) = $cf->DeleteValueForObject( Object => $self, Id => $args{'ValueId'}, @@ -1814,6 +1820,7 @@ sub DeleteCustomFieldValue { unless ($val) { return ( 0, $msg ); } + my ( $TransactionId, $Msg, $TransactionObj ) = $self->_NewTransaction( Type => 'CustomField', Field => $cf->Id, @@ -1847,15 +1854,34 @@ Takes a field id or name sub FirstCustomFieldValue { my $self = shift; my $field = shift; - my $values = $self->CustomFieldValues($field); - if ($values->First) { - return $values->First->Content; - } else { - return undef; - } + my $values = $self->CustomFieldValues( $field ); + return undef unless my $first = $values->First; + return $first->Content; } +=head2 CustomFieldValuesAsString FIELD + +Return the content of the CustomField FIELD for this ticket. +If this is a multi-value custom field, values will be joined with newlines. + +Takes a field id or name as the first argument + +Takes an optional Separator => "," second and third argument +if you want to join the values using something other than a newline + +=cut + +sub CustomFieldValuesAsString { + my $self = shift; + my $field = shift; + my %args = @_; + my $separator = $args{Separator} || "\n"; + + my $values = $self->CustomFieldValues( $field ); + return join ($separator, grep { defined $_ } + map { $_->Content } @{$values->ItemsArrayRef}); +} # {{{ CustomFieldValues @@ -1873,11 +1899,12 @@ sub CustomFieldValues { my $self = shift; my $field = shift; - if ($field) { - my $cf = $self->LoadCustomFieldByIdentifier($field); + if ( $field ) { + my $cf = $self->LoadCustomFieldByIdentifier( $field ); - # we were asked to search on a custom field we couldn't fine + # we were asked to search on a custom field we couldn't find unless ( $cf->id ) { + $RT::Logger->warning("Couldn't load custom field by '$field' identifier"); return RT::ObjectCustomFieldValues->new( $self->CurrentUser ); } return ( $cf->ValuesForObject($self) ); @@ -1885,12 +1912,11 @@ sub CustomFieldValues { # we're not limiting to a specific custom field; my $ocfs = RT::ObjectCustomFieldValues->new( $self->CurrentUser ); - $ocfs->LimitToObject($self); + $ocfs->LimitToObject( $self ); return $ocfs; - } -=head2 CustomField IDENTIFER +=head2 LoadCustomFieldByIdentifier IDENTIFER Find the custom field has id or name IDENTIFIER for this object. @@ -1902,35 +1928,32 @@ sub LoadCustomFieldByIdentifier { my $self = shift; my $field = shift; - my $cf = RT::CustomField->new($self->CurrentUser); - + my $cf; if ( UNIVERSAL::isa( $field, "RT::CustomField" ) ) { + $cf = RT::CustomField->new($self->CurrentUser); + $cf->SetContextObject( $self ); $cf->LoadById( $field->id ); } elsif ($field =~ /^\d+$/) { $cf = RT::CustomField->new($self->CurrentUser); - $cf->Load($field); + $cf->SetContextObject( $self ); + $cf->LoadById($field); } else { my $cfs = $self->CustomFields($self->CurrentUser); + $cfs->SetContextObject( $self ); $cfs->Limit(FIELD => 'Name', VALUE => $field, CASESENSITIVE => 0); $cf = $cfs->First || RT::CustomField->new($self->CurrentUser); } return $cf; } +sub ACLEquivalenceObjects { } -# }}} - -# }}} - -# }}} - -sub BasicColumns { -} +sub BasicColumns { } sub WikiBase { - return $RT::WebPath. "/index.html?q="; + return RT->Config->Get('WebPath'). "/index.html?q="; } eval "require RT::Record_Vendor"; diff --git a/rt/lib/RT/SearchBuilder.pm b/rt/lib/RT/SearchBuilder.pm index fd0842419..527952b67 100644 --- a/rt/lib/RT/SearchBuilder.pm +++ b/rt/lib/RT/SearchBuilder.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + =head1 NAME RT::SearchBuilder - a baseclass for RT collection objects @@ -57,11 +58,6 @@ =head1 METHODS -=begin testing - -ok (require RT::SearchBuilder); - -=end testing =cut @@ -72,10 +68,10 @@ use RT::Base; use DBIx::SearchBuilder "1.50"; use strict; -use vars qw(@ISA); -@ISA = qw(DBIx::SearchBuilder RT::Base); +use warnings; + +use base qw(DBIx::SearchBuilder RT::Base); -# {{{ sub _Init sub _Init { my $self = shift; @@ -88,13 +84,10 @@ sub _Init { } $self->SUPER::_Init( 'Handle' => $RT::Handle); } -# }}} - -# {{{ sub LimitToEnabled =head2 LimitToEnabled -Only find items that haven\'t been disabled +Only find items that haven't been disabled =cut @@ -105,9 +98,6 @@ sub LimitToEnabled { VALUE => '0', OPERATOR => '=' ); } -# }}} - -# {{{ sub LimitToDisabled =head2 LimitToDeleted @@ -124,9 +114,6 @@ sub LimitToDeleted { VALUE => '1' ); } -# }}} - -# {{{ sub LimitAttribute =head2 LimitAttribute PARAMHASH @@ -140,17 +127,17 @@ If NULL is set, also select rows without the named Attribute. =cut -my %Negate = qw( - = != - != = - > <= - < >= - >= < - <= > - LIKE NOT LIKE - NOT LIKE LIKE - IS IS NOT - IS NOT IS +my %Negate = ( + '=' => '!=', + '!=' => '=', + '>' => '<=', + '<' => '>=', + '>=' => '<', + '<=' => '>', + 'LIKE' => 'NOT LIKE', + 'NOT LIKE' => 'LIKE', + 'IS' => 'IS NOT', + 'IS NOT' => 'IS', ); sub LimitAttribute { @@ -217,9 +204,6 @@ sub LimitAttribute { VALUE => 'NULL', ) if $args{NULL}; } -# }}} - -# {{{ sub LimitCustomField =head2 LimitCustomField @@ -278,8 +262,6 @@ sub LimitCustomField { ); } -# {{{ sub FindAllRows - =head2 FindAllRows Find all matching rows, regardless of whether they are disabled or not @@ -290,8 +272,6 @@ sub FindAllRows { shift->{'find_disabled_rows'} = 1; } -# {{{ sub Limit - =head2 Limit PARAMHASH This Limit sub calls SUPER::Limit, but defaults "CASESENSITIVE" to 1, thus @@ -308,10 +288,6 @@ sub Limit { return $self->SUPER::Limit(%args); } -# }}} - -# {{{ sub ItemsOrderBy - =head2 ItemsOrderBy If it has a SortOrder attribute, sort the array by SortOrder. @@ -335,55 +311,21 @@ sub ItemsOrderBy { return $items; } -# }}} - -# {{{ sub ItemsArrayRef - =head2 ItemsArrayRef Return this object's ItemsArray, in the order that ItemsOrderBy sorts it. -=begin testing - -use_ok(RT::Queues); -ok(my $queues = RT::Queues->new($RT::SystemUser), 'Created a queues object'); -ok( $queues->UnLimit(),'Unlimited the result set of the queues object'); -my $items = $queues->ItemsArrayRef(); -my @items = @{$items}; - -ok($queues->NewItem->_Accessible('Name','read')); -my @sorted = sort {lc($a->Name) cmp lc($b->Name)} @items; -ok (@sorted, "We have an array of queues, sorted". join(',',map {$_->Name} @sorted)); - -ok (@items, "We have an array of queues, raw". join(',',map {$_->Name} @items)); -my @sorted_ids = map {$_->id } @sorted; -my @items_ids = map {$_->id } @items; - -is ($#sorted, $#items); -is ($sorted[0]->Name, $items[0]->Name); -is ($sorted[-1]->Name, $items[-1]->Name); -is_deeply(\@items_ids, \@sorted_ids, "ItemsArrayRef sorts alphabetically by name");; - - -=end testing - =cut sub ItemsArrayRef { my $self = shift; - my @items; - return $self->ItemsOrderBy($self->SUPER::ItemsArrayRef()); } -# }}} - eval "require RT::SearchBuilder_Vendor"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/SearchBuilder_Vendor.pm}); eval "require RT::SearchBuilder_Local"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/SearchBuilder_Local.pm}); 1; - - diff --git a/rt/lib/RT/Ticket_Overlay.pm b/rt/lib/RT/Ticket_Overlay.pm index 20f54625f..155ecf258 100644 --- a/rt/lib/RT/Ticket_Overlay.pm +++ b/rt/lib/RT/Ticket_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + # {{{ Front Material =head1 SYNOPSIS @@ -60,82 +61,6 @@ This module lets you manipulate RT\'s ticket object. =head1 METHODS -=begin testing - -use_ok ( RT::Queue); -ok(my $testqueue = RT::Queue->new($RT::SystemUser)); -ok($testqueue->Create( Name => 'ticket tests')); -ok($testqueue->Id != 0); -use_ok(RT::CustomField); -ok(my $testcf = RT::CustomField->new($RT::SystemUser)); -my ($ret, $cmsg) = $testcf->Create( Name => 'selectmulti', - Queue => $testqueue->id, - Type => 'SelectMultiple'); -ok($ret,"Created the custom field - ".$cmsg); -($ret,$cmsg) = $testcf->AddValue ( Name => 'Value1', - SortOrder => '1', - Description => 'A testing value'); - -ok($ret, "Added a value - ".$cmsg); - -ok($testcf->AddValue ( Name => 'Value2', - SortOrder => '2', - Description => 'Another testing value')); -ok($testcf->AddValue ( Name => 'Value3', - SortOrder => '3', - Description => 'Yet Another testing value')); - -ok($testcf->Values->Count == 3); - -use_ok(RT::Ticket); - -my $u = RT::User->new($RT::SystemUser); -$u->Load("root"); -ok ($u->Id, "Found the root user"); -ok(my $t = RT::Ticket->new($RT::SystemUser)); -ok(my ($id, $msg) = $t->Create( Queue => $testqueue->Id, - Subject => 'Testing', - Owner => $u->Id - )); -ok($id != 0); -ok ($t->OwnerObj->Id == $u->Id, "Root is the ticket owner"); -ok(my ($cfv, $cfm) =$t->AddCustomFieldValue(Field => $testcf->Id, - Value => 'Value1')); -ok($cfv != 0, "Custom field creation didn't return an error: $cfm"); -ok($t->CustomFieldValues($testcf->Id)->Count == 1); -ok($t->CustomFieldValues($testcf->Id)->First && - $t->CustomFieldValues($testcf->Id)->First->Content eq 'Value1');; - -ok(my ($cfdv, $cfdm) = $t->DeleteCustomFieldValue(Field => $testcf->Id, - Value => 'Value1')); -ok ($cfdv != 0, "Deleted a custom field value: $cfdm"); -ok($t->CustomFieldValues($testcf->Id)->Count == 0); - -ok(my $t2 = RT::Ticket->new($RT::SystemUser)); -ok($t2->Load($id)); -is($t2->Subject, 'Testing'); -is($t2->QueueObj->Id, $testqueue->id); -ok($t2->OwnerObj->Id == $u->Id); - -my $t3 = RT::Ticket->new($RT::SystemUser); -my ($id3, $msg3) = $t3->Create( Queue => $testqueue->Id, - Subject => 'Testing', - Owner => $u->Id); -my ($cfv1, $cfm1) = $t->AddCustomFieldValue(Field => $testcf->Id, - Value => 'Value1'); -ok($cfv1 != 0, "Adding a custom field to ticket 1 is successful: $cfm"); -my ($cfv2, $cfm2) = $t3->AddCustomFieldValue(Field => $testcf->Id, - Value => 'Value2'); -ok($cfv2 != 0, "Adding a custom field to ticket 2 is successful: $cfm"); -my ($cfv3, $cfm3) = $t->AddCustomFieldValue(Field => $testcf->Id, - Value => 'Value3'); -ok($cfv3 != 0, "Adding a custom field to ticket 1 is successful: $cfm"); -ok($t->CustomFieldValues($testcf->Id)->Count == 2, - "This ticket has 2 custom field values"); -ok($t3->CustomFieldValues($testcf->Id)->Count == 1, - "This ticket has 1 custom field value"); - -=end testing =cut @@ -158,32 +83,20 @@ use RT::URI::fsck_com_rt; use RT::URI; use MIME::Entity; -=begin testing - - -ok(require RT::Ticket, "Loading the RT::Ticket library"); - -=end testing - -=cut - -# }}} # {{{ LINKTYPEMAP # A helper table for links mapping to make it easier # to build and parse links between tickets -use vars '%LINKTYPEMAP'; - -%LINKTYPEMAP = ( +our %LINKTYPEMAP = ( MemberOf => { Type => 'MemberOf', Mode => 'Target', }, Parents => { Type => 'MemberOf', - Mode => 'Target', }, + Mode => 'Target', }, Members => { Type => 'MemberOf', Mode => 'Base', }, Children => { Type => 'MemberOf', - Mode => 'Base', }, + Mode => 'Base', }, HasMember => { Type => 'MemberOf', Mode => 'Base', }, RefersTo => { Type => 'RefersTo', @@ -205,9 +118,7 @@ use vars '%LINKTYPEMAP'; # A helper table for links mapping to make it easier # to build and parse links between tickets -use vars '%LINKDIRMAP'; - -%LINKDIRMAP = ( +our %LINKDIRMAP = ( MemberOf => { Base => 'MemberOf', Target => 'HasMember', }, RefersTo => { Base => 'RefersTo', @@ -241,9 +152,10 @@ sub Load { #TODO modify this routine to look at EffectiveId and do the recursive load # thing. be careful to cache all the interim tickets we try so we don't loop forever. - + # FIXME: there is no TicketBaseURI option in config + my $base_uri = RT->Config->Get('TicketBaseURI') || ''; #If it's a local URI, turn it into a ticket id - if ( $RT::TicketBaseURI && $id =~ /^$RT::TicketBaseURI(\d+)$/ ) { + if ( $base_uri && defined $id && $id =~ /^$base_uri(\d+)$/ ) { $id = $1; } @@ -253,18 +165,18 @@ sub Load { } #If we have an integer URI, load the ticket - if ( $id =~ /^\d+$/ ) { + if ( defined $id && $id =~ /^\d+$/ ) { my ($ticketid,$msg) = $self->LoadById($id); unless ($self->Id) { - $RT::Logger->crit("$self tried to load a bogus ticket: $id\n"); + $RT::Logger->debug("$self tried to load a bogus ticket: $id"); return (undef); } } #It's not a URI. It's not a numerical ticket ID. Punt! else { - $RT::Logger->warning("Tried to load a bogus ticket id: '$id'"); + $RT::Logger->debug("Tried to load a bogus ticket id: '$id'"); return (undef); } @@ -281,29 +193,6 @@ sub Load { # }}} -# {{{ sub LoadByURI - -=head2 LoadByURI - -Given a local ticket URI, loads the specified ticket. - -=cut - -sub LoadByURI { - my $self = shift; - my $uri = shift; - - if ( $uri =~ /^$RT::TicketBaseURI(\d+)$/ ) { - my $id = $1; - return ( $self->Load($id) ); - } - else { - return (undef); - } -} - -# }}} - # {{{ sub Create =head2 Create (ARGS) @@ -315,6 +204,8 @@ Arguments: ARGS is a hash of named parameters. Valid parameters are: Requestor - A reference to a list of email addresses or RT user Names Cc - A reference to a list of email addresses or Names AdminCc - A reference to a list of email addresses or Names + SquelchMailTo - A reference to a list of email addresses - + who should this ticket not mail Type -- The ticket\'s type. ignore this for now Owner -- This ticket\'s owner. either an RT::User object or this user\'s id Subject -- A string describing the subject of the ticket @@ -344,18 +235,6 @@ C and C are aliases for C. Returns: TICKETID, Transaction Object, Error Message -=begin testing - -my $t = RT::Ticket->new($RT::SystemUser); - -ok( $t->Create(Queue => 'General', Due => '2002-05-21 00:00:00', ReferredToBy => 'http://www.cpan.org', RefersTo => 'http://fsck.com', Subject => 'This is a subject'), "Ticket Created"); - -ok ( my $id = $t->Id, "Got ticket id"); -ok ($t->RefersTo->First->Target =~ /fsck.com/, "Got refers to"); -ok ($t->ReferredToBy->First->Base =~ /cpan.org/, "Got referredtoby"); -ok ($t->ResolvedObj->Unix == -1, "It hasn't been resolved - ". $t->ResolvedObj->Unix); - -=end testing =cut @@ -369,6 +248,7 @@ sub Create { Requestor => undef, Cc => undef, AdminCc => undef, + SquelchMailTo => undef, Type => 'ticket', Owner => undef, Subject => '', @@ -385,30 +265,30 @@ sub Create { Resolved => undef, MIMEObj => undef, _RecordTransaction => 1, + DryRun => 0, @_ ); - my ( $ErrStr, $Owner, $resolved ); - my (@non_fatal_errors); - - my $QueueObj = RT::Queue->new($RT::SystemUser); + my ($ErrStr, @non_fatal_errors); - if ( ( defined( $args{'Queue'} ) ) && ( !ref( $args{'Queue'} ) ) ) { - $QueueObj->Load( $args{'Queue'} ); - } - elsif ( ref( $args{'Queue'} ) eq 'RT::Queue' ) { + my $QueueObj = RT::Queue->new( $RT::SystemUser ); + if ( ref $args{'Queue'} eq 'RT::Queue' ) { $QueueObj->Load( $args{'Queue'}->Id ); } + elsif ( $args{'Queue'} ) { + $QueueObj->Load( $args{'Queue'} ); + } else { - $RT::Logger->debug( $args{'Queue'} . " not a recognised queue object." ); + $RT::Logger->debug("'". ( $args{'Queue'} ||''). "' not a recognised queue object." ); } #Can't create a ticket without a queue. - unless ( defined($QueueObj) && $QueueObj->Id ) { + unless ( $QueueObj->Id ) { $RT::Logger->debug("$self No queue given for ticket creation."); return ( 0, 0, $self->loc('Could not create ticket. Queue not set') ); } + #Now that we have a queue, Check the ACLS unless ( $self->CurrentUser->HasRight( @@ -427,21 +307,21 @@ sub Create { } #Since we have a queue, we can set queue defaults - #Initial Priority + #Initial Priority # If there's no queue default initial priority and it's not set, set it to 0 - $args{'InitialPriority'} = ( $QueueObj->InitialPriority || 0 ) - unless ( $args{'InitialPriority'} ); + $args{'InitialPriority'} = $QueueObj->InitialPriority || 0 + unless defined $args{'InitialPriority'}; #Final priority - # If there's no queue default final priority and it's not set, set it to 0 - $args{'FinalPriority'} = ( $QueueObj->FinalPriority || 0 ) - unless ( $args{'FinalPriority'} ); + $args{'FinalPriority'} = $QueueObj->FinalPriority || 0 + unless defined $args{'FinalPriority'}; # Priority may have changed from InitialPriority, for the case # where we're importing tickets (eg, from an older RT version.) - my $priority = $args{'Priority'} || $args{'InitialPriority'}; + $args{'Priority'} = $args{'InitialPriority'} + unless defined $args{'Priority'}; # {{{ Dates #TODO we should see what sort of due date we're getting, rather + @@ -449,8 +329,7 @@ sub Create { #Set the due date. if we didn't get fed one, use the queue default due in my $Due = new RT::Date( $self->CurrentUser ); - - if ( $args{'Due'} ) { + if ( defined $args{'Due'} ) { $Due->Set( Format => 'ISO', Value => $args{'Due'} ); } elsif ( my $due_in = $QueueObj->DefaultDueIn ) { @@ -467,6 +346,9 @@ sub Create { if ( defined $args{'Started'} ) { $Started->Set( Format => 'ISO', Value => $args{'Started'} ); } + elsif ( $args{'Status'} ne 'new' ) { + $Started->SetToNow; + } my $Resolved = new RT::Date( $self->CurrentUser ); if ( defined $args{'Resolved'} ) { @@ -474,10 +356,10 @@ sub Create { } #If the status is an inactive status, set the resolved date - if ( $QueueObj->IsInactiveStatus( $args{'Status'} ) && !$args{'Resolved'} ) + elsif ( $QueueObj->IsInactiveStatus( $args{'Status'} ) ) { $RT::Logger->debug( "Got a ". $args{'Status'} - ." ticket with undefined resolved date. Setting to now." + ."(inactive) ticket with undefined resolved date. Setting to now." ); $Resolved->SetToNow; } @@ -494,51 +376,42 @@ sub Create { # {{{ Deal with setting the owner + my $Owner; if ( ref( $args{'Owner'} ) eq 'RT::User' ) { - $Owner = $args{'Owner'}; + if ( $args{'Owner'}->id ) { + $Owner = $args{'Owner'}; + } else { + $RT::Logger->error('passed not loaded owner object'); + push @non_fatal_errors, $self->loc("Invalid owner object"); + $Owner = undef; + } } #If we've been handed something else, try to load the user. elsif ( $args{'Owner'} ) { $Owner = RT::User->new( $self->CurrentUser ); $Owner->Load( $args{'Owner'} ); - - push( @non_fatal_errors, + $Owner->LoadByEmail( $args{'Owner'} ) + unless $Owner->Id; + unless ( $Owner->Id ) { + push @non_fatal_errors, $self->loc("Owner could not be set.") . " " - . $self->loc( "User '[_1]' could not be found.", $args{'Owner'} ) - ) - unless ( $Owner->Id ); + . $self->loc( "User '[_1]' could not be found.", $args{'Owner'} ); + $Owner = undef; + } } #If we have a proposed owner and they don't have the right #to own a ticket, scream about it and make them not the owner - if ( - ( defined($Owner) ) - and ( $Owner->Id ) - and ( $Owner->Id != $RT::Nobody->Id ) - and ( - !$Owner->HasRight( - Object => $QueueObj, - Right => 'OwnTicket' - ) - ) - ) + + my $DeferOwner; + if ( $Owner && $Owner->Id != $RT::Nobody->Id + && !$Owner->HasRight( Object => $QueueObj, Right => 'OwnTicket' ) ) { - - $RT::Logger->warning( "User " - . $Owner->Name . "(" - . $Owner->id - . ") was proposed " - . "as a ticket owner but has no rights to own " - . "tickets in " - . $QueueObj->Name ); - - push @non_fatal_errors, - $self->loc( "Owner '[_1]' does not have rights to own this ticket.", - $Owner->Name - ); - + $DeferOwner = $Owner; $Owner = undef; + $RT::Logger->debug('going to deffer setting owner'); + } #If we haven't been handed a valid owner, make it nobody. @@ -552,13 +425,24 @@ sub Create { # We attempt to load or create each of the people who might have a role for this ticket # _outside_ the transaction, so we don't get into ticket creation races foreach my $type ( "Cc", "AdminCc", "Requestor" ) { - next unless ( defined $args{$type} ); - foreach my $watcher ( - ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) - { - my $user = RT::User->new($RT::SystemUser); - $user->LoadOrCreateByEmail($watcher) - if ( $watcher && $watcher !~ /^\d+$/ ); + $args{ $type } = [ $args{ $type } ] unless ref $args{ $type }; + foreach my $watcher ( splice @{ $args{$type} } ) { + next unless $watcher; + if ( $watcher =~ /^\d+$/ ) { + push @{ $args{$type} }, $watcher; + } else { + my @addresses = RT::EmailParser->ParseEmailAddress( $watcher ); + foreach my $address( @addresses ) { + my $user = RT::User->new( $RT::SystemUser ); + my ($uid, $msg) = $user->LoadOrCreateByEmail( $address ); + unless ( $uid ) { + push @non_fatal_errors, + $self->loc("Couldn't load or create user: [_1]", $msg); + } else { + push @{ $args{$type} }, $user->id; + } + } + } } } @@ -570,7 +454,7 @@ sub Create { Subject => $args{'Subject'}, InitialPriority => $args{'InitialPriority'}, FinalPriority => $args{'FinalPriority'}, - Priority => $priority, + Priority => $args{'Priority'}, Status => $args{'Status'}, TimeWorked => $args{'TimeWorked'}, TimeEstimated => $args{'TimeEstimated'}, @@ -584,20 +468,21 @@ sub Create { # Parameters passed in during an import that we probably don't want to touch, otherwise foreach my $attr qw(id Creator Created LastUpdated LastUpdatedBy) { - $params{$attr} = $args{$attr} if ( $args{$attr} ); + $params{$attr} = $args{$attr} if $args{$attr}; } # Delete null integer parameters foreach my $attr - qw(TimeWorked TimeLeft TimeEstimated InitialPriority FinalPriority) { + qw(TimeWorked TimeLeft TimeEstimated InitialPriority FinalPriority) + { delete $params{$attr} unless ( exists $params{$attr} && $params{$attr} ); } # Delete the time worked if we're counting it in the transaction - delete $params{TimeWorked} if $args{'_RecordTransaction'}; - - my ($id,$ticket_message) = $self->SUPER::Create( %params); + delete $params{'TimeWorked'} if $args{'_RecordTransaction'}; + + my ($id,$ticket_message) = $self->SUPER::Create( %params ); unless ($id) { $RT::Logger->crit( "Couldn't create a ticket: " . $ticket_message ); $RT::Handle->Rollback(); @@ -611,10 +496,9 @@ sub Create { Field => 'EffectiveId', Value => ( $args{'EffectiveId'} || $id ) ); - - unless ($val) { - $RT::Logger->crit("$self ->Create couldn't set EffectiveId: $msg\n"); - $RT::Handle->Rollback(); + unless ( $val ) { + $RT::Logger->crit("Couldn't set EffectiveId: $msg"); + $RT::Handle->Rollback; return ( 0, 0, $self->loc("Ticket could not be created due to an internal error") ); @@ -631,60 +515,86 @@ sub Create { ); } -# Set the owner in the Groups table -# We denormalize it into the Ticket table too because doing otherwise would -# kill performance, bigtime. It gets kept in lockstep thanks to the magic of transactionalization - + # Set the owner in the Groups table + # We denormalize it into the Ticket table too because doing otherwise would + # kill performance, bigtime. It gets kept in lockstep thanks to the magic of transactionalization $self->OwnerGroup->_AddMember( PrincipalId => $Owner->PrincipalId, InsideTransaction => 1 - ); + ) unless $DeferOwner; + + # {{{ Deal with setting up watchers foreach my $type ( "Cc", "AdminCc", "Requestor" ) { - next unless ( defined $args{$type} ); - foreach my $watcher ( - ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) - { + # we know it's an array ref + foreach my $watcher ( @{ $args{$type} } ) { + + # Note that we're using AddWatcher, rather than _AddWatcher, as we + # actually _want_ that ACL check. Otherwise, random ticket creators + # could make themselves adminccs and maybe get ticket rights. that would + # be poor + my $method = $type eq 'AdminCc'? 'AddWatcher': '_AddWatcher'; + + my ($val, $msg) = $self->$method( + Type => $type, + PrincipalId => $watcher, + Silent => 1, + ); + push @non_fatal_errors, $self->loc("Couldn't set [_1] watcher: [_2]", $type, $msg) + unless $val; + } + } - # If there is an empty entry in the list, let's get out of here. - next unless $watcher; + if ($args{'SquelchMailTo'}) { + my @squelch = ref( $args{'SquelchMailTo'} ) ? @{ $args{'SquelchMailTo'} } + : $args{'SquelchMailTo'}; + $self->_SquelchMailTo( @squelch ); + } - # we reason that all-digits number must be a principal id, not email - # this is the only way to can add - my $field = 'Email'; - $field = 'PrincipalId' if $watcher =~ /^\d+$/; - my ( $wval, $wmsg ); + # }}} - if ( $type eq 'AdminCc' ) { + # {{{ Add all the custom fields - # Note that we're using AddWatcher, rather than _AddWatcher, as we - # actually _want_ that ACL check. Otherwise, random ticket creators - # could make themselves adminccs and maybe get ticket rights. that would - # be poor - ( $wval, $wmsg ) = $self->AddWatcher( - Type => $type, - $field => $watcher, - Silent => 1 - ); - } - else { - ( $wval, $wmsg ) = $self->_AddWatcher( - Type => $type, - $field => $watcher, - Silent => 1 - ); - } + foreach my $arg ( keys %args ) { + next unless $arg =~ /^CustomField-(\d+)$/i; + my $cfid = $1; - push @non_fatal_errors, $wmsg unless ($wval); + foreach my $value ( + UNIVERSAL::isa( $args{$arg} => 'ARRAY' ) ? @{ $args{$arg} } : ( $args{$arg} ) ) + { + next unless defined $value && length $value; + + # Allow passing in uploaded LargeContent etc by hash reference + my ($status, $msg) = $self->_AddCustomFieldValue( + (UNIVERSAL::isa( $value => 'HASH' ) + ? %$value + : (Value => $value) + ), + Field => $cfid, + RecordTransaction => 0, + ); + push @non_fatal_errors, $msg unless $status; } } # }}} + # {{{ Deal with setting up links + # TODO: Adding link may fire scrips on other end and those scrips + # could create transactions on this ticket before 'Create' transaction. + # + # We should implement different schema: record 'Create' transaction, + # create links and only then fire create transaction's scrips. + # + # Ideal variant: add all links without firing scrips, record create + # transaction and only then fire scrips on the other ends of links. + # + # //RUZ + foreach my $type ( keys %LINKTYPEMAP ) { next unless ( defined $args{$type} ); foreach my $link ( @@ -692,7 +602,7 @@ sub Create { { # Check rights on the other end of the link if we must # then run _AddLink that doesn't check for ACLs - if ( $RT::StrictLinkACL ) { + if ( RT->Config->Get( 'StrictLinkACL' ) ) { my ($val, $msg, $obj) = $self->__GetTicketFromURI( URI => $link ); unless ( $val ) { push @non_fatal_errors, $msg; @@ -707,7 +617,9 @@ sub Create { my ( $wval, $wmsg ) = $self->_AddLink( Type => $LINKTYPEMAP{$type}->{'Type'}, $LINKTYPEMAP{$type}->{'Mode'} => $link, - Silent => 1 + Silent => !$args{'_RecordTransaction'}, + 'Silent'. ( $LINKTYPEMAP{$type}->{'Mode'} eq 'Base'? 'Target': 'Base' ) + => 1, ); push @non_fatal_errors, $wmsg unless ($wval); @@ -715,6 +627,21 @@ sub Create { } # }}} + # Now that we've created the ticket and set up its metadata, we can actually go and check OwnTicket on the ticket itself. + # This might be different than before in cases where extensions like RTIR are doing clever things with RT's ACL system + if ( $DeferOwner ) { + if (!$DeferOwner->HasRight( Object => $self, Right => 'OwnTicket')) { + + $RT::Logger->warning( "User " . $DeferOwner->Name . "(" . $DeferOwner->id + . ") was proposed as a ticket owner but has no rights to own " + . "tickets in " . $QueueObj->Name ); + push @non_fatal_errors, $self->loc( + "Owner '[_1]' does not have rights to own this ticket.", + $DeferOwner->Name + ); + } else { + $Owner = $DeferOwner; + $self->__Set(Field => 'Owner', Value => $Owner->id); # {{{ Deal with auto-customer association @@ -778,37 +705,21 @@ sub Create { # }}} - # {{{ Add all the custom fields - - foreach my $arg ( keys %args ) { - next unless ( $arg =~ /^CustomField-(\d+)$/i ); - my $cfid = $1; - foreach - my $value ( UNIVERSAL::isa( $args{$arg} => 'ARRAY' ) ? @{ $args{$arg} } : ( $args{$arg} ) ) - { - next unless ( length($value) ); - - # Allow passing in uploaded LargeContent etc by hash reference - $self->_AddCustomFieldValue( - (UNIVERSAL::isa( $value => 'HASH' ) - ? %$value - : (Value => $value) - ), - Field => $cfid, - RecordTransaction => 0, - ); } + $self->OwnerGroup->_AddMember( + PrincipalId => $Owner->PrincipalId, + InsideTransaction => 1 + ); } - # }}} - if ( $args{'_RecordTransaction'} ) { # {{{ Add a transaction for the create my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( - Type => "Create", - TimeTaken => $args{'TimeWorked'}, - MIMEObj => $args{'MIMEObj'} + Type => "Create", + TimeTaken => $args{'TimeWorked'}, + MIMEObj => $args{'MIMEObj'}, + CommitScrips => !$args{'DryRun'}, ); if ( $self->Id && $Trans ) { @@ -827,6 +738,10 @@ sub Create { return ( 0, 0, $self->loc( "Ticket could not be created due to an internal error")); } + if ( $args{'DryRun'} ) { + $RT::Handle->Rollback(); + return ($self->id, $TransObj, $ErrStr); + } $RT::Handle->Commit(); return ( $self->Id, $TransObj->Id, $ErrStr ); @@ -846,179 +761,6 @@ sub Create { # }}} - -# {{{ UpdateFrom822 - -=head2 UpdateFrom822 $MESSAGE - -Takes an RFC822 format message as a string and uses it to make a bunch of changes to a ticket. -Returns an um. ask me again when the code exists - - -=begin testing - -my $simple_update = <new($RT::SystemUser); -my ($id,$msg) =$ticket->Create(Subject => 'first', Queue => 'general'); -ok($ticket->Id, "Created the test ticket - ".$id ." - ".$msg); -$ticket->UpdateFrom822($simple_update); -is($ticket->Subject, 'target', "changed the subject"); -my $jesse = RT::User->new($RT::SystemUser); -$jesse->LoadByEmail('jesse@example.com'); -ok ($jesse->Id, "There's a user for jesse"); -ok($ticket->Requestors->HasMember( $jesse->PrincipalObj), "It has the jesse principal object as a requestor "); - -=end testing - - -=cut - -sub UpdateFrom822 { - my $self = shift; - my $content = shift; - my %args = $self->_Parse822HeadersForAttributes($content); - - - my %ticketargs = ( - Queue => $args{'queue'}, - Subject => $args{'subject'}, - Status => $args{'status'}, - Due => $args{'due'}, - Starts => $args{'starts'}, - Started => $args{'started'}, - Resolved => $args{'resolved'}, - Owner => $args{'owner'}, - Requestor => $args{'requestor'}, - Cc => $args{'cc'}, - AdminCc => $args{'admincc'}, - TimeWorked => $args{'timeworked'}, - TimeEstimated => $args{'timeestimated'}, - TimeLeft => $args{'timeleft'}, - InitialPriority => $args{'initialpriority'}, - Priority => $args{'priority'}, - FinalPriority => $args{'finalpriority'}, - Type => $args{'type'}, - DependsOn => $args{'dependson'}, - DependedOnBy => $args{'dependedonby'}, - RefersTo => $args{'refersto'}, - ReferredToBy => $args{'referredtoby'}, - Members => $args{'members'}, - MemberOf => $args{'memberof'}, - MIMEObj => $args{'mimeobj'} - ); - - foreach my $type qw(Requestor Cc Admincc) { - - foreach my $action ( 'Add', 'Del', '' ) { - - my $lctag = lc($action) . lc($type); - foreach my $list ( $args{$lctag}, $args{ $lctag . 's' } ) { - - foreach my $entry ( ref($list) ? @{$list} : ($list) ) { - push @{$ticketargs{ $action . $type }} , split ( /\s*,\s*/, $entry ); - } - - } - - # Todo: if we're given an explicit list, transmute it into a list of adds/deletes - - } - } - - # Add custom field entries to %ticketargs. - # TODO: allow named custom fields - map { - /^customfield-(\d+)$/ - && ( $ticketargs{ "CustomField-" . $1 } = $args{$_} ); - } keys(%args); - -# for each ticket we've been told to update, iterate through the set of -# rfc822 headers and perform that update to the ticket. - - - # {{{ Set basic fields - my @attribs = qw( - Subject - FinalPriority - Priority - TimeEstimated - TimeWorked - TimeLeft - Status - Queue - Type - ); - - - # Resolve the queue from a name to a numeric id. - if ( $ticketargs{'Queue'} and ( $ticketargs{'Queue'} !~ /^(\d+)$/ ) ) { - my $tempqueue = RT::Queue->new($RT::SystemUser); - $tempqueue->Load( $ticketargs{'Queue'} ); - $ticketargs{'Queue'} = $tempqueue->Id() if ( $tempqueue->id ); - } - - my @results; - - foreach my $attribute (@attribs) { - my $value = $ticketargs{$attribute}; - - if ( $value ne $self->$attribute() ) { - - my $method = "Set$attribute"; - my ( $code, $msg ) = $self->$method($value); - - push @results, $self->loc($attribute) . ': ' . $msg; - - } - } - - # We special case owner changing, so we can use ForceOwnerChange - if ( $ticketargs{'Owner'} && ( $self->Owner != $ticketargs{'Owner'} ) ) { - my $ChownType = "Give"; - $ChownType = "Force" if ( $ticketargs{'ForceOwnerChange'} ); - - my ( $val, $msg ) = $self->SetOwner( $ticketargs{'Owner'}, $ChownType ); - push ( @results, $msg ); - } - - # }}} -# Deal with setting watchers - - -# Acceptable arguments: -# Requestor -# Requestors -# AddRequestor -# AddRequestors -# DelRequestor - - foreach my $type qw(Requestor Cc AdminCc) { - - # If we've been given a number of delresses to del, do it. - foreach my $address (@{$ticketargs{'Del'.$type}}) { - my ($id, $msg) = $self->DeleteWatcher( Type => $type, Email => $address); - push (@results, $msg) ; - } - - # If we've been given a number of addresses to add, do it. - foreach my $address (@{$ticketargs{'Add'.$type}}) { - $RT::Logger->debug("Adding $address as a $type"); - my ($id, $msg) = $self->AddWatcher( Type => $type, Email => $address); - push (@results, $msg) ; - - } - - -} - - -} -# }}} - # {{{ _Parse822HeadersForAttributes Content =head2 _Parse822HeadersForAttributes Content @@ -1063,7 +805,7 @@ sub _Parse822HeadersForAttributes { foreach my $date qw(due starts started resolved) { my $dateobj = RT::Date->new($RT::SystemUser); - if ( $args{$date} =~ /^\d+$/ ) { + if ( defined ($args{$date}) and $args{$date} =~ /^\d+$/ ) { $dateobj->Set( Format => 'unix', Value => $args{$date} ); } else { @@ -1189,7 +931,7 @@ sub Import { . ") was proposed " . "as a ticket owner but has no rights to own " . "tickets in '" - . $QueueObj->Name . "'\n" ); + . $QueueObj->Name . "'" ); $Owner = undef; } @@ -1223,18 +965,18 @@ sub Import { EffectiveId => $EffectiveId, Queue => $QueueObj->Id, Owner => $Owner->Id, - Subject => $args{'Subject'}, # loc - InitialPriority => $args{'InitialPriority'}, # loc - FinalPriority => $args{'FinalPriority'}, # loc - Priority => $args{'InitialPriority'}, # loc - Status => $args{'Status'}, # loc - TimeWorked => $args{'TimeWorked'}, # loc - Type => $args{'Type'}, # loc - Created => $args{'Created'}, # loc - Told => $args{'Told'}, # loc - LastUpdated => $args{'Updated'}, # loc - Resolved => $args{'Resolved'}, # loc - Due => $args{'Due'}, # loc + Subject => $args{'Subject'}, # loc + InitialPriority => $args{'InitialPriority'}, # loc + FinalPriority => $args{'FinalPriority'}, # loc + Priority => $args{'InitialPriority'}, # loc + Status => $args{'Status'}, # loc + TimeWorked => $args{'TimeWorked'}, # loc + Type => $args{'Type'}, # loc + Created => $args{'Created'}, # loc + Told => $args{'Told'}, # loc + LastUpdated => $args{'Updated'}, # loc + Resolved => $args{'Resolved'}, # loc + Due => $args{'Due'}, # loc ); # If the ticket didn't have an id @@ -1248,7 +990,7 @@ sub Import { unless ($val) { $RT::Logger->err( - $self . "->Import couldn't set EffectiveId: $msg\n" ); + $self . "->Import couldn't set EffectiveId: $msg" ); } } @@ -1291,48 +1033,6 @@ It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner. It will return true on success and undef on failure. -=begin testing - -my $ticket = RT::Ticket->new($RT::SystemUser); -my ($id, $msg) = $ticket->Create(Subject => "Foo", - Owner => $RT::SystemUser->Id, - Status => 'open', - Requestor => ['jesse@example.com'], - Queue => '1' - ); -ok ($id, "Ticket $id was created"); -ok(my $group = RT::Group->new($RT::SystemUser)); -ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Requestor')); -ok ($group->Id, "Found the requestors object for this ticket"); - -ok(my $jesse = RT::User->new($RT::SystemUser), "Creating a jesse rt::user"); -$jesse->LoadByEmail('jesse@example.com'); -ok($jesse->Id, "Found the jesse rt user"); - - -ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $jesse->PrincipalId), "The ticket actually has jesse at fsck.com as a requestor"); -ok ((my $add_id, $add_msg) = $ticket->AddWatcher(Type => 'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor"); -ok ($add_id, "Add succeeded: ($add_msg)"); -ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user"); -$bob->LoadByEmail('bob@fsck.com'); -ok($bob->Id, "Found the bob rt user"); -ok ($ticket->IsWatcher(Type => 'Requestor', PrincipalId => $bob->PrincipalId), "The ticket actually has bob at fsck.com as a requestor");; -ok ((my $add_id, $add_msg) = $ticket->DeleteWatcher(Type =>'Requestor', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor"); -ok (!$ticket->IsWatcher(Type => 'Requestor', Principal => $bob->PrincipalId), "The ticket no longer has bob at fsck.com as a requestor");; - - -$group = RT::Group->new($RT::SystemUser); -ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Cc')); -ok ($group->Id, "Found the cc object for this ticket"); -$group = RT::Group->new($RT::SystemUser); -ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'AdminCc')); -ok ($group->Id, "Found the AdminCc object for this ticket"); -$group = RT::Group->new($RT::SystemUser); -ok($group->LoadTicketRoleGroup(Ticket => $id, Type=> 'Owner')); -ok ($group->Id, "Found the Owner object for this ticket"); -ok($group->HasMember($RT::SystemUser->UserObj->PrincipalObj), "the owner group has the member 'RT_System'"); - -=end testing =cut @@ -1385,12 +1085,12 @@ AddWatcher takes a parameter hash. The keys are as follows: Type One of Requestor, Cc, AdminCc -PrinicpalId The RT::Principal id of the user or group that's being added as a watcher +PrincipalId The RT::Principal id of the user or group that's being added as a watcher Email The email address of the new watcher. If a user with this email address can't be found, a new nonprivileged user will be created. -If the watcher you\'re trying to set has an RT account, set the Owner paremeter to their User Id. Otherwise, set the Email parameter to their Email address. +If the watcher you\'re trying to set has an RT account, set the PrincipalId paremeter to their User Id. Otherwise, set the Email parameter to their Email address. =cut @@ -1403,43 +1103,47 @@ sub AddWatcher { @_ ); - return ( 0, "No principal specified" ) - unless $args{'Email'} or $args{'PrincipalId'}; + # ModifyTicket works in any case + return $self->_AddWatcher( %args ) + if $self->CurrentUserHasRight('ModifyTicket'); + if ( $args{'Email'} ) { + my ($addr) = RT::EmailParser->ParseEmailAddress( $args{'Email'} ); + return (0, $self->loc("Couldn't parse address from '[_1]' string", $args{'Email'} )) + unless $addr; - if ( !$args{'PrincipalId'} and $args{'Email'} ) { - my $user = RT::User->new( $self->CurrentUser ); - $user->LoadByEmail( $args{'Email'} ); - if ( $user->id ) { - $args{'PrincipalId'} = $user->PrincipalId; + if ( lc $self->CurrentUser->UserObj->EmailAddress + eq lc RT::User->CanonicalizeEmailAddress( $addr->address ) ) + { + $args{'PrincipalId'} = $self->CurrentUser->id; delete $args{'Email'}; } } - # {{{ Check ACLS - # ModifyTicket allow you to add any watcher - return $self->_AddWatcher(%args) - if $self->CurrentUserHasRight('ModifyTicket'); + # If the watcher isn't the current user then the current user has no right + # bail + unless ( $args{'PrincipalId'} && $self->CurrentUser->id == $args{'PrincipalId'} ) { + return ( 0, $self->loc("Permission Denied") ); + } - #If the watcher we're trying to add is for the current user - if ( $self->CurrentUser->PrincipalId == ($args{'PrincipalId'} || 0) ) { - # If it's an AdminCc and they have 'WatchAsAdminCc' - if ( $args{'Type'} eq 'AdminCc' ) { - return $self->_AddWatcher( %args ) - if $self->CurrentUserHasRight('WatchAsAdminCc'); + # If it's an AdminCc and they don't have 'WatchAsAdminCc', bail + if ( $args{'Type'} eq 'AdminCc' ) { + unless ( $self->CurrentUserHasRight('WatchAsAdminCc') ) { + return ( 0, $self->loc('Permission Denied') ); } + } - # If it's a Requestor or Cc and they have 'Watch' - elsif ( $args{'Type'} eq 'Cc' || $args{'Type'} eq 'Requestor' ) { - return $self->_AddWatcher( %args ) - if $self->CurrentUserHasRight('Watch'); - } - else { - $RT::Logger->warning( "AddWatcher got passed a bogus type" ); - return ( 0, $self->loc('Error in parameters to Ticket->AddWatcher') ); + # If it's a Requestor or Cc and they don't have 'Watch', bail + elsif ( $args{'Type'} eq 'Cc' || $args{'Type'} eq 'Requestor' ) { + unless ( $self->CurrentUserHasRight('Watch') ) { + return ( 0, $self->loc('Permission Denied') ); } } + else { + $RT::Logger->warning( "AddWatcher got passed a bogus type"); + return ( 0, $self->loc('Error in parameters to Ticket->AddWatcher') ); + } - return ( 0, $self->loc("Permission Denied") ); + return $self->_AddWatcher( %args ); } #This contains the meat of AddWatcher. but can be called from a routine like @@ -1458,14 +1162,8 @@ sub _AddWatcher { my $principal = RT::Principal->new($self->CurrentUser); if ($args{'Email'}) { my $user = RT::User->new($RT::SystemUser); - my ($pid, $msg) = $user->LoadOrCreateByEmail($args{'Email'}); - # If we can't load the user by email address, let's try to load by username - unless ($pid) { - ($pid,$msg) = $user->Load($args{'Email'}) - } - if ($pid) { - $args{'PrincipalId'} = $pid; - } + my ($pid, $msg) = $user->LoadOrCreateByEmail( $args{'Email'} ); + $args{'PrincipalId'} = $pid if $pid; } if ($args{'PrincipalId'}) { $principal->Load($args{'PrincipalId'}); @@ -1494,7 +1192,7 @@ sub _AddWatcher { my ( $m_id, $m_msg ) = $group->_AddMember( PrincipalId => $principal->Id, InsideTransaction => 1 ); unless ($m_id) { - $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id."\n".$m_msg); + $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id.": ".$m_msg); return ( 0, $self->loc('Could not make that principal a [_1] for this ticket', $self->loc($args{'Type'})) ); } @@ -1617,7 +1315,7 @@ sub DeleteWatcher { $RT::Logger->error( "Failed to delete " . $principal->Id . " as a member of group " - . $group->Id . "\n" + . $group->Id . ": " . $m_msg ); return (0, @@ -1650,35 +1348,6 @@ Takes an optional email address to never email about updates to this ticket. Returns an array of the RT::Attribute objects for this ticket's 'SquelchMailTo' attributes. -=begin testing - -my $t = RT::Ticket->new($RT::SystemUser); -ok($t->Create(Queue => 'general', Subject => 'SquelchTest')); - -is($#{$t->SquelchMailTo}, -1, "The ticket has no squelched recipients"); - -my @returned = $t->SquelchMailTo('nobody@example.com'); - -is($#returned, 0, "The ticket has one squelched recipients"); - -my @names = $t->Attributes->Names; -is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo"); -@returned = $t->SquelchMailTo('nobody@example.com'); - - -is($#returned, 0, "The ticket has one squelched recipients"); - -@names = $t->Attributes->Names; -is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo"); - - -my ($ret, $msg) = $t->UnsquelchMailTo('nobody@example.com'); -ok($ret, "Removed nobody as a squelched recipient - ".$msg); -@returned = $t->SquelchMailTo(); -is($#returned, -1, "The ticket has no squelched recipients". join(',',@returned)); - - -=end testing =cut @@ -1688,14 +1357,22 @@ sub SquelchMailTo { unless ( $self->CurrentUserHasRight('ModifyTicket') ) { return undef; } - my $attr = shift; - $self->AddAttribute( Name => 'SquelchMailTo', Content => $attr ) - unless grep { $_->Content eq $attr } - $self->Attributes->Named('SquelchMailTo'); + } else { + unless ( $self->CurrentUserHasRight('ShowTicket') ) { + return undef; + } } - unless ( $self->CurrentUserHasRight('ShowTicket') ) { - return undef; + return $self->_SquelchMailTo(@_); +} + +sub _SquelchMailTo { + my $self = shift; + if (@_) { + my $attr = shift; + $self->AddAttribute( Name => 'SquelchMailTo', Content => $attr ) + unless grep { $_->Content eq $attr } + $self->Attributes->Named('SquelchMailTo'); } my @attributes = $self->Attributes->Named('SquelchMailTo'); return (@attributes); @@ -1771,7 +1448,6 @@ sub CcAddresses { unless ( $self->CurrentUserHasRight('ShowTicket') ) { return undef; } - return ( $self->Cc->MemberEmailAddressesAsString); } @@ -1903,7 +1579,6 @@ sub IsWatcher { $group->LoadTicketRoleGroup(Type => $args{'Type'}, Ticket => $self->id); # Find the relevant principal. - my $principal = RT::Principal->new($self->CurrentUser); if (!$args{PrincipalId} && $args{Email}) { # Look up the specified user. my $user = RT::User->new($self->CurrentUser); @@ -1916,10 +1591,9 @@ sub IsWatcher { return 0; } } - $principal->Load($args{'PrincipalId'}); # Ask if it has the member in question - return ($group->HasMember($principal)); + return $group->HasMember( $args{'PrincipalId'} ); } # }}} @@ -1928,9 +1602,9 @@ sub IsWatcher { =head2 IsRequestor PRINCIPAL_ID - Takes an RT::Principal id - Returns true if the principal is a requestor of the current ticket. +Takes an L id. +Returns true if the principal is a requestor of the current ticket. =cut @@ -1949,7 +1623,7 @@ sub IsRequestor { =head2 IsCc PRINCIPAL_ID Takes an RT::Principal id. - Returns true if the principal is a requestor of the current ticket. + Returns true if the principal is a Cc of the current ticket. =cut @@ -1969,7 +1643,7 @@ sub IsCc { =head2 IsAdminCc PRINCIPAL_ID Takes an RT::Principal id. - Returns true if the principal is a requestor of the current ticket. + Returns true if the principal is an AdminCc of the current ticket. =cut @@ -1998,8 +1672,8 @@ sub IsOwner { # no ACL check since this is used in acl decisions # unless ($self->CurrentUserHasRight('ShowTicket')) { - # return(undef); - # } + # return(undef); + # } #Tickets won't yet have owners when they're being created. unless ( $self->OwnerObj->id ) { @@ -2020,6 +1694,46 @@ sub IsOwner { # }}} + +=head2 TransactionAddresses + +Returns a composite hashref of the results of L for all this ticket's Create, Comment or Correspond transactions. +The keys are C, C and C. The values are lists of C objects. + +NOTE: For performance reasons, this method might want to skip transactions and go straight for attachments. But to make that work right, we're going to need to go and walk around the access control in Attachment.pm's sub _Value. + +=cut + + +sub TransactionAddresses { + my $self = shift; + my $txns = $self->Transactions; + + my %addresses = (); + foreach my $type (qw(Create Comment Correspond)) { + $txns->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type , ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 1); + } + + while (my $txn = $txns->Next) { + my $txnaddrs = $txn->Addresses; + foreach my $addrlist ( values %$txnaddrs ) { + foreach my $addr (@$addrlist) { + # Skip addresses without a phrase (things that are just raw addresses) if we have a phrase + next if ($addresses{$addr->address} && $addresses{$addr->address}->phrase && not $addr->phrase); + # skips "comment-only" addresses + next unless ($addr->address); + $addresses{$addr->address} = $addr; + } + } + } + + return \%addresses; + +} + + + + # {{{ Routines dealing with queues # {{{ sub ValidateQueue @@ -2093,7 +1807,18 @@ sub SetQueue { $RT::Logger->error("Couldn't set owner on queue change: $msg") unless $status; } - return ( $self->_Set( Field => 'Queue', Value => $NewQueueObj->Id() ) ); + my ($status, $msg) = $self->_Set( Field => 'Queue', Value => $NewQueueObj->Id() ); + + if ( $status ) { + # On queue change, change queue for reminders too + my $reminder_collection = $self->Reminders->Collection; + while ( my $reminder = $reminder_collection->Next ) { + my ($status, $msg) = $reminder->SetQueue($NewQueue); + $RT::Logger->error('Queue change failed for reminder #' . $reminder->Id . ': ' . $msg) unless $status; + } + } + + return ($status, $msg); } # }}} @@ -2136,8 +1861,8 @@ sub DueObj { my $time = new RT::Date( $self->CurrentUser ); # -1 is RT::Date slang for never - if ( $self->Due ) { - $time->Set( Format => 'sql', Value => $self->Due ); + if ( my $due = $self->Due ) { + $time->Set( Format => 'sql', Value => $due ); } else { $time->Set( Format => 'unix', Value => -1 ); @@ -2316,20 +2041,34 @@ Returns the amount of time worked on this ticket as a Text String sub TimeWorkedAsString { my $self = shift; - return "0" unless $self->TimeWorked; + my $value = $self->TimeWorked; + + # return the # of minutes worked turned into seconds and written as + # a simple text string, this is not really a date object, but if we + # diff a number of seconds vs the epoch, we'll get a nice description + # of time worked. + return "" unless $value; + return RT::Date->new( $self->CurrentUser ) + ->DurationAsString( $value * 60 ); +} - #This is not really a date object, but if we diff a number of seconds - #vs the epoch, we'll get a nice description of time worked. +# }}} - my $worked = new RT::Date( $self->CurrentUser ); +# {{{ sub TimeLeftAsString - #return the #of minutes worked turned into seconds and written as - # a simple text string +=head2 TimeLeftAsString - return ( $worked->DurationAsString( $self->TimeWorked * 60 ) ); -} +Returns the amount of time left on this ticket as a Text String -# }}} +=cut + +sub TimeLeftAsString { + my $self = shift; + my $value = $self->TimeLeft; + return "" unless $value; + return RT::Date->new( $self->CurrentUser ) + ->DurationAsString( $value * 60 ); +} # }}} @@ -2340,9 +2079,9 @@ sub TimeWorkedAsString { =head2 Comment Comment on this ticket. -Takes a hashref with the following attributes: +Takes a hash with the following attributes: If MIMEObj is undefined, Content will be used to build a MIME::Entity for this -commentl +comment. MIMEObj, TimeTaken, CcMessageTo, BccMessageTo, Content, DryRun @@ -2453,34 +2192,37 @@ Performs no access control checks. hence, dangerous. =cut sub _RecordNote { - my $self = shift; - my %args = ( CcMessageTo => undef, - BccMessageTo => undef, - MIMEObj => undef, - Content => undef, - TimeTaken => 0, - CommitScrips => 1, - @_ ); + my %args = ( + CcMessageTo => undef, + BccMessageTo => undef, + Encrypt => undef, + Sign => undef, + MIMEObj => undef, + Content => undef, + NoteType => 'Correspond', + TimeTaken => 0, + CommitScrips => 1, + @_ + ); unless ( $args{'MIMEObj'} || $args{'Content'} ) { - return ( 0, $self->loc("No message attached"), undef ); + return ( 0, $self->loc("No message attached"), undef ); } + unless ( $args{'MIMEObj'} ) { - $args{'MIMEObj'} = MIME::Entity->build( Data => ( - ref $args{'Content'} - ? $args{'Content'} - : [ $args{'Content'} ] - ) ); - } + $args{'MIMEObj'} = MIME::Entity->build( + Data => ( ref $args{'Content'}? $args{'Content'}: [ $args{'Content'} ] ) + ); + } # convert text parts into utf-8 RT::I18N::SetMIMEEntityToUTF8( $args{'MIMEObj'} ); -# If we've been passed in CcMessageTo and BccMessageTo fields, -# add them to the mime object for passing on to the transaction handler -# The "NotifyOtherRecipients" scripAction will look for RT-Send-Cc: and RT-Send-Bcc: -# headers + # If we've been passed in CcMessageTo and BccMessageTo fields, + # add them to the mime object for passing on to the transaction handler + # The "NotifyOtherRecipients" scripAction will look for RT-Send-Cc: and + # RT-Send-Bcc: headers foreach my $type (qw/Cc Bcc/) { @@ -2488,28 +2230,26 @@ sub _RecordNote { my $addresses = join ', ', ( map { RT::User->CanonicalizeEmailAddress( $_->address ) } - Mail::Address->parse( $args{ $type . 'MessageTo' } ) ); + Email::Address->parse( $args{ $type . 'MessageTo' } ) ); $args{'MIMEObj'}->head->add( 'RT-Send-' . $type, $addresses ); } } + foreach my $argument (qw(Encrypt Sign)) { + $args{'MIMEObj'}->head->add( + "X-RT-$argument" => $args{ $argument } + ) if defined $args{ $argument }; + } + # If this is from an external source, we need to come up with its # internal Message-ID now, so all emails sent because of this # message have a common Message-ID - unless ( ($args{'MIMEObj'}->head->get('Message-ID') || '') - =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@\Q$RT::Organization>/ ) - { - $args{'MIMEObj'}->head->replace( 'RT-Message-ID', - "id . "-" - . "0" . "-" # Scrip - . "0" . "@" # Email sent - . $RT::Organization - . ">" ); + my $org = RT->Config->Get('Organization'); + my $msgid = $args{'MIMEObj'}->head->get('Message-ID'); + unless (defined $msgid && $msgid =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@\Q$org\E>/) { + $args{'MIMEObj'}->head->set( + 'RT-Message-ID' => RT::Interface::Email::GenMessageId( Ticket => $self ) + ); } #Record the correspondence (write the transaction) @@ -2579,9 +2319,14 @@ sub _Links { =head2 DeleteLink -Delete a link. takes a paramhash of Base, Target and Type. -Either Base or Target must be null. The null value will -be replaced with this ticket\'s id +Delete a link. takes a paramhash of Base, Target, Type, Silent, +SilentBase and SilentTarget. Either Base or Target must be null. +The null value will be replaced with this ticket\'s id. + +If Silent is true then no transaction would be recorded, in other +case you can control creation of transactions on both base and +target with SilentBase and SilentTarget respectively. By default +both transactions are created. =cut @@ -2591,18 +2336,21 @@ sub DeleteLink { Base => undef, Target => undef, Type => undef, + Silent => undef, + SilentBase => undef, + SilentTarget => undef, @_ ); unless ( $args{'Target'} || $args{'Base'} ) { - $RT::Logger->error("Base or Target must be specified\n"); + $RT::Logger->error("Base or Target must be specified"); return ( 0, $self->loc('Either base or target must be specified') ); } #check acls my $right = 0; $right++ if $self->CurrentUserHasRight('ModifyTicket'); - if ( !$right && $RT::StrictLinkACL ) { + if ( !$right && RT->Config->Get( 'StrictLinkACL' ) ) { return ( 0, $self->loc("Permission Denied") ); } @@ -2613,57 +2361,55 @@ sub DeleteLink { if ( !$other_ticket || $other_ticket->CurrentUserHasRight('ModifyTicket') ) { $right++; } - if ( ( !$RT::StrictLinkACL && $right == 0 ) || - ( $RT::StrictLinkACL && $right < 2 ) ) + if ( ( !RT->Config->Get( 'StrictLinkACL' ) && $right == 0 ) || + ( RT->Config->Get( 'StrictLinkACL' ) && $right < 2 ) ) { return ( 0, $self->loc("Permission Denied") ); } my ($val, $Msg) = $self->SUPER::_DeleteLink(%args); + return ( 0, $Msg ) unless $val; - if ( !$val ) { - $RT::Logger->debug("Couldn't find that link\n"); - return ( 0, $Msg ); - } + return ( $val, $Msg ) if $args{'Silent'}; my ($direction, $remote_link); if ( $args{'Base'} ) { - $remote_link = $args{'Base'}; - $direction = 'Target'; + $remote_link = $args{'Base'}; + $direction = 'Target'; } elsif ( $args{'Target'} ) { - $remote_link = $args{'Target'}; - $direction='Base'; - } + $remote_link = $args{'Target'}; + $direction = 'Base'; + } - if ( $args{'Silent'} ) { - return ( $val, $Msg ); - } - else { - my $remote_uri = RT::URI->new( $self->CurrentUser ); - $remote_uri->FromURI( $remote_link ); + my $remote_uri = RT::URI->new( $self->CurrentUser ); + $remote_uri->FromURI( $remote_link ); + unless ( $args{ 'Silent'. $direction } ) { my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( Type => 'DeleteLink', - Field => $LINKDIRMAP{$args{'Type'}}->{$direction}, - OldValue => $remote_uri->URI || $remote_link, + Field => $LINKDIRMAP{$args{'Type'}}->{$direction}, + OldValue => $remote_uri->URI || $remote_link, TimeTaken => 0 ); - - if ( $remote_uri->IsLocal ) { - - my $OtherObj = $remote_uri->Object; - my ( $val, $Msg ) = $OtherObj->_NewTransaction(Type => 'DeleteLink', - Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base} - : $LINKDIRMAP{$args{'Type'}}->{Target}, - OldValue => $self->URI, - ActivateScrips => ! $RT::LinkTransactionsRun1Scrip, - TimeTaken => 0 ); - } - - return ( $Trans, $Msg ); + $RT::Logger->error("Couldn't create transaction: $Msg") unless $Trans; + } + + if ( !$args{ 'Silent'. ( $direction eq 'Target'? 'Base': 'Target' ) } && $remote_uri->IsLocal ) { + my $OtherObj = $remote_uri->Object; + my ( $val, $Msg ) = $OtherObj->_NewTransaction( + Type => 'DeleteLink', + Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base} + : $LINKDIRMAP{$args{'Type'}}->{Target}, + OldValue => $self->URI, + ActivateScrips => !RT->Config->Get('LinkTransactionsRun1Scrip'), + TimeTaken => 0, + ); + $RT::Logger->error("Couldn't create transaction: $Msg") unless $val; } + + return ( $val, $Msg ); } # }}} @@ -2674,24 +2420,31 @@ sub DeleteLink { Takes a paramhash of Type and one of Base or Target. Adds that link to this ticket. +If Silent is true then no transaction would be recorded, in other +case you can control creation of transactions on both base and +target with SilentBase and SilentTarget respectively. By default +both transactions are created. + =cut sub AddLink { my $self = shift; - my %args = ( Target => '', - Base => '', - Type => '', - Silent => undef, + my %args = ( Target => '', + Base => '', + Type => '', + Silent => undef, + SilentBase => undef, + SilentTarget => undef, @_ ); unless ( $args{'Target'} || $args{'Base'} ) { - $RT::Logger->error("Base or Target must be specified\n"); + $RT::Logger->error("Base or Target must be specified"); return ( 0, $self->loc('Either base or target must be specified') ); } my $right = 0; $right++ if $self->CurrentUserHasRight('ModifyTicket'); - if ( !$right && $RT::StrictLinkACL ) { + if ( !$right && RT->Config->Get( 'StrictLinkACL' ) ) { return ( 0, $self->loc("Permission Denied") ); } @@ -2702,8 +2455,8 @@ sub AddLink { if ( !$other_ticket || $other_ticket->CurrentUserHasRight('ModifyTicket') ) { $right++; } - if ( ( !$RT::StrictLinkACL && $right == 0 ) || - ( $RT::StrictLinkACL && $right < 2 ) ) + if ( ( !RT->Config->Get( 'StrictLinkACL' ) && $right == 0 ) || + ( RT->Config->Get( 'StrictLinkACL' ) && $right < 2 ) ) { return ( 0, $self->loc("Permission Denied") ); } @@ -2721,8 +2474,8 @@ sub __GetTicketFromURI { $uri_obj->FromURI( $args{'URI'} ); unless ( $uri_obj->Resolver && $uri_obj->Scheme ) { - my $msg = $self->loc( "Couldn't resolve '[_1]' into a URI.", $args{'URI'} ); - $RT::Logger->warning( "$msg\n" ); + my $msg = $self->loc( "Couldn't resolve '[_1]' into a URI.", $args{'URI'} ); + $RT::Logger->warning( $msg ); return( 0, $msg ); } my $obj = $uri_obj->Resolver->Object; @@ -2740,14 +2493,17 @@ Private non-acled variant of AddLink so that links can be added during create. sub _AddLink { my $self = shift; - my %args = ( Target => '', - Base => '', - Type => '', - Silent => undef, + my %args = ( Target => '', + Base => '', + Type => '', + Silent => undef, + SilentBase => undef, + SilentTarget => undef, @_ ); my ($val, $msg, $exist) = $self->SUPER::_AddLink(%args); return ($val, $msg) if !$val || $exist; + return ($val, $msg) if $args{'Silent'}; my ($direction, $remote_link); if ( $args{'Target'} ) { @@ -2758,34 +2514,33 @@ sub _AddLink { $direction = 'Target'; } - # Don't write the transaction if we're doing this on create - if ( $args{'Silent'} ) { - return ( $val, $msg ); - } - else { - my $remote_uri = RT::URI->new( $self->CurrentUser ); - $remote_uri->FromURI( $remote_link ); - - #Write the transaction - my ( $Trans, $Msg, $TransObj ) = - $self->_NewTransaction(Type => 'AddLink', - Field => $LINKDIRMAP{$args{'Type'}}->{$direction}, - NewValue => $remote_uri->URI || $remote_link, - TimeTaken => 0 ); - - if ( $remote_uri->IsLocal ) { - - my $OtherObj = $remote_uri->Object; - my ( $val, $Msg ) = $OtherObj->_NewTransaction(Type => 'AddLink', - Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base} - : $LINKDIRMAP{$args{'Type'}}->{Target}, - NewValue => $self->URI, - ActivateScrips => ! $RT::LinkTransactionsRun1Scrip, - TimeTaken => 0 ); - } - return ( $val, $Msg ); + my $remote_uri = RT::URI->new( $self->CurrentUser ); + $remote_uri->FromURI( $remote_link ); + + unless ( $args{ 'Silent'. $direction } ) { + my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( + Type => 'AddLink', + Field => $LINKDIRMAP{$args{'Type'}}->{$direction}, + NewValue => $remote_uri->URI || $remote_link, + TimeTaken => 0 + ); + $RT::Logger->error("Couldn't create transaction: $Msg") unless $Trans; + } + + if ( !$args{ 'Silent'. ( $direction eq 'Target'? 'Base': 'Target' ) } && $remote_uri->IsLocal ) { + my $OtherObj = $remote_uri->Object; + my ( $val, $msg ) = $OtherObj->_NewTransaction( + Type => 'AddLink', + Field => $direction eq 'Target' ? $LINKDIRMAP{$args{'Type'}}->{Base} + : $LINKDIRMAP{$args{'Type'}}->{Target}, + NewValue => $self->URI, + ActivateScrips => !RT->Config->Get('LinkTransactionsRun1Scrip'), + TimeTaken => 0, + ); + $RT::Logger->error("Couldn't create transaction: $msg") unless $val; } + return ( $val, $msg ); } # }}} @@ -2798,26 +2553,6 @@ sub _AddLink { MergeInto take the id of the ticket to merge this ticket into. -=begin testing - -my $t1 = RT::Ticket->new($RT::SystemUser); -$t1->Create ( Subject => 'Merge test 1', Queue => 'general', Requestor => 'merge1@example.com'); -my $t1id = $t1->id; -my $t2 = RT::Ticket->new($RT::SystemUser); -$t2->Create ( Subject => 'Merge test 2', Queue => 'general', Requestor => 'merge2@example.com'); -my $t2id = $t2->id; -my ($msg, $val) = $t1->MergeInto($t2->id); -ok ($msg,$val); -$t1 = RT::Ticket->new($RT::SystemUser); -is ($t1->id, undef, "ok. we've got a blank ticket1"); -$t1->Load($t1id); - -is ($t1->id, $t2->id); - -is ($t1->Requestors->MembersObj->Count, 2); - - -=end testing =cut @@ -2983,6 +2718,29 @@ sub MergeInto { return ( 1, $self->loc("Merge Successful") ); } +=head2 Merged + +Returns list of tickets' ids that's been merged into this ticket. + +=cut + +sub Merged { + my $self = shift; + + my $mergees = new RT::Tickets( $self->CurrentUser ); + $mergees->Limit( + FIELD => 'EffectiveId', + OPERATOR => '=', + VALUE => $self->Id, + ); + $mergees->Limit( + FIELD => 'id', + OPERATOR => '!=', + VALUE => $self->Id, + ); + return map $_->id, @{ $mergees->ItemsArrayRef || [] }; +} + # }}} # }}} @@ -3039,28 +2797,6 @@ Takes two arguments: and (optionally) the type of the SetOwner Transaction. It defaults to 'Give'. 'Steal' is also a valid option. -=begin testing - -my $root = RT::User->new($RT::SystemUser); -$root->Load('root'); -ok ($root->Id, "Loaded the root user"); -my $t = RT::Ticket->new($RT::SystemUser); -$t->Load(1); -$t->SetOwner('root'); -is ($t->OwnerObj->Name, 'root' , "Root owns the ticket"); -$t->Steal(); -is ($t->OwnerObj->id, $RT::SystemUser->id , "SystemUser owns the ticket"); -my $txns = RT::Transactions->new($RT::SystemUser); -$txns->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$txns->Limit(FIELD => 'ObjectId', VALUE => '1'); -$txns->Limit(FIELD => 'ObjectType', VALUE => 'RT::Ticket'); -$txns->Limit(FIELD => 'Type', OPERATOR => '!=', VALUE => 'EmailRecord'); - -my $steal = $txns->First; -ok($steal->OldValue == $root->Id , "Stolen from root"); -ok($steal->NewValue == $RT::SystemUser->Id , "Stolen by the systemuser"); - -=end testing =cut @@ -3143,10 +2879,15 @@ sub SetOwner { # Delete the owner in the owner group, then add a new one # TODO: is this safe? it's not how we really want the API to work # for most things, but it's fast. - my ( $del_id, $del_msg ) = $self->OwnerGroup->MembersObj->First->Delete(); + my ( $del_id, $del_msg ); + for my $owner (@{$self->OwnerGroup->MembersObj->ItemsArrayRef}) { + ($del_id, $del_msg) = $owner->Delete(); + last unless ($del_id); + } + unless ($del_id) { $RT::Handle->Rollback(); - return ( 0, $self->loc("Could not change owner. ") . $del_msg ); + return ( 0, $self->loc("Could not change owner: [_1]", $del_msg) ); } my ( $add_id, $add_msg ) = $self->OwnerGroup->_AddMember( @@ -3154,7 +2895,7 @@ sub SetOwner { InsideTransaction => 1 ); unless ($add_id) { $RT::Handle->Rollback(); - return ( 0, $self->loc("Could not change owner. ") . $add_msg ); + return ( 0, $self->loc("Could not change owner: [_1]", $add_msg ) ); } # We call set twice with slightly different arguments, so @@ -3171,7 +2912,7 @@ sub SetOwner { unless ($val) { $RT::Handle->Rollback; - return ( 0, $self->loc("Could not change owner. ") . $msg ); + return ( 0, $self->loc("Could not change owner: [_1]", $msg) ); } ($val, $msg) = $self->_NewTransaction( @@ -3288,25 +3029,6 @@ Set this ticket\'s status. STATUS can be one of: new, open, stalled, resolved, r Alternatively, you can pass in a list of named parameters (Status => STATUS, Force => FORCE). If FORCE is true, ignore unresolved dependencies and force a status change. -=begin testing - -my $tt = RT::Ticket->new($RT::SystemUser); -my ($id, $tid, $msg)= $tt->Create(Queue => 'general', - Subject => 'test'); -ok($id, $msg); -is($tt->Status, 'new', "New ticket is created as new"); - -($id, $msg) = $tt->SetStatus('open'); -ok($id, $msg); -like($msg, qr/open/i, "Status message is correct"); -($id, $msg) = $tt->SetStatus('resolved'); -ok($id, $msg); -like($msg, qr/resolved/i, "Status message is correct"); -($id, $msg) = $tt->SetStatus('resolved'); -ok(!$id,$msg); - - -=end testing =cut @@ -3316,10 +3038,10 @@ sub SetStatus { my %args; if (@_ == 1) { - $args{Status} = shift; + $args{Status} = shift; } else { - %args = (@_); + %args = (@_); } #Check ACL @@ -3341,7 +3063,7 @@ sub SetStatus { $now->SetToNow(); #If we're changing the status from new, record that we've started - if ( ( $self->Status =~ /new/ ) && ( $args{Status} ne 'new' ) ) { + if ( $self->Status eq 'new' && $args{Status} ne 'new' ) { #Set the Started time to "now" $self->_Set( Field => 'Started', @@ -3369,20 +3091,14 @@ sub SetStatus { # }}} -# {{{ sub Kill +# {{{ sub Delete -=head2 Kill +=head2 Delete Takes no arguments. Marks this ticket for garbage collection =cut -sub Kill { - my $self = shift; - $RT::Logger->crit("'Kill' is deprecated. use 'Delete' instead at (". join(":",caller).")."); - return $self->Delete; -} - sub Delete { my $self = shift; return ( $self->SetStatus('deleted') ); @@ -3454,7 +3170,7 @@ sub Resolve { # }}} - + # {{{ Actions + Routines dealing with transactions # {{{ sub SetTold and _SetTold @@ -3507,14 +3223,39 @@ sub _SetTold { Value => $now->ISO ) ); } +=head2 SeenUpTo + + +=cut + +sub SeenUpTo { + my $self = shift; + my $uid = $self->CurrentUser->id; + my $attr = $self->FirstAttribute( "User-". $uid ."-SeenUpTo" ); + return if $attr && $attr->Content gt $self->LastUpdated; + + my $txns = $self->Transactions; + $txns->Limit( FIELD => 'Type', VALUE => 'Comment' ); + $txns->Limit( FIELD => 'Type', VALUE => 'Correspond' ); + $txns->Limit( FIELD => 'Creator', OPERATOR => '!=', VALUE => $uid ); + $txns->Limit( + FIELD => 'Created', + OPERATOR => '>', + VALUE => $attr->Content + ) if $attr; + $txns->RowsPerPage(1); + return $txns->First; +} + # }}} =head2 TransactionBatch - Returns an array reference of all transactions created on this ticket during - this ticket object's lifetime, or undef if there were none. +Returns an array reference of all transactions created on this ticket during +this ticket object's lifetime or since last application of a batch, or undef +if there were none. - Only works when the $RT::UseTransactionBatch config variable is set to true. +Only works when the C config option is set to true. =cut @@ -3523,6 +3264,49 @@ sub TransactionBatch { return $self->{_TransactionBatch}; } +=head2 ApplyTransactionBatch + +Applies scrips on the current batch of transactions and shinks it. Usually +batch is applied when object is destroyed, but in some cases it's too late. + +=cut + +sub ApplyTransactionBatch { + my $self = shift; + + my $batch = $self->TransactionBatch; + return unless $batch && @$batch; + + $self->_ApplyTransactionBatch; + + $self->{_TransactionBatch} = []; +} + +sub _ApplyTransactionBatch { + my $self = shift; + my $batch = $self->TransactionBatch; + + my %seen; + my $types = join ',', grep !$seen{$_}++, grep defined, map $_->Type, grep defined, @{$batch}; + + require RT::Scrips; + RT::Scrips->new($RT::SystemUser)->Apply( + Stage => 'TransactionBatch', + TicketObj => $self, + TransactionObj => $batch->[0], + Type => $types, + ); + + # Entry point of the rule system + my $rules = RT::Ruleset->FindAllRules( + Stage => 'TransactionBatch', + TicketObj => $self, + TransactionObj => $batch->[0], + Type => $types, + ); + RT::Ruleset->CommitRules($rules); +} + sub DESTROY { my $self = shift; @@ -3536,16 +3320,10 @@ sub DESTROY { # when an object's refcount is changed in its destructor. return if $self->{_Destroyed}++; - my $batch = $self->TransactionBatch or return; - return unless @$batch; + my $batch = $self->TransactionBatch; + return unless $batch && @$batch; - require RT::Scrips; - RT::Scrips->new($RT::SystemUser)->Apply( - Stage => 'TransactionBatch', - TicketObj => $self, - TransactionObj => $batch->[0], - Type => join(',', (map { $_->Type } @{$batch}) ) - ); + return $self->_ApplyTransactionBatch; } # }}} @@ -3662,7 +3440,7 @@ sub _Value { #if the field is public, return it. if ( $self->_Accessible( $field, 'public' ) ) { - #$RT::Logger->debug("Skipping ACL check for $field\n"); + #$RT::Logger->debug("Skipping ACL check for $field"); return ( $self->SUPER::_Value($field) ); } @@ -3721,13 +3499,10 @@ sub CurrentUserHasRight { my $self = shift; my $right = shift; - return ( - $self->HasRight( - Principal => $self->CurrentUser->UserObj(), - Right => "$right" - ) - ); - + return $self->CurrentUser->PrincipalObj->HasRight( + Object => $self, + Right => $right, + ) } # }}} @@ -3754,7 +3529,7 @@ sub HasRight { unless ( ( defined $args{'Principal'} ) and ( ref( $args{'Principal'} ) ) ) { - Carp::cluck; + Carp::cluck("Principal attrib undefined for Ticket::HasRight"); $RT::Logger->crit("Principal attrib undefined for Ticket::HasRight"); return(undef); } @@ -3811,11 +3586,13 @@ sub Transactions { # if the user may not see comments do not return them unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { $transactions->Limit( + SUBCLAUSE => 'acl', FIELD => 'Type', OPERATOR => '!=', VALUE => "Comment" ); $transactions->Limit( + SUBCLAUSE => 'acl', FIELD => 'Type', OPERATOR => '!=', VALUE => "CommentEmailRecord", @@ -3823,6 +3600,13 @@ sub Transactions { ); } + } else { + $transactions->Limit( + SUBCLAUSE => 'acl', + FIELD => 'id', + VALUE => 0, + ENTRYAGGREGATOR => 'AND' + ); } return ($transactions); @@ -3861,18 +3645,17 @@ sub CustomFieldValues { my $self = shift; my $field = shift; - return $self->SUPER::CustomFieldValues( $field ) - if !$field || $field =~ /^\d+$/; + return $self->SUPER::CustomFieldValues( $field ) if !$field || $field =~ /^\d+$/; my $cf = RT::CustomField->new( $self->CurrentUser ); + $cf->SetContextObject( $self ); $cf->LoadByNameAndQueue( Name => $field, Queue => $self->Queue ); unless ( $cf->id ) { $cf->LoadByNameAndQueue( Name => $field, Queue => 0 ); } # If we didn't find a valid cfid, give up. - return RT::ObjectCustomFieldValues->new( $self->CurrentUser ) - unless $cf->id; + return RT::ObjectCustomFieldValues->new( $self->CurrentUser ) unless $cf->id; return $self->SUPER::CustomFieldValues( $cf->id ); } @@ -3894,6 +3677,23 @@ sub CustomFieldLookupType { "RT::Queue-RT::Ticket"; } +=head2 ACLEquivalenceObjects + +This method returns a list of objects for which a user's rights also apply +to this ticket. Generally, this is only the ticket's queue, but some RT +extensions may make other objects available too. + +This method is called from L. + +=cut + +sub ACLEquivalenceObjects { + my $self = shift; + return $self->QueueObj; + +} + + 1; =head1 AUTHOR diff --git a/rt/lib/RT/Transaction_Overlay.pm b/rt/lib/RT/Transaction_Overlay.pm index 1a5473b3c..e51e5b50d 100644 --- a/rt/lib/RT/Transaction_Overlay.pm +++ b/rt/lib/RT/Transaction_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + =head1 NAME RT::Transaction - RT\'s transaction object @@ -64,11 +65,6 @@ It can have arbitrary MIME attachments. =head1 METHODS -=begin testing - -ok(require RT::Transaction); - -=end testing =cut @@ -82,11 +78,11 @@ use vars qw( %_BriefDescriptions $PreferredContentType ); use RT::Attachments; use RT::Scrips; +use RT::Ruleset; use HTML::FormatText; use HTML::TreeBuilder; - # {{{ sub Create =head2 Create @@ -176,9 +172,21 @@ sub Create { Ticket => $args{'ObjectId'}, Transaction => $self->id, ); + + # Entry point of the rule system + my $ticket = RT::Ticket->new($RT::SystemUser); + $ticket->Load($args{'ObjectId'}); + my $rules = RT::Ruleset->FindAllRules( + Stage => 'TransactionCreate', + Type => $args{'Type'}, + TicketObj => $ticket, + TransactionObj => $self, + ); + if ($args{'CommitScrips'} ) { $RT::Logger->debug('About to commit scrips for transaction #' .$self->Id); $self->{'scrips'}->Commit(); + RT::Ruleset->CommitRules($rules); } } @@ -243,26 +251,28 @@ sub Delete { =head2 Message - Returns the RT::Attachments Object which contains the "top-level"object - attachment for this transaction +Returns the L object which contains the "top-level" object +attachment for this transaction. =cut sub Message { - my $self = shift; + + # XXX: Where is ACL check? - if ( !defined( $self->{'message'} ) ) { + unless ( defined $self->{'message'} ) { - $self->{'message'} = new RT::Attachments( $self->CurrentUser ); + $self->{'message'} = RT::Attachments->new( $self->CurrentUser ); $self->{'message'}->Limit( FIELD => 'TransactionId', VALUE => $self->Id ); - $self->{'message'}->ChildrenOf(0); + } else { + $self->{'message'}->GotoFirstItem; } - return ( $self->{'message'} ); + return $self->{'message'}; } # }}} @@ -278,16 +288,18 @@ returns undef. Takes a paramhash. If the $args{'Quote'} parameter is set, wraps this message at $args{'Wrap'}. $args{'Wrap'} defaults to $RT::MessageBoxWidth - 2 or 70. -If $args{'Type'} is set to C, plain texts are upgraded to HTML. -Otherwise, HTML texts are downgraded to plain text. If $args{'Type'} is -missing, it defaults to the value of C<$RT::Transaction::PreferredContentType>. +If $args{'Type'} is set to C, this will return an HTML +part of the message, if available. Otherwise it looks for a text/plain +part. If $args{'Type'} is missing, it defaults to the value of +C<$RT::Transaction::PreferredContentType>, if that's missing too, +defaults to 'text/plain'. =cut sub Content { my $self = shift; my %args = ( - Type => $PreferredContentType, + Type => $PreferredContentType || 'text/plain', Quote => 0, Wrap => 70, Wrap => ( $RT::MessageBoxWidth || 72 ) - 2, @@ -295,24 +307,23 @@ sub Content { ); my $content; - if (my $content_obj = $self->ContentObj) { - $content = $content_obj->Content; + if ( my $content_obj = $self->ContentObj( Type => $args{Type} ) ) { + $content = $content_obj->Content ||''; - if ($content_obj->ContentType =~ m{^text/html$}i) { + if ( lc $content_obj->ContentType eq 'text/html' ) { $content =~ s/

--\s+
.*?$//s if $args{'Quote'}; if ($args{Type} ne 'text/html') { + my $tree = HTML::TreeBuilder->new_from_content( $content ); $content = HTML::FormatText->new( leftmargin => 0, rightmargin => 78, - )->format( - HTML::TreeBuilder->new_from_content( $content ) - ); + )->format( $tree); + $tree->delete; } - } + } else { $content =~ s/\n-- \n.*?$//s if $args{'Quote'}; - if ($args{Type} eq 'text/html') { # Extremely simple text->html converter $content =~ s/&/&/g; @@ -333,7 +344,7 @@ sub Content { # What's the longest line like? my $max = 0; foreach ( split ( /\n/, $content ) ) { - $max = length if ( length > $max ); + $max = length if length > $max; } if ( $max > $args{'Wrap'}+6 ) { # 76 ) { @@ -347,7 +358,7 @@ sub Content { } $content =~ s/^/> /gm; - $content = $self->loc("On [_1], [_2] wrote:", $self->CreatedAsString(), $self->CreatorObj->Name()) + $content = $self->loc("On [_1], [_2] wrote:", $self->CreatedAsString, $self->CreatorObj->Name) . "\n$content\n\n"; } @@ -356,6 +367,26 @@ sub Content { # }}} + +=head2 Addresses + +Returns a hashref of addresses related to this transaction. See L for details. + +=cut + +sub Addresses { + my $self = shift; + + if (my $attach = $self->Attachments->First) { + return $attach->Addresses; + } + else { + return {}; + } + +} + + # {{{ ContentObj =head2 ContentObj @@ -366,16 +397,13 @@ Returns the RT::Attachment object which contains the content for this Transactio sub ContentObj { - my $self = shift; + my %args = ( Type => $PreferredContentType || 'text/plain', + @_ ); - # If we don\'t have any content, return undef now. - unless ( $self->Attachments->First ) { - return (undef); - } - + # If we don't have any content, return undef now. # Get the set of toplevel attachments to this transaction. - my $Attachment = $self->Attachments->First(); + return undef unless my $Attachment = $self->Attachments->First; # If it's a textual part, just return the body. if ( RT::I18N::IsTextualContentType($Attachment->ContentType) ) { @@ -385,27 +413,23 @@ sub ContentObj { # If it's a multipart object, first try returning the first part with preferred # MIME type ('text/plain' by default). - elsif ( $Attachment->ContentType() =~ '^multipart/' ) { - my $plain_parts = $Attachment->Children(); - $plain_parts->ContentType( VALUE => ($PreferredContentType || 'text/plain') ); + elsif ( $Attachment->ContentType =~ '^multipart/' ) { + my $plain_parts = $Attachment->Children; + $plain_parts->ContentType( VALUE => $args{Type} ); + $plain_parts->LimitNotEmpty; # If we actully found a part, return its content - if ( $plain_parts->First && $plain_parts->First->Content ne '' ) { - return ( $plain_parts->First ); + if ( my $first = $plain_parts->First ) { + return $first; } - # If that fails, return the first textual part which has some content. - - else { - my $all_parts = $self->Attachments(); - while ( my $part = $all_parts->Next ) { - if ( ( RT::I18N::IsTextualContentType($part->ContentType) ) and ( $part->Content() ne '' ) ) { - return ($part); - } - } + my $all_parts = $self->Attachments; + while ( my $part = $all_parts->Next ) { + next unless RT::I18N::IsTextualContentType($part->ContentType) + && $part->Content; + return $part; } - } # We found no content. suck @@ -425,12 +449,8 @@ Otherwise, returns null sub Subject { my $self = shift; - if ( $self->Attachments->First ) { - return ( $self->Attachments->First->Subject ); - } - else { - return (undef); - } + return undef unless my $first = $self->Attachments->First; + return $first->Subject; } # }}} @@ -439,7 +459,7 @@ sub Subject { =head2 Attachments - Returns all the RT::Attachment objects which are attached +Returns all the RT::Attachment objects which are attached to this transaction. Takes an optional parameter, which is a ContentType that Attachments should be restricted to. @@ -448,38 +468,28 @@ a ContentType that Attachments should be restricted to. sub Attachments { my $self = shift; - unless ( $self->{'attachments'} ) { - $self->{'attachments'} = RT::Attachments->new( $self->CurrentUser ); + if ( $self->{'attachments'} ) { + $self->{'attachments'}->GotoFirstItem; + return $self->{'attachments'}; + } - #If it's a comment, return an empty object if they don't have the right to see it - if ( $self->Type eq 'Comment' ) { - unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { - return ( $self->{'attachments'} ); - } - } + $self->{'attachments'} = RT::Attachments->new( $self->CurrentUser ); - #if they ain't got rights to see, return an empty object - elsif ($self->__Value('ObjectType') eq "RT::Ticket") { - unless ( $self->CurrentUserHasRight('ShowTicket') ) { - return ( $self->{'attachments'} ); - } - } - - $self->{'attachments'}->Limit( FIELD => 'TransactionId', - VALUE => $self->Id ); + unless ( $self->CurrentUserCanSee ) { + $self->{'attachments'}->Limit(FIELD => 'id', VALUE => '0'); + return $self->{'attachments'}; + } - # Get the self->{'attachments'} in the order they're put into - # the database. Arguably, we should be returning a tree - # of self->{'attachments'}, not a set...but no current app seems to need - # it. + $self->{'attachments'}->Limit( FIELD => 'TransactionId', VALUE => $self->Id ); - $self->{'attachments'}->OrderBy( ALIAS => 'main', - FIELD => 'id', - ORDER => 'asc' ); + # Get the self->{'attachments'} in the order they're put into + # the database. Arguably, we should be returning a tree + # of self->{'attachments'}, not a set...but no current app seems to need + # it. - } - return ( $self->{'attachments'} ); + $self->{'attachments'}->OrderBy( FIELD => 'id', ORDER => 'ASC' ); + return $self->{'attachments'}; } # }}} @@ -496,26 +506,70 @@ sub _Attach { my $self = shift; my $MIMEObject = shift; - if ( !defined($MIMEObject) ) { - $RT::Logger->error( -"$self _Attach: We can't attach a mime object if you don't give us one.\n" - ); + unless ( defined $MIMEObject ) { + $RT::Logger->error("We can't attach a mime object if you don't give us one."); return ( 0, $self->loc("[_1]: no attachment specified", $self) ); } - my $Attachment = new RT::Attachment( $self->CurrentUser ); + my $Attachment = RT::Attachment->new( $self->CurrentUser ); my ($id, $msg) = $Attachment->Create( TransactionId => $self->Id, Attachment => $MIMEObject ); return ( $Attachment, $msg || $self->loc("Attachment created") ); - } # }}} # }}} +sub ContentAsMIME { + my $self = shift; + + my $main_content = $self->ContentObj; + my $entity = $main_content->ContentAsMIME; + + if ( $main_content->Parent ) { + # main content is not top most entity, we shouldn't loose + # From/To/Cc headers that are on a top part + my $attachments = RT::Attachments->new( $self->CurrentUser ); + $attachments->Columns(qw(id Parent TransactionId Headers)); + $attachments->Limit( FIELD => 'TransactionId', VALUE => $self->id ); + $attachments->Limit( FIELD => 'Parent', VALUE => 0 ); + $attachments->Limit( FIELD => 'Parent', OPERATOR => 'IS', VALUE => 'NULL', QUOTEVALUE => 0 ); + $attachments->OrderBy( FIELD => 'id', ORDER => 'ASC' ); + my $tmp = $attachments->First; + if ( $tmp && $tmp->id ne $main_content->id ) { + $entity->make_multipart; + $entity->head->add( split /:/, $_, 2 ) foreach $tmp->SplitHeaders; + $entity->make_singlepart; + } + } + + my $attachments = RT::Attachments->new( $self->CurrentUser ); + $attachments->Limit( FIELD => 'TransactionId', VALUE => $self->id ); + $attachments->Limit( + FIELD => 'id', + OPERATOR => '!=', + VALUE => $main_content->id, + ); + $attachments->Limit( + FIELD => 'ContentType', + OPERATOR => 'NOT STARTSWITH', + VALUE => 'multipart/', + ); + $attachments->Limit( + FIELD => 'Content', + OPERATOR => '!=', + VALUE => '', + ); + while ( my $a = $attachments->Next ) { + $entity->make_multipart unless $entity->is_multipart; + $entity->add_part( $a->ContentAsMIME ); + } + return $entity; +} + # {{{ Routines dealing with Transaction Attributes # {{{ sub Description @@ -529,28 +583,15 @@ Returns a text string which describes this transaction sub Description { my $self = shift; - #Check those ACLs - #If it's a comment or a comment email record, - # we need to be extra special careful - - if ( $self->__Value('Type') =~ /^Comment/ ) { - unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { - return ( $self->loc("Permission Denied") ); - } + unless ( $self->CurrentUserCanSee ) { + return ( $self->loc("Permission Denied") ); } - #if they ain't got rights to see, don't let em - elsif ($self->__Value('ObjectType') eq "RT::Ticket") { - unless ( $self->CurrentUserHasRight('ShowTicket') ) { - return ($self->loc("Permission Denied") ); - } - } - - if ( !defined( $self->Type ) ) { + unless ( defined $self->Type ) { return ( $self->loc("No transaction type specified")); } - return ( $self->loc("[_1] by [_2]",$self->BriefDescription , $self->CreatorObj->Name )); + return $self->loc("[_1] by [_2]", $self->BriefDescription , $self->CreatorObj->Name ); } # }}} @@ -566,24 +607,13 @@ Returns a text string which briefly describes this transaction sub BriefDescription { my $self = shift; - #If it's a comment or a comment email record, - # we need to be extra special careful - if ( $self->__Value('Type') =~ /^Comment/ ) { - unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { - return ( $self->loc("Permission Denied") ); - } - } - - #if they ain't got rights to see, don't let em - elsif ( $self->__Value('ObjectType') eq "RT::Ticket" ) { - unless ( $self->CurrentUserHasRight('ShowTicket') ) { - return ( $self->loc("Permission Denied") ); - } + unless ( $self->CurrentUserCanSee ) { + return ( $self->loc("Permission Denied") ); } my $type = $self->Type; #cache this, rather than calling it 30 times - if ( !defined($type) ) { + unless ( defined $type ) { return $self->loc("No transaction type specified"); } @@ -592,6 +622,12 @@ sub BriefDescription { if ( $type eq 'Create' ) { return ( $self->loc( "[_1] created", $obj_type ) ); } + elsif ( $type eq 'Enabled' ) { + return ( $self->loc( "[_1] enabled", $obj_type ) ); + } + elsif ( $type eq 'Disabled' ) { + return ( $self->loc( "[_1] disabled", $obj_type ) ); + } elsif ( $type =~ /Status/ ) { if ( $self->Field eq 'Status' ) { if ( $self->NewValue eq 'deleted' ) { @@ -665,10 +701,10 @@ sub BriefDescription { $field = $cf->Name(); } - if ( $self->OldValue eq '' ) { + if ( ! defined $self->OldValue || $self->OldValue eq '' ) { return ( $self->loc("[_1] [_2] added", $field, $self->NewValue) ); } - elsif ( $self->NewValue eq '' ) { + elsif ( !defined $self->NewValue || $self->NewValue eq '' ) { return ( $self->loc("[_1] [_2] deleted", $field, $self->OldValue) ); } @@ -797,6 +833,21 @@ sub BriefDescription { return ( $self->Data ); } }, + Told => sub { + my $self = shift; + if ( $self->Field eq 'Told' ) { + my $t1 = new RT::Date($self->CurrentUser); + $t1->Set(Format => 'ISO', Value => $self->NewValue); + my $t2 = new RT::Date($self->CurrentUser); + $t2->Set(Format => 'ISO', Value => $self->OldValue); + return $self->loc( "[_1] changed from [_2] to [_3]", $self->loc($self->Field), $t2->AsString, $t1->AsString ); + } + else { + return $self->loc( "[_1] changed from [_2] to [_3]", + $self->loc($self->Field), + ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" ); + } + }, Set => sub { my $self = shift; if ( $self->Field eq 'Password' ) { @@ -807,7 +858,8 @@ sub BriefDescription { $q1->Load( $self->OldValue ); my $q2 = new RT::Queue( $self->CurrentUser ); $q2->Load( $self->NewValue ); - return $self->loc("[_1] changed from [_2] to [_3]", $self->Field , $q1->Name , $q2->Name); + return $self->loc("[_1] changed from [_2] to [_3]", + $self->loc($self->Field) , $q1->Name , $q2->Name); } # Write the date/time change at local time: @@ -816,10 +868,12 @@ sub BriefDescription { $t1->Set(Format => 'ISO', Value => $self->NewValue); my $t2 = new RT::Date($self->CurrentUser); $t2->Set(Format => 'ISO', Value => $self->OldValue); - return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, $t2->AsString, $t1->AsString ); + return $self->loc( "[_1] changed from [_2] to [_3]", $self->loc($self->Field), $t2->AsString, $t1->AsString ); } else { - return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" ); + return $self->loc( "[_1] changed from [_2] to [_3]", + $self->loc($self->Field), + ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" ); } }, PurgeTransaction => sub { @@ -904,52 +958,19 @@ Returns its value as a string, if the user passes an ACL check =cut sub _Value { - my $self = shift; my $field = shift; #if the field is public, return it. if ( $self->_Accessible( $field, 'public' ) ) { - return ( $self->__Value($field) ); - - } - - #If it's a comment, we need to be extra special careful - if ( $self->__Value('Type') eq 'Comment' ) { - unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { - return (undef); - } - } - elsif ( $self->__Value('Type') eq 'CommentEmailRecord' ) { - unless ( $self->CurrentUserHasRight('ShowTicketComments') - && $self->CurrentUserHasRight('ShowOutgoingEmail') ) { - return (undef); - } - + return $self->SUPER::_Value( $field ); } - elsif ( $self->__Value('Type') eq 'EmailRecord' ) { - unless ( $self->CurrentUserHasRight('ShowOutgoingEmail')) { - return (undef); - } - } - # Make sure the user can see the custom field before showing that it changed - elsif ( ( $self->__Value('Type') eq 'CustomField' ) && $self->__Value('Field') ) { - my $cf = RT::CustomField->new( $self->CurrentUser ); - $cf->Load( $self->__Value('Field') ); - return (undef) unless ( $cf->CurrentUserHasRight('SeeCustomField') ); - } - - - #if they ain't got rights to see, don't let em - elsif ($self->__Value('ObjectType') eq "RT::Ticket") { - unless ( $self->CurrentUserHasRight('ShowTicket') ) { - return (undef); - } + unless ( $self->CurrentUserCanSee ) { + return undef; } - return ( $self->__Value($field) ); - + return $self->SUPER::_Value( $field ); } # }}} @@ -966,14 +987,60 @@ passed in here. sub CurrentUserHasRight { my $self = shift; my $right = shift; - return ( - $self->CurrentUser->HasRight( - Right => "$right", - Object => $self->TicketObj - ) + return $self->CurrentUser->HasRight( + Right => $right, + Object => $self->Object ); } +=head2 CurrentUserCanSee + +Returns true if current user has rights to see this particular transaction. + +This fact depends on type of the transaction, type of an object the transaction +is attached to and may be other conditions, so this method is prefered over +custom implementations. + +=cut + +sub CurrentUserCanSee { + my $self = shift; + + # If it's a comment, we need to be extra special careful + my $type = $self->__Value('Type'); + if ( $type eq 'Comment' ) { + unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { + return 0; + } + } + elsif ( $type eq 'CommentEmailRecord' ) { + unless ( $self->CurrentUserHasRight('ShowTicketComments') + && $self->CurrentUserHasRight('ShowOutgoingEmail') ) { + return 0; + } + } + elsif ( $type eq 'EmailRecord' ) { + unless ( $self->CurrentUserHasRight('ShowOutgoingEmail') ) { + return 0; + } + } + # Make sure the user can see the custom field before showing that it changed + elsif ( $type eq 'CustomField' and my $cf_id = $self->__Value('Field') ) { + my $cf = RT::CustomField->new( $self->CurrentUser ); + $cf->SetContextObject( $self->Object ); + $cf->Load( $cf_id ); + return 0 unless $cf->CurrentUserHasRight('SeeCustomField'); + } + #if they ain't got rights to see, don't let em + elsif ( $self->__Value('ObjectType') eq "RT::Ticket" ) { + unless ( $self->CurrentUserHasRight('ShowTicket') ) { + return 0; + } + } + + return 1; +} + # }}} sub Ticket { @@ -1018,7 +1085,7 @@ sub Object { my $self = shift; my $Object = $self->__Value('ObjectType')->new($self->CurrentUser); $Object->Load($self->__Value('ObjectId')); - return($Object); + return $Object; } sub FriendlyObjectType { @@ -1048,7 +1115,6 @@ sub UpdateCustomFields { # value "ARGSRef", which was a reference to a hash of arguments. # This was insane. The next few lines of code preserve that API # while giving us something saner. - # TODO: 3.6: DEPRECATE OLD API @@ -1096,9 +1162,11 @@ sub CustomFieldValues { if ( UNIVERSAL::can( $self->Object, 'QueueObj' ) ) { + # XXX: $field could be undef when we want fetch values for all CFs + # do we want to cover this situation somehow here? unless ( defined $field && $field =~ /^\d+$/o ) { my $CFs = RT::CustomFields->new( $self->CurrentUser ); - $CFs->Limit( FIELD => 'Name', VALUE => $field); + $CFs->Limit( FIELD => 'Name', VALUE => $field ); $CFs->LimitToLookupType($self->CustomFieldLookupType); $CFs->LimitToGlobalOrObjectId($self->Object->QueueObj->id); $field = $CFs->First->id if $CFs->First; @@ -1124,7 +1192,54 @@ sub CustomFieldLookupType { "RT::Queue-RT::Ticket-RT::Transaction"; } -# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets. + +=head2 DeferredRecipients($freq, $include_sent ) + +Takes the following arguments: + +=over + +=item * a string to indicate the frequency of digest delivery. Valid values are "daily", "weekly", or "susp". + +=item * an optional argument which, if true, will return addresses even if this notification has been marked as 'sent' for this transaction. + +=back + +Returns an array of users who should now receive the notification that +was recorded in this transaction. Returns an empty array if there were +no deferred users, or if $include_sent was not specified and the deferred +notifications have been sent. + +=cut + +sub DeferredRecipients { + my $self = shift; + my $freq = shift; + my $include_sent = @_? shift : 0; + + my $attr = $self->FirstAttribute('DeferredRecipients'); + + return () unless ($attr); + + my $deferred = $attr->Content; + + return () unless ( ref($deferred) eq 'HASH' && exists $deferred->{$freq} ); + + # Skip it. + + for my $user (keys %{$deferred->{$freq}}) { + if ($deferred->{$freq}->{$user}->{_sent} && !$include_sent) { + delete $deferred->{$freq}->{$user} + } + } + # Now get our users. Easy. + + return keys %{ $deferred->{$freq} }; +} + + + +# Transactions don't change. by adding this cache config directive, we don't lose pathalogically on long tickets. sub _CacheConfig { { 'cache_p' => 1, @@ -1132,4 +1247,27 @@ sub _CacheConfig { 'cache_for_sec' => 6000, } } + + +=head2 ACLEquivalenceObjects + +This method returns a list of objects for which a user's rights also apply +to this Transaction. + +This currently only applies to Transaction Custom Fields on Tickets, so we return +the Ticket's Queue and the Ticket. + +This method is called from L. + +=cut + +sub ACLEquivalenceObjects { + my $self = shift; + + return unless $self->ObjectType eq 'RT::Ticket'; + my $object = $self->Object; + return $object,$object->QueueObj; + +} + 1; diff --git a/rt/lib/RT/User_Overlay.pm b/rt/lib/RT/User_Overlay.pm index 73c3bdd5b..ddbe54363 100644 --- a/rt/lib/RT/User_Overlay.pm +++ b/rt/lib/RT/User_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + =head1 NAME RT::User - RT User object @@ -58,11 +59,6 @@ =head1 METHODS -=begin testing - -ok(require RT::User); - -=end testing =cut @@ -73,19 +69,12 @@ package RT::User; use strict; no warnings qw(redefine); -use vars qw(%_USERS_KEY_CACHE); - -%_USERS_KEY_CACHE = (); - use Digest::MD5; use RT::Principals; use RT::ACE; use RT::Interface::Email; use Encode; -# {{{ sub _Accessible - - sub _OverlayAccessible { { @@ -110,62 +99,9 @@ sub _OverlayAccessible { -# }}} - -# {{{ sub Create - =head2 Create { PARAMHASH } -=begin testing - -# Make sure we can create a user - -my $u1 = RT::User->new($RT::SystemUser); -is(ref($u1), 'RT::User'); -my ($id, $msg) = $u1->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-1@example.com'); -ok ($id, "Creating user CreateTest1 - " . $msg ); - -# Make sure we can't create a second user with the same name -my $u2 = RT::User->new($RT::SystemUser); -($id, $msg) = $u2->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-2@example.com'); -ok (!$id, $msg); - - -# Make sure we can't create a second user with the same EmailAddress address -my $u3 = RT::User->new($RT::SystemUser); -($id, $msg) = $u3->Create(Name => 'CreateTest2'.$$, EmailAddress => $$.'create-test-1@example.com'); -ok (!$id, $msg); - -# Make sure we can create a user with no EmailAddress address -my $u4 = RT::User->new($RT::SystemUser); -($id, $msg) = $u4->Create(Name => 'CreateTest3'.$$); -ok ($id, $msg); - -# make sure we can create a second user with no EmailAddress address -my $u5 = RT::User->new($RT::SystemUser); -($id, $msg) = $u5->Create(Name => 'CreateTest4'.$$); -ok ($id, $msg); - -# make sure we can create a user with a blank EmailAddress address -my $u6 = RT::User->new($RT::SystemUser); -($id, $msg) = $u6->Create(Name => 'CreateTest6'.$$, EmailAddress => ''); -ok ($id, $msg); -# make sure we can create a second user with a blankEmailAddress address -my $u7 = RT::User->new($RT::SystemUser); -($id, $msg) = $u7->Create(Name => 'CreateTest7'.$$, EmailAddress => ''); -ok ($id, $msg); - -# Can we change the email address away from from ""; -($id,$msg) = $u7->SetEmailAddress('foo@bar'.$$); -ok ($id, $msg); -# can we change the address back to ""; -($id,$msg) = $u7->SetEmailAddress(''); -ok ($id, $msg); -is ($u7->EmailAddress, ''); - - -=end testing =cut @@ -185,7 +121,7 @@ sub Create { #Check the ACL unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) { - return ( 0, $self->loc('No permission to create users') ); + return ( 0, $self->loc('Permission Denied') ); } @@ -200,9 +136,7 @@ sub Create { - # Privileged is no longer a column in users - my $privileged = $args{'Privileged'}; - delete $args{'Privileged'}; + my $privileged = delete $args{'Privileged'}; if ($args{'CryptedPassword'} ) { @@ -212,8 +146,8 @@ sub Create { elsif ( !$args{'Password'} ) { $args{'Password'} = '*NO-PASSWORD*'; } - elsif ( length( $args{'Password'} ) < $RT::MinimumPasswordLength ) { - return ( 0, $self->loc("Password needs to be at least [_1] characters long",$RT::MinimumPasswordLength) ); + elsif ( length( $args{'Password'} ) < RT->Config->Get('MinimumPasswordLength') ) { + return ( 0, $self->loc("Password needs to be at least [_1] characters long",RT->Config->Get('MinimumPasswordLength')) ); } else { @@ -223,8 +157,6 @@ sub Create { #TODO Specify some sensible defaults. unless ( $args{'Name'} ) { - use Data::Dumper; - $RT::Logger->crit(Dumper \%args); return ( 0, $self->loc("Must specify 'Name' attribute") ); } @@ -234,8 +166,8 @@ sub Create { $TempUser->Load( $args{'Name'} ); return ( 0, $self->loc('Name in use') ) if ( $TempUser->Id ); - return ( 0, $self->loc('Email address in use') ) - unless ( $self->ValidateEmailAddress( $args{'EmailAddress'} ) ); + my ($val, $message) = $self->ValidateEmailAddress( $args{'EmailAddress'} ); + return (0, $message) unless ( $val ); } else { $RT::Logger->warning( "$self couldn't check for pre-existing users"); @@ -324,7 +256,7 @@ sub Create { if ( $record_transaction ) { - $self->_NewTransaction( Type => "Create" ); + $self->_NewTransaction( Type => "Create" ); } $RT::Handle->Commit; @@ -332,12 +264,6 @@ sub Create { return ( $id, $self->loc('User created') ); } -# }}} - - - -# {{{ SetPrivileged - =head2 SetPrivileged BOOL If passed a true value, makes this user a member of the "Privileged" PseudoGroup. @@ -345,20 +271,6 @@ Otherwise, makes this user a member of the "Unprivileged" pseudogroup. Returns a standard RT tuple of (val, msg); -=begin testing - - -ok(my $user = RT::User->new($RT::SystemUser)); -ok($user->Load('root'), "Loaded user 'root'"); -ok($user->Privileged, "User 'root' is privileged"); -ok(my ($v,$m) = $user->SetPrivileged(0)); -ok ($v ==1, "Set unprivileged suceeded ($m)"); -ok(!$user->Privileged, "User 'root' is no longer privileged"); -ok(my ($v2,$m2) = $user->SetPrivileged(1)); -ok ($v2 ==1, "Set privileged suceeded ($m2"); -ok($user->Privileged, "User 'root' is privileged again"); - -=end testing =cut @@ -370,9 +282,9 @@ sub SetPrivileged { unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) { return ( 0, $self->loc('Permission Denied') ); } + my $priv = RT::Group->new($self->CurrentUser); $priv->LoadSystemInternalGroup('Privileged'); - unless ($priv->Id) { $RT::Logger->crit("Could not find Privileged pseudogroup"); return(0,$self->loc("Failed to find 'Privileged' users pseudogroup.")); @@ -385,13 +297,14 @@ sub SetPrivileged { return(0,$self->loc("Failed to find 'Unprivileged' users pseudogroup")); } + my $principal = $self->PrincipalId; if ($val) { - if ($priv->HasMember($self->PrincipalObj)) { + if ($priv->HasMember($principal)) { #$RT::Logger->debug("That user is already privileged"); return (0,$self->loc("That user is already privileged")); } - if ($unpriv->HasMember($self->PrincipalObj)) { - $unpriv->_DeleteMember($self->PrincipalId); + if ($unpriv->HasMember($principal)) { + $unpriv->_DeleteMember($principal); } else { # if we had layered transactions, life would be good # sadly, we have to just go ahead, even if something @@ -399,7 +312,7 @@ sub SetPrivileged { $RT::Logger->crit("User ".$self->Id." is neither privileged nor ". "unprivileged. something is drastically wrong."); } - my ($status, $msg) = $priv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId); + my ($status, $msg) = $priv->_AddMember( InsideTransaction => 1, PrincipalId => $principal); if ($status) { return (1, $self->loc("That user is now privileged")); } else { @@ -407,12 +320,12 @@ sub SetPrivileged { } } else { - if ($unpriv->HasMember($self->PrincipalObj)) { + if ($unpriv->HasMember($principal)) { #$RT::Logger->debug("That user is already unprivileged"); return (0,$self->loc("That user is already unprivileged")); } - if ($priv->HasMember($self->PrincipalObj)) { - $priv->_DeleteMember( $self->PrincipalId); + if ($priv->HasMember($principal)) { + $priv->_DeleteMember( $principal ); } else { # if we had layered transactions, life would be good # sadly, we have to just go ahead, even if something @@ -420,7 +333,7 @@ sub SetPrivileged { $RT::Logger->crit("User ".$self->Id." is neither privileged nor ". "unprivileged. something is drastically wrong."); } - my ($status, $msg) = $unpriv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId); + my ($status, $msg) = $unpriv->_AddMember( InsideTransaction => 1, PrincipalId => $principal); if ($status) { return (1, $self->loc("That user is now unprivileged")); } else { @@ -429,10 +342,6 @@ sub SetPrivileged { } } -# }}} - -# {{{ Privileged - =head2 Privileged Returns true if this user is privileged. Returns undef otherwise. @@ -443,7 +352,7 @@ sub Privileged { my $self = shift; my $priv = RT::Group->new($self->CurrentUser); $priv->LoadSystemInternalGroup('Privileged'); - if ($priv->HasMember($self->PrincipalObj)) { + if ( $priv->HasMember( $self->PrincipalId ) ) { return(1); } else { @@ -451,10 +360,6 @@ sub Privileged { } } -# }}} - -# {{{ sub _BootstrapCreate - #create a user without validating _any_ data. #To be used only on database init. @@ -504,10 +409,6 @@ sub _BootstrapCreate { return ( $id, 'User created' ); } -# }}} - -# {{{ sub Delete - sub Delete { my $self = shift; @@ -515,40 +416,35 @@ sub Delete { } -# }}} - -# {{{ sub Load - =head2 Load Load a user object from the database. Takes a single argument. -If the argument is numerical, load by the column 'id'. Otherwise, load by -the "Name" column which is the user's textual username. +If the argument is numerical, load by the column 'id'. If a user +object or its subclass passed then loads the same user by id. +Otherwise, load by the "Name" column which is the user's textual +username. =cut sub Load { - my $self = shift; + my $self = shift; my $identifier = shift || return undef; - #if it's an int, load by id. otherwise, load by name. if ( $identifier !~ /\D/ ) { - $self->SUPER::LoadById($identifier); + return $self->SUPER::LoadById( $identifier ); + } + elsif ( UNIVERSAL::isa( $identifier, 'RT::User' ) ) { + return $self->SUPER::LoadById( $identifier->Id ); } else { - $self->LoadByCol( "Name", $identifier ); + return $self->LoadByCol( "Name", $identifier ); } } -# }}} - -# {{{ sub LoadByEmail - =head2 LoadByEmail Tries to load this user object from the database by the user's email address. - =cut sub LoadByEmail { @@ -562,18 +458,15 @@ sub LoadByEmail { $address = $self->CanonicalizeEmailAddress($address); - #$RT::Logger->debug("Trying to load an email address: $address\n"); + #$RT::Logger->debug("Trying to load an email address: $address"); return $self->LoadByCol( "EmailAddress", $address ); } -# }}} - -# {{{ LoadOrCreateByEmail - =head2 LoadOrCreateByEmail ADDRESS Attempts to find a user who has the provided email address. If that fails, creates an unprivileged user with -the provided email address. and loads them. +the provided email address and loads them. Address can be provided either as L object +or string which is parsed using the module. Returns a tuple of the user's id and a status message. 0 will be returned in place of the user's id in case of failure. @@ -584,54 +477,45 @@ sub LoadOrCreateByEmail { my $self = shift; my $email = shift; - my ($val, $message); - - my ( $Address, $Name ) = - RT::Interface::Email::ParseAddressFromHeader($email); - $email = $Address; - - $self->LoadByEmail($email); - $message = $self->loc('User loaded'); - unless ($self->Id) { - $self->Load($email); - } - unless($self->Id) { - ( $val, $message ) = $self->Create( - Name => $email, - EmailAddress => $email, - RealName => $Name, - Privileged => 0, - Comments => 'Autocreated when added as a watcher'); - unless ($val) { - # Deal with the race condition of two account creations at once - $self->LoadByEmail($email); - unless ($self->Id) { - sleep 5; - $self->LoadByEmail($email); - } - if ($self->Id) { - $RT::Logger->error("Recovered from creation failure due to race condition"); - $message = $self->loc("User loaded"); - } - else { - $RT::Logger->crit("Failed to create user ".$email .": " .$message); - } - } - } - - if ($self->Id) { - return($self->Id, $message); - } - else { - return(0, $message); - } - - + my ($message, $name); + if ( UNIVERSAL::isa( $email => 'Email::Address' ) ) { + ($email, $name) = ($email->address, $email->phrase); + } else { + ($email, $name) = RT::Interface::Email::ParseAddressFromHeader( $email ); } -# }}} + $self->LoadByEmail( $email ); + $self->Load( $email ) unless $self->Id; + $message = $self->loc('User loaded'); -# {{{ sub ValidateEmailAddress + unless( $self->Id ) { + my $val; + ($val, $message) = $self->Create( + Name => $email, + EmailAddress => $email, + RealName => $name, + Privileged => 0, + Comments => 'Autocreated when added as a watcher', + ); + unless ( $val ) { + # Deal with the race condition of two account creations at once + $self->LoadByEmail( $email ); + unless ( $self->Id ) { + sleep 5; + $self->LoadByEmail( $email ); + } + if ( $self->Id ) { + $RT::Logger->error("Recovered from creation failure due to race condition"); + $message = $self->loc("User loaded"); + } + else { + $RT::Logger->crit("Failed to create user ". $email .": " .$message); + } + } + } + return (0, $message) unless $self->id; + return ($self->Id, $message); +} =head2 ValidateEmailAddress ADDRESS @@ -647,24 +531,86 @@ sub ValidateEmailAddress { # if the email address is null, it's always valid return (1) if ( !$Value || $Value eq "" ); + if ( RT->Config->Get('ValidateUserEmailAddresses') ) { + # We only allow one valid email address + my @addresses = Email::Address->parse($Value); + return ( 0, $self->loc('Invalid syntax for email address') ) unless ( ( scalar (@addresses) == 1 ) && ( $addresses[0]->address ) ); + } + + my $TempUser = RT::User->new($RT::SystemUser); $TempUser->LoadByEmail($Value); - if ( $TempUser->id && ( $TempUser->id != $self->id ) ) + if ( $TempUser->id && ( !$self->id || $TempUser->id != $self->id ) ) { # if we found a user with that address # it's invalid to set this user's address to it - return (undef); + return ( 0, $self->loc('Email address in use') ); } else { #it's a valid email address return (1); } } -# }}} +=head2 SetEmailAddress + +Check to make sure someone else isn't using this email address already +so that a better email address can be returned -# {{{ sub CanonicalizeEmailAddress +=cut + +sub SetEmailAddress { + my $self = shift; + my $Value = shift; + + my ($val, $message) = $self->ValidateEmailAddress( $Value ); + if ( $val ) { + return $self->_Set( Field => 'EmailAddress', Value => $Value ); + } else { + return ( 0, $message ) + } + +} +=head2 EmailFrequency +Takes optional Ticket argument in paramhash. Returns 'no email', +'squelched', 'daily', 'weekly' or empty string depending on +user preferences. + +=over 4 + +=item 'no email' - user has no email, so can not recieve notifications. + +=item 'squelched' - returned only when Ticket argument is provided and +notifications to the user has been supressed for this ticket. + +=item 'daily' - retruned when user recieve daily messages digest instead +of immediate delivery. + +=item 'weekly' - previous, but weekly. + +=item empty string returned otherwise. + +=back + +=cut + +sub EmailFrequency { + my $self = shift; + my %args = ( + Ticket => undef, + @_ + ); + return '' unless $self->id && $self->id != $RT::Nobody->id + && $self->id != $RT::SystemUser->id; + return 'no email' unless my $email = $self->EmailAddress; + return 'squelched' if $args{'Ticket'} && + grep lc $email eq lc $_->Content, $args{'Ticket'}->SquelchMailTo; + my $frequency = RT->Config->Get( 'EmailFrequency', $self ) || ''; + return 'daily' if $frequency =~ /daily/i; + return 'weekly' if $frequency =~ /weekly/i; + return ''; +} =head2 CanonicalizeEmailAddress ADDRESS @@ -682,19 +628,14 @@ sub CanonicalizeEmailAddress { # Example: the following rule would treat all email # coming from a subdomain as coming from second level domain # foo.com - if ($RT::CanonicalizeEmailAddressMatch && $RT::CanonicalizeEmailAddressReplace ) { - $email =~ s/$RT::CanonicalizeEmailAddressMatch/$RT::CanonicalizeEmailAddressReplace/gi; + if ( my $match = RT->Config->Get('CanonicalizeEmailAddressMatch') and + my $replace = RT->Config->Get('CanonicalizeEmailAddressReplace') ) + { + $email =~ s/$match/$replace/gi; } return ($email); } - -# }}} - -# {{{ sub CanonicalizeUserInfo - - - =head2 CanonicalizeUserInfo HASH of ARGS CanonicalizeUserInfo can convert all User->Create options. @@ -715,14 +656,9 @@ sub CanonicalizeUserInfo { } -# }}} - - -# {{{ Password related functions - -# {{{ sub SetRandomPassword +=head2 Password and authentication related functions -=head2 SetRandomPassword +=head3 SetRandomPassword Takes no arguments. Returns a status code and a new password or an error message. If the status is 1, the second value returned is the new password. @@ -738,8 +674,8 @@ sub SetRandomPassword { } - my $min = ( $RT::MinimumPasswordLength > 6 ? $RT::MinimumPasswordLength : 6); - my $max = ( $RT::MinimumPasswordLength > 8 ? $RT::MinimumPasswordLength : 8); + my $min = ( RT->Config->Get('MinimumPasswordLength') > 6 ? RT->Config->Get('MinimumPasswordLength') : 6); + my $max = ( RT->Config->Get('MinimumPasswordLength') > 8 ? RT->Config->Get('MinimumPasswordLength') : 8); my $pass = $self->GenerateRandomPassword( $min, $max) ; @@ -755,11 +691,7 @@ sub SetRandomPassword { } -# }}} - -# {{{ sub ResetPassword - -=head2 ResetPassword +=head3 ResetPassword Returns status, [ERROR or new password]. Resets this user\'s password to a randomly generated pronouncable password and emails them, using a @@ -781,38 +713,13 @@ sub ResetPassword { return ( 0, "$pass" ); } - my $template = RT::Template->new( $self->CurrentUser ); - - if ( $self->Privileged ) { - $template->LoadGlobalTemplate('RT_PasswordChange_Privileged'); - } - else { - $template->LoadGlobalTemplate('RT_PasswordChange_NonPrivileged'); - } - - unless ( $template->Id ) { - $template->LoadGlobalTemplate('RT_PasswordChange'); - } - - unless ( $template->Id ) { - $RT::Logger->crit( "$self tried to send " - . $self->Name - . " a password reminder " - . "but couldn't find a password change template" ); - } - - my $notification = RT::Action::SendPasswordEmail->new( - TemplateObj => $template, - Argument => $pass - ); - - $notification->SetHeader( 'To', $self->EmailAddress ); - - my ($ret); - $ret = $notification->Prepare(); - if ($ret) { - $ret = $notification->Commit(); - } + my $ret = RT::Interface::Email::SendEmailUsingTemplate( + To => $self->EmailAddress, + Template => 'PasswordChange', + Arguments => { + NewPassword => $pass, + }, + ); if ($ret) { return ( 1, $self->loc('New password notification sent') ); @@ -823,11 +730,7 @@ sub ResetPassword { } -# }}} - -# {{{ sub GenerateRandomPassword - -=head2 GenerateRandomPassword MIN_LEN and MAX_LEN +=head3 GenerateRandomPassword MIN_LEN and MAX_LEN Returns a random password between MIN_LEN and MAX_LEN characters long. @@ -1013,11 +916,7 @@ sub _GenerateRandomNextChar { return ($i); } -# }}} - -# {{{ sub SetPassword - -=head2 SetPassword +=head3 SetPassword Takes a string. Checks the string's length and sets this user's password to that string. @@ -1035,8 +934,8 @@ sub SetPassword { if ( !$password ) { return ( 0, $self->loc("No password set") ); } - elsif ( length($password) < $RT::MinimumPasswordLength ) { - return ( 0, $self->loc("Password needs to be at least [_1] characters long", $RT::MinimumPasswordLength) ); + elsif ( length($password) < RT->Config->Get('MinimumPasswordLength') ) { + return ( 0, $self->loc("Password needs to be at least [_1] characters long", RT->Config->Get('MinimumPasswordLength')) ); } else { my $new = !$self->HasPassword; @@ -1053,7 +952,7 @@ sub SetPassword { } -=head2 _GeneratePassword PASSWORD +=head3 _GeneratePassword PASSWORD returns an MD5 hash of the password passed in, in hexadecimal encoding. @@ -1069,7 +968,7 @@ sub _GeneratePassword { } -=head2 _GeneratePasswordBase64 PASSWORD +=head3 _GeneratePasswordBase64 PASSWORD returns an MD5 hash of the password passed in, in base64 encoding (obsoleted now). @@ -1086,16 +985,12 @@ sub _GeneratePasswordBase64 { } -# }}} - - -=head2 HasPassword +=head3 HasPassword Returns true if the user has a valid password, otherwise returns false. =cut - sub HasPassword { my $self = shift; my $pwd = $self->__Value('Password'); @@ -1105,10 +1000,7 @@ sub HasPassword { return 1; } - -# {{{ sub IsPassword - -=head2 IsPassword +=head3 IsPassword Returns true if the passed in value is this user's password. Returns undef otherwise. @@ -1155,13 +1047,80 @@ sub IsPassword { return (undef); } -# }}} +=head3 AuthToken -# }}} +Returns an authentication string associated with the user. This +string can be used to generate passwordless URLs to integrate +RT with services and programms like callendar managers, rss +readers and other. + +=cut + +sub AuthToken { + my $self = shift; + my $secret = $self->FirstAttribute("AuthToken"); + return $secret->Content if $secret; + + my $id = $self->id; + $self = RT::User->new( $RT::SystemUser ); + $self->Load( $id ); + $secret = substr(Digest::MD5::md5_hex(time . {} . rand()),0,16); + my ($status, $msg) = $self->SetAttribute( Name => "AuthToken", Content => $secret ); + unless ( $status ) { + $RT::Logger->error( "Couldn't set auth token: $msg" ); + return undef; + } + return $secret; +} -# {{{ sub SetDisabled +=head3 GenerateAuthToken -=head2 Sub SetDisabled +Generate a random authentication string for the user. + +=cut + +sub GenerateAuthToken { + my $self = shift; + my $token = substr(Digest::MD5::md5_hex(time . {} . rand()),0,16); + return $self->SetAttribute( Name => "AuthToken", Content => $token ); +} + +=head3 GenerateAuthString + +Takes a string and returns back a hex hash string. Later you can use +this pair to make sure it's generated by this user using L + +=cut + +sub GenerateAuthString { + my $self = shift; + my $protect = shift; + + my $str = $self->AuthToken . $protect; + utf8::encode($str); + + return substr(Digest::MD5::md5_hex($str),0,16); +} + +=head3 ValidateAuthString + +Takes auth string and protected string. Returns true is protected string +has been protected by user's L. See also L. + +=cut + +sub ValidateAuthString { + my $self = shift; + my $auth_string = shift; + my $protected = shift; + + my $str = $self->AuthToken . $protected; + utf8::encode( $str ); + + return $auth_string eq substr(Digest::MD5::md5_hex($str),0,16); +} + +=head2 SetDisabled Toggles the user's disabled flag. If this flag is @@ -1170,53 +1129,69 @@ user will fail. The user will appear in no user listings. =cut -# }}} - sub SetDisabled { my $self = shift; + my $val = shift; unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) { return (0, $self->loc('Permission Denied')); } - return $self->PrincipalObj->SetDisabled(@_); + + $RT::Handle->BeginTransaction(); + my $set_err = $self->PrincipalObj->SetDisabled($val); + unless ($set_err) { + $RT::Handle->Rollback(); + $RT::Logger->warning(sprintf("Couldn't %s user %s", ($val == 1) ? "disable" : "enable", $self->PrincipalObj->Id)); + return (undef); + } + $self->_NewTransaction( Type => ($val == 1) ? "Disabled" : "Enabled" ); + + $RT::Handle->Commit(); + + if ( $val == 1 ) { + return (1, $self->loc("User disabled")); + } else { + return (1, $self->loc("User enabled")); + } + } +=head2 Disabled + +Returns true if user is disabled or false otherwise + +=cut + sub Disabled { my $self = shift; return $self->PrincipalObj->Disabled(@_); } - -# {{{ Principal related routines - =head2 PrincipalObj Returns the principal object for this user. returns an empty RT::Principal if there's no principal object matching this user. The response is cached. PrincipalObj should never ever change. -=begin testing - -ok(my $u = RT::User->new($RT::SystemUser)); -ok($u->Load(1), "Loaded the first user"); -ok($u->PrincipalObj->ObjectId == 1, "user 1 is the first principal"); -is($u->PrincipalObj->PrincipalType, 'User' , "Principal 1 is a user, not a group"); - -=end testing - =cut - sub PrincipalObj { my $self = shift; - unless ($self->{'PrincipalObj'} && - ($self->{'PrincipalObj'}->ObjectId == $self->Id) && - ($self->{'PrincipalObj'}->PrincipalType eq 'User')) { - $self->{'PrincipalObj'} = RT::Principal->new($self->CurrentUser); - $self->{'PrincipalObj'}->LoadByCols('ObjectId' => $self->Id, - 'PrincipalType' => 'User') ; - } - return($self->{'PrincipalObj'}); + unless ( $self->id ) { + $RT::Logger->error("Couldn't get principal for not loaded object"); + return undef; + } + + my $obj = RT::Principal->new( $self->CurrentUser ); + $obj->LoadById( $self->id ); + unless ( $obj->id ) { + $RT::Logger->crit( 'No principal for user #'. $self->id ); + return undef; + } elsif ( $obj->PrincipalType ne 'User' ) { + $RT::Logger->crit( 'User #'. $self->id .' has principal of '. $obj->PrincipalType .' type' ); + return undef; + } + return $obj; } @@ -1231,12 +1206,6 @@ sub PrincipalId { return $self->Id; } -# }}} - - - -# {{{ sub HasGroupRight - =head2 HasGroupRight Takes a paramhash which can contain @@ -1267,14 +1236,11 @@ sub HasGroupRight { $args{'GroupObj'}->Load( $args{'Group'} ); } - # {{{ Validate and load up the GroupId + # Validate and load up the GroupId unless ( ( defined $args{'GroupObj'} ) and ( $args{'GroupObj'}->Id ) ) { return undef; } - # }}} - - # Figure out whether a user has the right we're asking about. my $retval = $self->HasRight( Object => $args{'GroupObj'}, @@ -1282,14 +1248,8 @@ sub HasGroupRight { ); return ($retval); - - } -# }}} - -# {{{ sub OwnGroups - =head2 OwnGroups Returns a group collection object containing the groups of which this @@ -1302,7 +1262,7 @@ sub OwnGroups { my $groups = RT::Groups->new($self->CurrentUser); $groups->LimitToUserDefinedGroups; $groups->WithMember(PrincipalId => $self->Id, - Recursively => 1); + Recursively => 1); return $groups; } @@ -1815,20 +1775,15 @@ ok($rqv, "Revoked the right successfully - $rqm"); =head2 HasRight -Shim around PrincipalObj->HasRight. See RT::Principal +Shim around PrincipalObj->HasRight. See L. =cut sub HasRight { - my $self = shift; return $self->PrincipalObj->HasRight(@_); } -# }}} - -# {{{ sub CurrentUserCanModify - =head2 CurrentUserCanModify RIGHT If the user has rights for this object, either because @@ -1866,10 +1821,6 @@ sub CurrentUserCanModify { } -# }}} - -# {{{ sub CurrentUserHasRight - =head2 CurrentUserHasRight Takes a single argument. returns 1 if $Self->CurrentUser @@ -1887,19 +1838,17 @@ sub CurrentUserHasRight { sub _PrefName { my $name = shift; if (ref $name) { - $name = ref ($name).'-'.$name->Id; + $name = ref($name).'-'.$name->Id; } return 'Pref-'.$name; } -# {{{ sub Preferences - =head2 Preferences NAME/OBJ DEFAULT - Obtain user preferences associated with given object or name. - Returns DEFAULT if no preferences found. If DEFAULT is a hashref, - override the entries with user preferences. +Obtain user preferences associated with given object or name. +Returns DEFAULT if no preferences found. If DEFAULT is a hashref, +override the entries with user preferences. =cut @@ -1908,53 +1857,49 @@ sub Preferences { my $name = _PrefName (shift); my $default = shift; - my $attr = RT::Attribute->new ($self->CurrentUser); - $attr->LoadByNameAndObject (Object => $self, Name => $name); + my $attr = RT::Attribute->new( $self->CurrentUser ); + $attr->LoadByNameAndObject( Object => $self, Name => $name ); my $content = $attr->Id ? $attr->Content : undef; - if (ref ($content) eq 'HASH') { - if (ref ($default) eq 'HASH') { - for (keys %$default) { - exists $content->{$_} or $content->{$_} = $default->{$_}; - } - } - elsif (defined $default) { - $RT::Logger->error("Preferences $name for user".$self->Id." is hash but default is not"); - } - return $content; + unless ( ref $content eq 'HASH' ) { + return defined $content ? $content : $default; } - else { - return defined $content ? $content : $default; + + if (ref $default eq 'HASH') { + for (keys %$default) { + exists $content->{$_} or $content->{$_} = $default->{$_}; + } + } + elsif (defined $default) { + $RT::Logger->error("Preferences $name for user".$self->Id." is hash but default is not"); } + return $content; } -# }}} - -# {{{ sub SetPreferences - =head2 SetPreferences NAME/OBJ VALUE - Set user preferences associated with given object or name. +Set user preferences associated with given object or name. =cut sub SetPreferences { - my $self = shift; - my $name = _PrefName (shift); + my $self = shift; + my $name = _PrefName( shift ); my $value = shift; - my $attr = RT::Attribute->new ($self->CurrentUser); - $attr->LoadByNameAndObject (Object => $self, Name => $name); - if ($attr->Id) { - return $attr->SetContent ($value); + + return (0, $self->loc("No permission to set preferences")) + unless $self->CurrentUserCanModify('Preferences'); + + my $attr = RT::Attribute->new( $self->CurrentUser ); + $attr->LoadByNameAndObject( Object => $self, Name => $name ); + if ( $attr->Id ) { + return $attr->SetContent( $value ); } else { - return $self->AddAttribute ( Name => $name, Content => $value ); + return $self->AddAttribute( Name => $name, Content => $value ); } } -# }}} - - =head2 WatchedQueues ROLE_LIST Returns a RT::Queues object containing every queue watched by the user. @@ -2024,9 +1969,6 @@ sub WatchedQueues { } - -# {{{ sub _CleanupInvalidDelegations - =head2 _CleanupInvalidDelegations { InsideTransaction => undef } Revokes all ACE entries delegated by this user which are inconsistent @@ -2049,63 +1991,59 @@ and logs an internal error if the deletion fails (should not happen). sub _CleanupInvalidDelegations { my $self = shift; my %args = ( InsideTransaction => undef, - @_ ); + @_ ); unless ( $self->Id ) { - $RT::Logger->warning("User not loaded."); - return (undef); + $RT::Logger->warning("User not loaded."); + return (undef); } my $in_trans = $args{InsideTransaction}; return(1) if ($self->HasRight(Right => 'DelegateRights', - Object => $RT::System)); + Object => $RT::System)); # Look up all delegation rights currently posessed by this user. my $deleg_acl = RT::ACL->new($RT::SystemUser); $deleg_acl->LimitToPrincipal(Type => 'User', - Id => $self->PrincipalId, - IncludeGroupMembership => 1); + Id => $self->PrincipalId, + IncludeGroupMembership => 1); $deleg_acl->Limit( FIELD => 'RightName', - OPERATOR => '=', - VALUE => 'DelegateRights' ); + OPERATOR => '=', + VALUE => 'DelegateRights' ); my @allowed_deleg_objects = map {$_->Object()} - @{$deleg_acl->ItemsArrayRef()}; + @{$deleg_acl->ItemsArrayRef()}; # Look up all rights delegated by this principal which are # inconsistent with the allowed delegation objects. my $acl_to_del = RT::ACL->new($RT::SystemUser); $acl_to_del->DelegatedBy(Id => $self->Id); foreach (@allowed_deleg_objects) { - $acl_to_del->LimitNotObject($_); + $acl_to_del->LimitNotObject($_); } # Delete all disallowed delegations while ( my $ace = $acl_to_del->Next() ) { - my $ret = $ace->_Delete(InsideTransaction => 1); - unless ($ret) { - $RT::Handle->Rollback() unless $in_trans; - $RT::Logger->warning("Couldn't delete delegated ACL entry ".$ace->Id); - return (undef); - } + my $ret = $ace->_Delete(InsideTransaction => 1); + unless ($ret) { + $RT::Handle->Rollback() unless $in_trans; + $RT::Logger->warning("Couldn't delete delegated ACL entry ".$ace->Id); + return (undef); + } } $RT::Handle->Commit() unless $in_trans; return (1); } -# }}} - -# {{{ sub _Set - sub _Set { my $self = shift; my %args = ( Field => undef, Value => undef, - TransactionType => 'Set', - RecordTransaction => 1, + TransactionType => 'Set', + RecordTransaction => 1, @_ ); @@ -2122,7 +2060,7 @@ sub _Set { my $Old = $self->SUPER::_Value("$args{'Field'}"); my ($ret, $msg) = $self->SUPER::_Set( Field => $args{'Field'}, - Value => $args{'Value'} ); + Value => $args{'Value'} ); #If we can't actually set the field to the value, don't record # a transaction. instead, get out of here. @@ -2144,10 +2082,6 @@ sub _Set { } } -# }}} - -# {{{ sub _Value - =head2 _Value Takes the name of a table column. @@ -2175,7 +2109,7 @@ sub _Value { #If the user wants to see their own values, let them # TODO figure ouyt a better way to deal with this - elsif ( $self->CurrentUser->Id == $self->Id ) { + elsif ( defined($self->Id) && $self->CurrentUser->Id == $self->Id ) { return ( $self->SUPER::_Value($field) ); } @@ -2189,14 +2123,96 @@ sub _Value { } -# }}} +=head2 FriendlyName + +Return the friendly name + +=cut + +sub FriendlyName { + my $self = shift; + return $self->RealName if defined($self->RealName); + return $self->Name if defined($self->Name); + return ""; +} + +=head2 PreferredKey + +Returns the preferred key of the user. If none is set, then this will query +GPG and set the preferred key to the maximally trusted key found (and then +return it). Returns C if no preferred key can be found. + +=cut + +sub PreferredKey +{ + my $self = shift; + return undef unless RT->Config->Get('GnuPG')->{'Enable'}; + my $prefkey = $self->FirstAttribute('PreferredKey'); + return $prefkey->Content if $prefkey; + + # we don't have a preferred key for this user, so now we must query GPG + require RT::Crypt::GnuPG; + my %res = RT::Crypt::GnuPG::GetKeysForEncryption($self->EmailAddress); + return undef unless defined $res{'info'}; + my @keys = @{ $res{'info'} }; + return undef if @keys == 0; + + if (@keys == 1) { + $prefkey = $keys[0]->{'Fingerprint'}; + } + else { + # prefer the maximally trusted key + @keys = sort { $b->{'TrustLevel'} <=> $a->{'TrustLevel'} } @keys; + $prefkey = $keys[0]->{'Fingerprint'}; + } + + $self->SetAttribute(Name => 'PreferredKey', Content => $prefkey); + return $prefkey; +} + +sub PrivateKey { + my $self = shift; + + my $key = $self->FirstAttribute('PrivateKey') or return undef; + return $key->Content; +} + +sub SetPrivateKey { + my $self = shift; + my $key = shift; + # XXX: ACL + unless ( $key ) { + my ($status, $msg) = $self->DeleteAttribute('PrivateKey'); + unless ( $status ) { + $RT::Logger->error( "Couldn't delete attribute: $msg" ); + return ($status, $self->loc("Couldn't unset private key")); + } + return ($status, $self->loc("Unset private key")); + } + + # check that it's really private key + { + my %tmp = RT::Crypt::GnuPG::GetKeysForSigning( $key ); + return (0, $self->loc("No such key or it's not suitable for signing")) + if $tmp{'exit_code'} || !$tmp{'info'}; + } + + my ($status, $msg) = $self->SetAttribute( + Name => 'PrivateKey', + Content => $key, + ); + return ($status, $self->loc("Couldn't set private key")) + unless $status; + return ($status, $self->loc("Unset private key")); +} sub BasicColumns { ( - [ Name => 'User Id' ], - [ EmailAddress => 'Email' ], - [ RealName => 'Name' ], - [ Organization => 'Organization' ], + [ Name => 'User Id' ], + [ EmailAddress => 'Email' ], + [ RealName => 'Name' ], + [ Organization => 'Organization' ], ); } diff --git a/rt/lib/RT/Users_Overlay.pm b/rt/lib/RT/Users_Overlay.pm index bdc7074ff..32fb393cf 100644 --- a/rt/lib/RT/Users_Overlay.pm +++ b/rt/lib/RT/Users_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,6 +45,7 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + =head1 NAME RT::Users - Collection of RT::User objects @@ -59,11 +60,6 @@ =head1 METHODS -=begin testing - -ok(require RT::Users); - -=end testing =cut @@ -232,68 +228,6 @@ sub LimitToPrivileged { =head2 WhoHaveRight { Right => 'name', Object => $rt_object , IncludeSuperusers => undef, IncludeSubgroupMembers => undef, IncludeSystemRights => undef, EquivObjects => [ ] } -=begin testing - -ok(my $users = RT::Users->new($RT::SystemUser)); -$users->WhoHaveRight(Object =>$RT::System, Right =>'SuperUser'); -ok($users->Count == 1, "There is one privileged superuser - Found ". $users->Count ); -# TODO: this wants more testing - -my $RTxUser = RT::User->new($RT::SystemUser); -($id, $msg) = $RTxUser->Create( Name => 'RTxUser', Comments => "RTx extension user", Privileged => 1); -ok ($id,$msg); - -my $group = RT::Group->new($RT::SystemUser); -$group->LoadACLEquivalenceGroup($RTxUser->PrincipalObj); - -my $RTxSysObj = {}; -bless $RTxSysObj, 'RTx::System'; -*RTx::System::Id = sub { 1; }; -*RTx::System::id = *RTx::System::Id; -my $ace = RT::Record->new($RT::SystemUser); -$ace->Table('ACL'); -$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); -($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System', ObjectId => 1 ); -ok ($id, "ACL for RTxSysObj created"); - -my $RTxObj = {}; -bless $RTxObj, 'RTx::System::Record'; -*RTx::System::Record::Id = sub { 4; }; -*RTx::System::Record::id = *RTx::System::Record::Id; - -$users = RT::Users->new($RT::SystemUser); -$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxSysObj); -is($users->Count, 1, "RTxUserRight found for RTxSysObj"); - -$users = RT::Users->new($RT::SystemUser); -$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj); -is($users->Count, 0, "RTxUserRight not found for RTxObj"); - -$users = RT::Users->new($RT::SystemUser); -$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]); -is($users->Count, 1, "RTxUserRight found for RTxObj using EquivObjects"); - -$ace = RT::Record->new($RT::SystemUser); -$ace->Table('ACL'); -$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); -($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System::Record', ObjectId => 5 ); -ok ($id, "ACL for RTxObj created"); - -my $RTxObj2 = {}; -bless $RTxObj2, 'RTx::System::Record'; -*RTx::System::Record::Id = sub { 5; }; -*RTx::System::Record::id = sub { 5; }; - -$users = RT::Users->new($RT::SystemUser); -$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2); -is($users->Count, 1, "RTxUserRight found for RTxObj2"); - -$users = RT::Users->new($RT::SystemUser); -$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]); -is($users->Count, 1, "RTxUserRight found for RTxObj2"); - - -=end testing find all users who the right Right for this group, either individually or as members of groups @@ -363,6 +297,16 @@ sub _JoinACL @_, ); + if ( $args{'Right'} ) { + my $canonic = RT::ACE->CanonicalizeRightName( $args{'Right'} ); + unless ( $canonic ) { + $RT::Logger->error("Invalid right. Couldn't canonicalize right '$args{'Right'}'"); + } + else { + $args{'Right'} = $canonic; + } + } + my $acl = $self->NewAlias('ACL'); $self->Limit( ALIAS => $acl, @@ -403,7 +347,7 @@ sub _GetEquivObjects # XXX: This should be abstracted into object itself if( $args{'Object'}->id ) { - push @objects, $args{'Object'}->QueueObj; + push @objects, $args{'Object'}->ACLEquivalenceObjects; } else { push @objects, 'RT::Queue'; } diff --git a/rt/lib/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/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: -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 ; 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 -To: Jesse Vincent , - rt-users -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: -List-Post: -List-Subscribe: , - -List-Id: For users of RT: Request Tracker -List-Unsubscribe: , - -List-Archive: -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 -: - -> 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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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 ; 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 -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: -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: -Sender: (Network Operation Center) -To: mitya@example.com -Date: Thu, 11 Dec 2003 15:17:45 +0300 -Message-ID: -X-Original-Return-Path: -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 ; 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 ; 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" -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 - - - - - - - - - - - - -
-
Somebody at IP 127.0.0.1 scanned my ports.
-
 
-
 
- - - - - -
---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: -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 ; 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 ; 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" -MIME-Version: 1.0 -X-Mailer: Internet Mail Service (5.5.2653.19) -To: "'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 - - - - - - - - -

Hello,

ist this kind of Messa= -ges, that=20 -causes rt to crash.

Mit freundlichen Gr=FC=DFen
Gregor=20 -Stever      ^^causes Error!!
- - -------_=_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: -Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT) -From: Mail Delivery Subsystem -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 ----- - - - ---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 ... 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: -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 ; Sat, 23 Aug 2003 00:15:17 +0800 -Message-Id: <200308221615.h7MGFGac020135@mx12.other.example.com> -From: -To: -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: -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 ; 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 -To: rt-0.0-bugs@fsck.com -Subject: Example MIME within MIME within MIME message -Message-ID: -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: -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: -Content-Description: first outer message (fwd) - -Date: Fri, 12 Jul 2002 17:32:37 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: first outer message -Message-ID: -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: -Content-Description: Digest of 2 messages - ---12654081-387266385-1026487957=:25020 -Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII -Content-ID: -Content-Description: middle message (fwd) - -Date: Fri, 12 Jul 2002 17:31:45 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: middle message -Message-ID: -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: -Content-Description: Digest of 2 messages - ---12654081-1221085552-1026487905=:25020 -Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII -Content-ID: -Content-Description: This is the inner-most message (fwd) - -Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: This is the inner-most message -Message-ID: -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: -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 -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: -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: -Content-Description: middle message (fwd) - -Date: Fri, 12 Jul 2002 17:32:05 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: middle message -Message-ID: -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: -Content-Description: Digest of 2 messages - ---12654081-128832654-1026487925=:25020 -Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII -Content-ID: -Content-Description: This is the inner-most message (fwd) - -Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: This is the inner-most message -Message-ID: -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: -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 -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: -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: -Content-Description: 2nd outer message (fwd) - -Date: Fri, 12 Jul 2002 17:32:54 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: 2nd outer message -Message-ID: -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: -Content-Description: Digest of 2 messages - ---12654081-362457126-1026487974=:25020 -Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII -Content-ID: -Content-Description: middle message (fwd) - -Date: Fri, 12 Jul 2002 17:31:45 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: middle message -Message-ID: -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: -Content-Description: Digest of 2 messages - ---12654081-1221085552-1026487905=:25020 -Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII -Content-ID: -Content-Description: This is the inner-most message (fwd) - -Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: This is the inner-most message -Message-ID: -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: -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 -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: -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: -Content-Description: middle message (fwd) - -Date: Fri, 12 Jul 2002 17:32:05 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: middle message -Message-ID: -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: -Content-Description: Digest of 2 messages - ---12654081-128832654-1026487925=:25020 -Content-Type: MESSAGE/RFC822; CHARSET=US-ASCII -Content-ID: -Content-Description: This is the inner-most message (fwd) - -Date: Fri, 12 Jul 2002 17:30:31 +0200 (CEST) -From: Xxxxxx Yyyyyyy -X-X-Sender: bc@x22.some.net -To: Xxxxxx_Yyyyyyy@some.net -Subject: This is the inner-most message -Message-ID: -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: -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 -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: -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: -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 ; 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 -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 -Subject: [Jonas Liljegren] Re: [Para] =?iso-8859-1?q?Niv=E5er=3F?= -From: Jonas Liljegren -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 -Resent-Message-Id: -Resent-Sender: Jonas Liljegren -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: -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 -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: Öppen lista för alla medlemmar -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-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" 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: -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 ; 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 -From: Wilhelmsen Håvard -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 -From: Wilhelmsen Håvard -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 ø å 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: -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 ; 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" -To: jesse@vendor.example.com -Cc: support@example.com -Message-ID: -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-$(%-Y56:T,@P9,: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[')L[3G?=15_P#BG`0"[/=(W;N3NJ@/J]>8PG=M(5'#_`)CL>Z`7CY]1=`[$Y50& -M1,Y]BF&^G!]I07_XRII!#JD3]E(ROHU9_/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(+\`#^+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\)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\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@`3L`F@0!0`")).=10F`,SG9*`Y^DS'9#0VZM.' -M@0=NZ51S@XYR=PG9IF'?1!4<)QF4!`X&TTQ@",3R5'[%V$1,Y\B8S&Q0:S^;4")R9@(2^`

T[ -M)`@^IH&GL%%2-?@B8^J;60">3]T+=C.J1O@_ND<_U8'(RJ8`/)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@-_BVZ.>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$)+@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$+R(+B![(IY&DQN$!U$=OE*99G;V0ZVDSVXE7:0I$@DY12W5 -MF0.P47ID%(N@03]R@.1DL'ZH#_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/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/S8PGQ&R%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[8@M^"J#<1&QE-SL0.Y2(SOLE'IF<($XB$3P0[)"%VD9!D#^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,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*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"-LRBGYH`$85"!G@'ZIG0>$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+!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.9.4[OR['L"A<1$`A&_\`(.!.854F-(:?4?A$6AKX[;Y3 -M4G.#,[=RE.!(CNB'=&X.R8F``,)2X',0)"B)).T245(..>=L)B -MXX0'R!SAP),>R1Y(SV]D+V_S2V))YE,T:F@`X"J)&2UI -M'._*1Q$&/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&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^L#$#$8P@:3DD@J5X<##?Z9)([J(?F_+)B9E`#IG<`\2FEN=L?JB%4($Y"!Q#8&1[]TG26`Z<`;=DG0&C[HH0,R -M('(.\*H?`@'O.-T+RUOIW,Y@J:XHU:5.G4 -MJTRT5&ZV3R-I^X4+H+BXE.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`Y,X1/]1)!`&T(H6Q'..QW0^^Q]D1/],`X2!<<_\` -M9,2Z?RC!X1%IRX?=,-RPF$\>HC()V2<'!V/ZNZ%WYL#G[J=D$W#=S')'9"-B=C*+,3JG[X2:#C(SW5 -M#M(U>TIB8P"!GE-FV4[`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-1R?9*EI%3+CGA`FEQ-, -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%"HU7-I-;)V1^>[N5'2CRQZ47 -MI_PE39__`%9N'D/=#RP$&8Y"H5B7`Q!`5V]U$G<-E4:N9_:%:(B!I^,B5&X0 -M,GTF`/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"Z*$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\: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&(2Y(&??=/Z=XD#W3TV4RQQ=4T -MXD")DJ@=,TX'U!&4G%L@D$GB.4G$EH``B(D(20!I`@2@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(;@[CDJ1FJRHO4R`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#^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-2=T\S)XVC=`8$"03GW1`B3.2>5 -M%Z_\7UE$9`$\\I%&X"(+H[(@V!+=O9!,M&04B3.`?NH#C5MN4[!GT)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(;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\-&"#)[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,8YI8?V(^BJA[#<$ -MAH:'&8_LJBRS\H_-]"G^CONI*8.@:=D\.[JFCU]&K))!6=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&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,,#4`09+@G>`3@$?(1@M!)(WY"3CB8&>4#.C@P1S")T!QS(3-=C2(SR43 -ML.:"=N`B!,1)"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.$,G8WL$`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>$X5+W -M0U\`&!LXB/T5&IVP<[;Z=;HG'?95:H<6N&J`-_4LU5>J6R=(`GA`UPU3 -MSP0C<,'T_=!I,@$1/"BE-,$:@2W8B>4PC2X:=_N$B#IEP&/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*0F2H]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:4=4`50U -MC1,3/=,,.D`X_J*>OZB=R1G]%+RL5WODZ1W&,B$X75>_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&",`DG7-`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\3G[),P@88$"3^RD8)]_K*`F#\HTJ:@TEQ#),]LRE86]6X -MJM928YQ=@87J/X=?A_YY9+,LX\!L_PUJNM -M]=1V>T#O\KG_`!7X3J=(`<8=G;_9]U]']4MF6EN8;@+R[Q9:U>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.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<,> -MQ2HQ]%C:-,N.MX;/L)W*@ -MID8D&$.!DC/:4[QB3./="#O\;2G_`%#@1.?OA$T&1/*!L3`XW`*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*`[$%Q^94-$./5&=TY] -M6"YL43>8)RB#P7', -M`I,,`_XB<&4V(@G*$>DY!)E!(UKC@[)SO&J!W(0M#B,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%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),GU?'_Y>,_LYUG23H]69[*Q;],8QTP#P!V6Z*=,4/'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@\PCHOF>%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#,2B;!SB`/ -MNF8-6J8QF$YTGL([H%)B"A8)SC")FF9)D>R1&"-`^Z!FZ2!,(V#!C9`S)C`" -MDIZ)&H`*:@T:B'\;94+&@G8#WV5FDT;8'U07NAV#[J]ITJ8U&HZ.Z^ -MCOPPZ"VRZ328&@$-$XB5X_\`@OTT777FU32U"G]>R^DO#EJVG;LP-EC*Z!W0VS0T",?"O-8'-Y*YTD*W;F8PK0IEPD;)K.E(R -MKK&%K0UH$$9*EK2O18(^%W"IW5'!ANZUJS`!)^%4N*;2,$PAIRW7*.JF6E>7?B%TFI>T -MJE!LC5B3E>S=3H-=3,#9>=>-*#VO4WDA8W4^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#R?I9\8);D$@X]DM.T_?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/$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`WG5M&=^(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`(._QP`@;40R`1ZA -MF0EN`(R,$IB"!NB:-I/&R!B"#N91-P"ZN6=)U6JUC -M#)<8WA4QJ#N-UT/@6W;5Z_:-J:2USQ/;<*I7M7X)>'/X/IE*K48-=4!Q/.P] -ME[#TVDQE!HD;!`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,KRK\ -M`:NJU?:U#,9S\#"WGG,M91N;T\?\7]/N.D=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]0&Q[+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$84Z9 -MPTD2/LG!YS&WPD\!I<6@ELX*<*%HB=]L>Z?!+2XR(C'"9I/`YW31!COE`1]+ -M8WD\X2<"1Q`.R$EI@`00Q31Z<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--+: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'"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: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:]:\#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(VCCNL3J!SA-)PTZ6D4P"[CN44L_Q_J5%3<\,`#G$!/KJ=W*^IN%>; -M%Q700R<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&ZR3_`$`01!V*$@%WM[2A($3!440+8DP> -M_P`)-]7'LFW$@@$<).:X$#(,3"($3= -MI]D.B&CU;IZ8/.?9%.W2'1$F.4Y'9XD\H""`08![RA`)[0/=!+H`HZB]KB3^ -M4`RFQIB!\%#"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'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-,:0%#3A_'#'AP<) -MBN"2&,)'5YSXDZ.ZD7/:V2"N.?B]NFL<],FI;U/ -MX)I+IGNJ@K,MGR-QE3BIW#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>\\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-+K:%JBF9(C=15 -MJ0DGE!F/HASH.QY*AK6D[#9:3:<.)_=1UE[9"V:E"23'W52K3@D!NRHX[Q'X9MKT.+&!K_`&Y7 -MGWB?POTU6%C28A9E[:T;MQ:^#\J\7MO#RY8=/G6_MWTZQU@@[ -M0JO'8KU[QQX.I50^M;MAR\RZSTRXL:[A49!G'LM7'4W&YY)E6RM`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&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%SOTM(."$@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(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#^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-[W,`+I/)*YWQU@/LBV7053 -MN:'(;E=:ZE1>"1"K5NGTG">%N65BXZHY,!;=: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[).B5;"Z>W3(G!A8P8`2"(CB%[_XEZ%:7])S0 -MP!W=>7>,?"E6SJN?2G3RKZR\QVQ\F^*Y-K00!.VZFI?F&-U4>X$1@-X'*"#3/J@X0.QQ,J4O@$MVV(0.#0!ZM]S*B(R!$@E"8(C@*1[ -MB7N>3E,6^D.Z`8&"4T0=_UW1%H.9)!0N@$_M*@:8WRGUY@?J4MX'*3&M[Q_=#1 -M$G3,QW1%Q&ZAHFX.-N?=.TY'LD1O'";\L'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#7$CE*RMM3M1PC#=1WGV5RR8`?=6(L4[66`A05'LIDR1 -MA6ZUS3I4"=0PN"\:^(_X?4VD<[83+.2+CCMTU[U:WH-)-1N/=:]>\0]3JEVESH/RL!]:[N'ES]><%>3/RVN^/CCM.K>.JKI#7&/EL=/: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! -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 -M6TD[>&>-^@5:-R: -ME*GCF%RX9I?!!@<+WCQ'TUMQ:U&.`)(PO)O%/1JEEX^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`+2)D[;) -M@V#G>82!D<_912!@Y.`G=$C.`F($@$004[P)W]T`@2[*=QQ)^GRGB`29^(W3 -M:0002/V3F0()(0N_,1G/'=`+B8B1',)LGW[)W?_'9CG.R$.,SCX"-K8P3OCE!'IG[[J`B1(C8[2G$EI`'ND9D;93& -M9S$H'GU&!`A,XNS`PC:"3$A`X#/Q%NK2X:+EYLFI3:X5.>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'$]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;.+RVS@8`$+,OK?09Y"U&+-,>H/3J+=/UE4KVF'QZ\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>#F8]O9+$S.P022,DG!2#O1$X''NHY` -M[YV2:(S.>Z`@0'0-MLIVN9D\;*,@S,XC9-`!DN@'A%'Z9U<#$HG.86CG/*BW -M>R'6W0TM.1PHL@`0(&Y3`8,9A#:1SFAN\CO*4LC\V3R@CD8"1 -M&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,3K&))X3AQ)D;;C*AI -MN(V.0B$ZMX]DT;3-J.;D3@YA7+?J%RT'2\YBG&:!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@<%=03C*KW%LW -M20&_5:5S;Z'Z@JM5P+M)V"#--"F#!R4WD4NQ6LRC1+`2""47D4?=.%?)%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\)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 -MNF7#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),)5:O2#G;;K4K"FUY:[4Q\%;/1.LN8[RWN -MU`+*=;$B&/< -M1_OX7765[3O*(@CW*]/B\ORO+Y/%KIR74K0LEQ'ZK%K6O\S6Z3"[OK/3@6DM -MV7-=4M2*1TSCL%ZIR\MX9#7M`B?U2\QO0<`!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$PSMQPB4)@#_1%3=+80/+MR23WE-LTZ@DZ8&04TX@ -ME$.!Z9S!2W[I9#1.4I+M.?:.Z`?3S,<)`$DX=/`2AP<J^GJ;H -MU;>K.Y00TGL=DY!C4[Z2D3)D'/NA#`@..GM&R0)`^>R=I+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[>I7F6^&B%3Z):!K!A;MM3T`8^'3'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&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$?"JR:">3\J!#,G*7S(A-M[)\=\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>3RFDR6]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`"KUUYE.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[IA4WK*=(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/+)RZ+J?3#2JZV<=E5%)E1A:=QW7++'7%=\56NK1U*H2V?E-;EP,+E.'2S;7ID%L0$MLZH"BH$>7JG=-4>5U[W3A'4(+L9&RC>!&6C"XN#C]`L3K-E+"0S8 -MKN+BP@2!C9974NGZV$'93U-V/,>LNJT7END$#W61:;@!R.3\+TOJ72 -MNF^0T>5_,`AQX/NN3\06MM3)T,?[+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=O13M(,0(V -MF=U7=(?&5Z;VTC<09`XY2JX`;!VS*?&L`NB3DH.=\;)0F@D3G?=,\.!S@^_* -M:21OE(N)(!=/RH&R7<;)`ZN3DP -MA(#$?N@/`<07`\2G1G.Q0_P!'O.^_A%X: -M%K:L?49ZW9_92UC.ZXCJ_`'0:=G0IL;3#0!L%VU.FV@WM"@Z?0IV](#:`J?6 -M^I-8TZ'?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<"?E5_-.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`ENRR.IV9+3S/"Z&HTZHX56XI!P((B$B;:=\\.VOJJ5@7.))DSNN;\3=`M?))INTD;2%<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?=.)!]\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,E8VP,M$#EFT&L -M:'$;=UH,=C?8J&BV:8#0K5K0+M^%RM=I#TF%S_>%HVC(`'9-;T&Z1)QV5FDT -M8(*RUI9H1N["DR[!4(@;'=.7EA$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*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($^RQ]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]IPGB^'*-'I%@*E0LUZ>#"Y3I56E9GS-/JX&Z;JO4;FYJ>6"X#L"8"7+7 -M3%Q]JWNI]#^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$%6KRD`: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,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@$P[&81Z8(S*0;V,^Z* -M`?XA&$33Z?=+CG[;)-V]E`^H:?RC='3+7.EY(&TJ,`!TI^=-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[+:Z3[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$PR3[!`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*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%+(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+I2F`$YMI;/*UI95*@UC3^ZL$`-D;%)M&'3 -MI@)G@AN\J-\`KO.GNL;JKO3(XY6K6.!WX67U$@L,]E$TX_KKX>'',<:E*,"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!=`&?200?E-KI^_W7 -M5P?'U8`%QU2,S_95JA&GXXY&5/<..HDW"`B`6D3/\`=-I$3N-MR4X@M$P=/!35B`XM!+AR=N$-A(AN$VF1@?=%4+=) -M$1]4FX!P2@30=MCV2?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,EW_`'4],#5'9+^K?/.$3()$;'E0-4;.3VW2`,`$R1V1.`'NG8W2Z=_? -MNH!T`YXV2%/[+:8DK0KD-,3L.5S_7;P,81 -M.2LVZ63;/ZU>L@C4N>J^96JG'1QGB9S1JS]UB]-@W!+5K>+B"TG;V6-T36^Z[:3]E/C&3IZ+8MS!SLL -M?K+_=95_3)?EOR4E#/;*Z+H=:EITN@G;"XVRN@)#S@>ZU;*Z-.'-/U6= -M:JW>M.\M7-;3D\*AU_KUITZF2^HT1W(6-=>(&6]@XN&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/'P4-L-5,3!'96*3(GNMPM0W!#7P -MX:&DR>%0N7RSM"Z1QR+1J]0>(*7E'_&%6\QO^RG\QO;]5UT -MX;?(=S`,`AP[]U7J"'=YR)4]P6DQ(DY[(].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,`%,WZ<`.=$B?V2`#L1_V3DD`8CA3H,`_?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`UUI'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.+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@`2W8KJJ]$ -M1$+.O+8%LP`MQ&`ZB1D'/[([>X=3<`XF#[J]5MP&$9SLJ%S1+7'>.86M;54?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(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:26RZW'M`9(/RKBEJG>G+O5CGW61>U0`8=\+2OGQ.?E<]UNNUC'&?U7?&..5X5 -M*MZX5"&D0A_CG_X@N?KW;_-=IV0?Q=3_`&%W%5JN].D1!5N -MX+7OEK(G8`[JMN2%S2,@$2)R@&>%(X3$ND(1`/?V32ASI(@I@ -M.-TT"(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-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#IZ.!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`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" -M2R>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!LL>O0$]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@: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#$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)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;]-.GCG5FM``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,+@?%+[BZF6[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/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=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.EY@0"<(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#.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)AMFR!$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=,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!1,[A8]@T5;V?=:/5W -MM#2TF.%#X>M]5?61REYJ=1TMC1B@&B9C=$]FY.ZFM9%,B2%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!PCV];31:)B`C\_P!U7&!&HI9_Q%>OT>/V?!5TT3J( -M#>T&56J@1+3DXRK-P/YG`/;=05&>K2X<*O2K$Z9`!!^4GMTZ02W!)4`;B,;IB,Y*>!ID83Z,$E`+A.!*9A)&Y`]D,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`^%/^488=,EPC@S"8@#5(:<1GA`+FM!'O[I-TD=C\I.:#_4`# -MV1A@+8)&_=4"($EHD:D_E,`:2_A-@&'W/=%&29.W?=/Y;/\8']T!#)F3"!L:-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,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 -MGD3E7Z%)P:.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&ITRZ: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?T)0YTD[X]D`&X+D0@-$B?HA. -M1(R@=C?2-LE-Q,0@:=.YQ\(">WW3`ZZ1D@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!^ZAI9V5TJ]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>`KU;_P"["S[P2^`?JC3. -MKB7$[$9^JH7%,:'0UY]E!5?+C[*6[:0XF8$K/JO` -M>?40[A8OB> -MX:*+@2&X[9`6G6,N=JGPS^3Q>>HJUZSS734C* -M'^-I_P#R+!N6N-=YU')[H-#O\7ZKW/*^7:WY@V`3['=5J[8)])'"M7`!)*KU -M-);.?A<'N5WD;K./A,YIX./A#H+0 -M"(V^4B2T07$CLG@1G<;82ZH(")@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,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=EJTB3,%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 -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&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,,[^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:-(GCAX(#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%8V/$76V],OA5J&&3NM[ -MH/XA].9;-#Z[!`Y*\:_$7Q"WJ5?RJ#O2WGNN0;JLJ0-2IW'A[S:T4P/E4K_I%[TT"H -M#+0?=3^6/;M,\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]/.`0G.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`[/"PJCCHYEQR5Z_'-.'DKT7\'!Y5HXC[_5=3UI -MI>#J)$9PLK\+K`T^@,K3EXG]5E5'EC40"B\UG<+>DV\%N7;-('IDY"IU6'))&#RKE8>C42T@=U4KQ,<3 -M*YO6@)B1B"FKO"36@/@=OE4.\$'26P0<@J>G7;3MRQE*G -M+CE[A)^D[*`-`)./F=D0D-@$`(&`],DC!2(;J_`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&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=$KL/=J88!'U4'4/#%U;VVMU+*Z8^6.>>,_+D[>L^G4EKB,[KN/` -M7C_J'0WL8Y[WT@-BGZ`>&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$-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:.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;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\`*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..ZGI:!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.AA6P?943TEMR\D#=;=G85:]3;=; -M-KTSRHD9"7^79N8].:Z3X48^MYCV8/9=E;^#;+^!DDZHSA6*#&TFB!GNIA=7 -M'_*\PZ2NF,QCCE*'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, -MX8D[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_?LH]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$("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>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$[*G2?YM025RSYX>O#'TFVQTKHM'I_2Y -M;AP"IN:*M:^+/!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)68WE>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-A73O`=/^BXR\ -MN]=4OW,_HM#Q;_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/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!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#J_*G<"3B#'NF+F@"<%$"W2:_V -M:G3:\!,+KO5F?=>J=$PUIC/LO./P\I:GDD;-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,;I=,H7 -M37%M(-DKF3T?^%ZH"#&<+OKRF*3W`-()Y7$>+;Q]"\:[8`Y*WC;T87EZ]^'] -MH;JFRD'0T-G==)U.>DO8\50^"/';+*BUKC!;B94OBWQ_5NS.LN<-HV -MA)-37USR\65R_P`>K'Q#Y\,K5AC:2KEM9U.HTP:,OC:,KYLNO%767534HEQY -MQ*[O\(OQ;%AIIX4RGK7+&^^/*+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'5R'B"OYME5+SJC2&RS< -MF5D6W3:CR):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[JWKOJDMO8-&/+6)U:TA[FL!E==?VEQ@4W>HGZ -M*B[H]:"?,:2HSF3F6_Z*K6L -M2]^DAHWB$TU,G$U^E,V#=NRIW'3:@P&Q'.E-."R6QA4KCH#:KCY8R3QNHU[1S5O;5*];12 -M:7$]EOV'ABYJTVNJ,/\`DNU\%>'+6SH.?5HZZIYA=*;5M8M92HD1R,*V:#GZ-;F&&Y(!2H^'Z#20:1WB)S^Z],N[#RK1VH9/SE5K'IE%C-3F^LP -MI$][]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'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(.R9L`?F$)5!)&!\)RXN`DM$"!"&B -M)VV4U#);)D_"KM!QLIK=L.;)[0@[[PN\LL8+1D0K5;0^L`=_94O#CW"PV`(" -MOV-(FZ$B? -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"I533`@[X61:L%$QI,K1H5-5.<_!7#"/5Y;LUX!4<97(>-.A" -M[I%U+<<+IKRLYK@!LJ3[C,O$3W6\;-[8FYT\O'2;NA -M2#C*W+NE1J'4*<&9E2L#!18QQB<+>7DV[;W!6?1+048+`0)5_R`^U@P9R0ICDX7^-V\M\.^(NJ=!O12KU:A9.Q<5['X -M-\56W4J+7-JC5&1J7F'C?HYKZZC&Z2V"05X7UND:5RX"9E?47C^WI5>GN`'J((V7SCXUM'TNKN9WSVE0>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=#Q6XEJO%^@UNI5#62L_IUN_J74FM@F#W7KWAFP%ITVF -MQS0T@!/)EZ_QC>$O]JY9WAUE*HQH8#GOLN\Z#:BUZ96G -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<`594L7 -M*5^B:1E7?#GA^:HJ5JVZFVN?K,; -M:.&&T84U&W=2;JV'*U_.81D0J]=XK.AC<`9*RK'=1?6JESR8&P'"(6S7'5L5 -MI.I: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;B530<\[*SMJ(O%%X*=$M#L[;KCG-%2H29"T>M7/\`$WD2 -M2`=Y]U'2IB=ESSNZ^AXZGJN`$3*@I@QOD(WCT223B5TCR54NH<9V!]UD=8`%)P.=X6U5I'1)[ -MK'ZO0<_N1"-8WEQ%_5-.[+'0!,J0NBC(.47BBR=3)'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)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\LG0U]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(<2222<)A!S$1[J -M2W$.S('N>5`S#Y))5BEE^JWZJZ:T^N -MZ5P`_2[!E1=5J--:FTG!5VO;LJNEV"/U697LWU+\14):-@?E3?/+PZ:%%@T2 -M"J-PT.N''LM"V86TG`G8*"G2PXD*6F>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: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!^H>)KYHI,+*,P7P/\U+=08?0^BW74KHMMZ1A^&[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(L6=(M'NKU)L& -M%6HZME&%9^'62)IQRKI\.T6TSZ=^% -MNM9#X4PIE[<@CA;F$CC?)E?K@>J=`EITLW[!<5XDZ)=4*@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'*&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`"` -M,H%6JX.)5.L\03'ZHGN#N?DJK<56Z2B(KBH!/;]EGW575($;_HCNJS9)G?"S -M;JX`;@\PKH#=5B)$X`6=HW#:=(P86Y&;=*_4:T&>RQKR -MY$$@?)"DO+K7))^ZQKZZ9)]7^15W^&-;#U.]`:>T&%RG6+AS@XD%L;$]EI7]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_5,YY.4QD&)^@,IG.$@-Q`7M^/%KD[8&0$[RQK -M@&O+\"3$0>R8`:9#OLA;^8`$F-U`='&I+B&MTX!*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:6Y[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.H6%Q9U-->DYL>45-OI=$']$0;(&?T75_AEX2K^(^LL9I(H`C4Z-PK>$WI9_" -MSP1=>).I-.-?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:)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`,FPATDJQ0M -MM+,C[IZM/&\=D`Z`:9(^JSNJ4QY1['=6*M=P<03$+,ZM?R/JQ&ZTO$PZ?==8\[ISF.9I&HTXTS*\RZK6)J:P3*Z3PG?A -MMMH>^2=LKAC]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.5F5ZQU=%O[:I8M=2"L^> -M7>OCT>*R8[G:;J5"D+8LC`&%PGB&B*1/EM[GMA=C?7M,L<'>I<=XDKZJ;I/! -MQV6,.W3UX11:(=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.+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;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!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&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$>\!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/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=(@: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:@A#26`*CCMJVH#K4$%5;IDF85SI0!L -MT-XR,B)4O;416C<>P5RBR20H[2F="L._EL01UG-I#\RCMJ3Z[];YTC:4=&W? -MZ:&:ZH7 -MOS./9*JS6R-_A2NHZQ,9Y1T$`'L56637I.8Z1A7^D5#<,\MYDH.HTP6$ -M90]#FC7$P!*"Q=6]2W,\*"Y,+"\+"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<<\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;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:I79#LE#>7;B<9G8=U3J@EI&O -M'&-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)PDDZJ]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.@N!$+F^MWU+\C#K)]U-#/N#JJ%Q=Z1[I -M^A_S*YJ$'2W8JJYEQ6<*;6D:CL970](LQ3@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[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_GO\`2X\[=%T2T+*;=+,<0MZU,^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 -MMD`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)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?J@?^:<=MT>`=L]Y0`QOW[KLAC$>_P`I?E;`S\%(EG90)CHVWVA6*1(=C]5'+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@+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;18YSA2NLZY2:^^?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(`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$!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&[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:8UWY7`=BA!(W&?=+DP9^J42WOW[H"C_`#^%/:'^9,[F5"(` -M!$J:V.0=O=4C8M@/)'K(1X_^0_9-;TM5%IU0C\G_`*_U3AO3[7Z\&CIM68(A -M0P!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&[HZVD`Q*Q.IM?1)$F%8E3]-/IW@JS7N#^5@U%9O3ZAF`)_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=^(_P"43F,96!6BJP%@D$?,K7\7GS*[H,">.5CVY(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(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/#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*IC/O: -MXRKX"Z-5;B@-7PLGK'X;6A8]U`"8P"O2J5,3D94SJ;'B"$F$/>O!^I>!ZUO. -MJ@Y\(W6DFE4#CM$_ZKONJ=/K650TZE,5*8YY"ITJ+`X.HO)_Z7*S%? -MW*\^NO#G4Z+=3[O2=%2FX+UP.8ZF&5&9_Q`S"AN.G=,KRVX:\] -ML$)JK^]^7DNSMM]@3LIZ.H.DC1[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$M(,]D%2J`<1*R^MTP:;OW6R]H -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';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' -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%XMU%7+VKDC.ZJ"GYE9;ZC-Y1V%MK()$_*V*%NUC,#Z)K*B`P#WRF8C?9=L)NN.=X4 -MNG6>FIJ(6@]C0PCE*SI/J58+H"O/MVLI0!PO1BXUYSX_I>H_"\_1<-K[@$+K>8X_6CXBIN?4I%DY@2M+I/36?PP4G6E<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 -MJ6MA5UT&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#62[`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$JGP">,K18&N9&9*HVK"6<25(*CJ9VE9 -MI%3KMN!2@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>/N1JZ3EC6EVA6!DK -M.L=P>/U5LDP%T8L2!PF2>-E'6>-/LH7EQ,;?"=C9(UZ,Y4[;7I$[NRE -MRUCJ,^O.Z:QH/N*\D3)W72=/H-I40,*/HMDVE1#W#*LUR=6(`3"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&RTFYIM: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?:OFU?/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>@YA6-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&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#=-: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#\D3@2O+^HRN -MM._@QF]U@6M"I4NVN8--/N976].M&^2(&&@'4J[:5(D#$MV"U>D.;YK&U7^D -MVVWX<>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]UTLD -MG`NM5!2HEHW*;PQ;^;4;5<#,[K,O+G^.O6TF8$]UU70J'D6K3$8W6I-W3S^; -M/UQTTWD,MPP=EE]0O&4:3BXY'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+1`5VK-MK`U*C6-;DE=9T;IE2E:^EF8W6SX4\.M?IK5& -M9&'"V[6[[0O -M/NJL>R@]CL`=UZKXAI3:N)W`.%Y_UNU\RC5])F"NL<,F;X*I,9YCBX%HG^R? -MQ=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<L0UU([[JS6)TR#$%9BU%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<"I734>3C4Y;G37%^ESI(VE0W'<+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$4VFTY/=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<XX(P%X/-=W3V_I\>F\>)>YQ+BY>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/:*\+70?94R"XD -M`+RKQ_1-CXKJ%HTC5(79_A[?-N+.F)F-\K.Z@=4@97.NLG"1E6&$DR=D+ZY#8#B -M/E0"K+S$QM*DHTC4=),#NEIZ_DF/J"G3=+_JL7I51W4^ -MK-`)T3_=+>$O\>:ZCPA;&I7\Y^Q/^2[#S0R@&@[+-Z70IVMH-,`ANZK=0OO+ -MGU+IC-3E\WR9^]V;Q%U5M*FYH\`*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\1YX7$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%)'!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\GDV3V")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[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^#*ZKPQXVK47,96+H&#J)3+#[B]>%^/?.C515J-#CCY704JX -MIT8IN.<$+RGPSXE9-[=[TS3_#AY:-,2 -M5F=>O&"F]K#`*O65]19TUI;49$>J2N-Z_?\`G7E3089.%TO$>;#'VR-6NQD< -MJM5N!)@JK4J9&=U&YY7.UZIC%VE5.J,Y5NC0/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`<%Z5G;TZM1 -MGJC)*W[RY%NT-;B"LXS?->'S>7VXC4JUPRE!VC92P$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>6YJZ*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$W77;0YD@JE4;(BQW5.],TRFD8M]0I-IN@3A -M<_3J5*%_#?R$PNDK,+CN85'J-F`TO&%=<:B3B\I:(:]D@&3RIB*9;#L$")4? -M2ZK74])&6A2UF@L@%2%*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-3VINNJ_F/)T\`J^ZV8]H;`$;)6S0P`- -M$0IVD3)32J['.MSI=,*];N#X(*AJ5&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\.@MB16RYMM# -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);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'W@!]2G!]UL^#N@T+>@V6#;>%U=&UIM:`UHA;QW8S;)TPK6P> -MUH;IP%:IV&Q=,?9:YI@&0(]D+FM;D\K@68H4FXX7+^!>EMMZ+:K_SDK>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!T[A.ZGZN,[*KX4N6W'2Z<'40%HPX[[+#:LYF2T-D$6L]T-`M\H8E%+?\*SIMS'7#_"T-'(W6/08]@-0Y:_*VO&8_D'&9X5 -M2WJ,=TP-J-`0W:>5E==93=1@CV6SU*DQO\P+%\05)MAB -M3*L*HVE336;JTXSA=5XEW^:XUSBQ[3'W70^'ZY#)X/*WWRQU7963]39!V -M6ST]P(&#ED6NUL)]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 -MD$&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

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+"&%KB09Q*X^_QK2QZY;PM2\QH;J))7:]`L:E(X^JU).TMXT[ -M'IU2F&`#$J[YX#=\++Z?:52P1)6I9](NZ[L@@+K+\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*E3Z9E`69G909O5:6J@[.%1Z82&.89QMA:O48-$\@<+&L"16>$ -MO42?5DAAV'R(2:P`AP">F`XR1A3M8W3@04%&YSB)16M,@SIW4KZX2;HC;]4O3V_59TZ.:94'4>JN8XC0P_=#U6A2I5 -M2`0.T*#I3?(NJM7,%1]7>XN:^"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>'Z -MM&KJI20F[]2R?%&_Z?0N*9.D+E^K=!8ZF][6R`K2UNTJK=='<:&?EV_=KA[*W=1J@D!L8GNM6ZZEHH"'Y'=:0L*=1I&`%G]5Z:#3 -M);&3O"YY>*QN>297E?Z)>NI40YQ;!&X4M[=MK/:01)]]ED68G5`:'2`!O/*EI5W5'[ -MRUJQMN.CI7CG$MG"G_B(GU3.ZR*%9E%AAPF%4N;\@N>"M^Q&ZRZ:VO@SW17E -M?73UMW/'9<]KFY]N5IV5`LM]>K$8PL[I]J\7D%OY<# -M*ZNTL:E2ES'*LPW>&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`6C0ZRD&71I.DR,*W3MW2M-EDT$G=2MMVZIE/98=[<>6"3]ET'5"&4\[E'NGVE>V=J:-495^WZ9K::CQ^9+H-D:5Y4` -M/I/"X>3^4W6B(U'98G7/#%U9G#-0!WA>ULLAIU-/Z*M=] -M/;5:6/:#VE9GBUS&Y>-/":1K6=>6RQS5VW@OQFZ@YEO>.G&Y4GC7PN&36H,@ -M@SA&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'&1LNDD:=(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&: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]UGK=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!NJX8]I=`7++#3I,]E5N7; -M!Q'*IEI=K*LML*;FESV$D]UC4CK+(R+8/#C4)]+LD+6 -MIUM&F3Z>Z"[I4J,`"&G@*(.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\=+)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_U@U[X7E?6NBU>GW+@]A`G=<;[8UOC)[(:E#JW3&U*3VY$X*Y#Q#:/HM=$ -MS.ZS_P`.^O/L[@6E.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)Y5VAIF)^BPPRNS.DJS:7548&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#1U`5`8DY69=9+>G4VEPQM)LJ;D1 -M&RZ;I5(LI9Y4SO.G.Z&V)#O4%/5&H?Z*!PAPSE633JT:)$-RI9RJU -MLZ6@&`58:"8[(T51H&905F![()!"F+0/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-V55<2",8[J1E8!%70UH;`E#4:"S*A%6=M_E.'M(R54>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\+$\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%KP_R5O_RY9-;'D-(^ -M`N@JQ*@KNU+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^ -MJCN&: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]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)#2,SA155K)'<'LK-`ZTZ)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$QD&0-^Q4K#QV35#`C)*:5-:N.L$G`V5ZFXG/&^4WL#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+7KTRH;?_`)REHVC'0(5ZI:U'$P"FM[=]-TP5C*S>ED9]QTX%X@<\*:GT<.8"6+:L;37 -M4!<%K4K6F&Z>RSCA]:ZO5:S&LW.%F79J57P-N%9C(EY0/8VK4RR>ZFZ-0&LOXE,%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$%2XHM7_`(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($[*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<`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=U1Z1BX0J=%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`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@^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'^RHKUJV%IU8O:/S'^Z#Q/0\SR -MGZ3W*UNI4`ZX#SIE4>OF&,`B9W4DUMF\E;PR@P#``4%TZ2OEWM[JM4#OS<=E8N -M#J]H*A<($`_=!3KM9I)DY53IP'GO),$<*Y/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%J4CJ;PN;Z/<9`G*W;>HV`9)6S%8JLVV"-\+-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,.$1"VYP9' -M$)V5Z9`(*9]$'X41M@#@P$1/K;O,T^DJ-[JH]U=C0])&-P -MJ]_4;Y<$A5Q=N!R%6NZFL:M7W59J[TUQ`#E4[PC -M3."%8JN),-5&[<6X,JLUD=3J,;5!,?*Q.MW-.I48UI$K9ZM0UTBXN`PN.>QP -MORTN)SS\J\:VQ]:A<^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@;LPXRN5ZA3\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+':7Z0"5)`TX(4-%T5HW,H+1[$2% -M%IWR84CL9P4SLA`,`@;X]T@V$1_+,(3G?ZJFS?LD`",<).$#!320`-,('#<3 -MRD02(U$)]1_[II_W*!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#W01OUJ`0@A=CZJ -M-X`._P!U-4B%"1G,HBMD0+I\DY/=6KD0L,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`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 -MWT%X!C'!16-=S>25#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;?S1PGD:A@JI -M4]CLK#`W5E5[/##*DU2[!A9X5)5$[*K69ZIX4SW$Y`RA<)YA+5T@J,=C2J-= -MYI5IM4\2-PB5T=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<0O"H=%&2?99++>KUR_Q- -M2,'J]*FQS6!H3LLZ;J8AH4_5VS6;D8*F9I%,-VE+VDZ9=Q9-.Q`52M9N:8:Y -MRVJNDC;E0N;JR)51CNIUVJ8]NJK$%N^%"20W.RH-K5O*!T\*$WE0$M+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\TYPHE]$U';.*E(I/K-=Z9D]U&_\Y!,8[J2[H$5 -M"]@)X@*J'Q(,[[#9)R7<7;9N"=D;YP*FM*L -M-`)6H1W71+@%C3JRNGZ;7D`2=UP'1K@!@`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+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:1F8GW4TETRRIQ)W*L=)N0QX!=.5JB[5=MC:4:CJNG@>0(_16@Z/8?*K63HH`@B5.YT`3"SIT@Y!'"37" -M(.Z`NGLGRTA#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'>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\QVV9P+J30ZF0YQ(CE8K612).-6(6W6+:EE+I$X*K.MVFF(:#"EFE[9MNXZH8V -M#/)4VKR\.,_W356.%:`2)454D3[;95EVS9IL=)NF@`.)$''NNIZ1=%S!GEF78:WTSGB5M([SIU<5+RE3F<_"[OIL-MPWO[KS+P54-QU$' -MM&?NO2*#]+!G"XYMW0_!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?%-+LUV^!'*"S9$N)RH*8\^MC(5Y -MF`!P%+VLZ"ZZRV-#:@>.%T -MW6;?4TB..%SMRPM?&PY4C-;_`$DEU$96G8!PO!/"Y[H%0T;J.D:0?'^92U0-RL]MWJ$DS\)VW8` -M[&47:]4?Z2>2%EUG?SQ.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&0W0'$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]LS6T2J-)@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]6DY!..5D=3I&/RY42L2U(I58SA;W07BO4!^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]1LFI?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]/.F75GU=,294 -MCVN!![I.D#4ID-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 -M0))B.RJ.AMJH+!ZE>H50(Y7.V=?.ZTZ%Q#-6T(LJ]>5Q.D&"5/T]NFG/DX!D8@>R3AJ.5`#HHSL/=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+UX7CU75>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%KMPR#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:V]R0X=@NC\/7\.:"9GZ+TSE7IW3J^K25L4'@LCNN3Z -M%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?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(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]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+*+[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((+)!XRGZA4A]!O= -M=-I!6\HDKJC6#:;CJW]U'9U7&[!`QW6>^Y\RJVDVB@)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>H02A)!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!R -MK\%RS>?+!"F+O>51M"?*!,A2TZDNW*S%6'.)_IPEN,&"HW.!.1A#J'?'""P- -M38!VB9]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]J1."5:K63 -MB-33"F]6GP5Q7'ED[PJ8JM+Y!W2K6]700"9A9U5M:F2-/RJC4+\&#]%!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#OGA3'<>@]-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$P@YG*J -M6U<.&2(4X>"!$9]UG3ZV;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:B9G,951#6$_P!U488=,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>\-%S=*J]M00/RY/NN&/%T]TN\8WK<^EIG&N&3I>FO+;A@:YP&"(."NBMKJ:@; -M+=+<8*YKHU:=,P=(6E;^:UX>X`P9PMWAYLG46Q,B?YD.: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+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!HRT*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.IU/1NAZ62*8,[E5NIU"6&"$73'N=2:`=^4J -M1K4ZO!/ZHV5H'YC$JD")"/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^ZAJN -M$$QE6%!4_.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*NG7%+6#('TE0=*+_.?4<##R0`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*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?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=_^VHM?L"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: -X-Real-To: -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: -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 ; 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" -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: -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 ; 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: Ó÷åáíûé Öåíòð -Subject: Ïðèãëàøàåì ðóêîâîäèòåëÿ, íà÷àëüíèêîâ ïîäðàçäåëåíèé íà òðåíèíã YXLWLJ3LPT9UHuLyGTzyuKQc06eIZ96Y6RVTCZFt -To: Info -References: <0ID97EGL951H1907@example.com> -In-Reply-To: <0ID97EGL951H1907@example.com> -Message-ID: -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 - - -

Ó÷eáíûé Öeíòp "ÊÀÄÐÛ ÄÅËÎÂÎÃÎ ÌÈÐÀ" ïpèãëaøaeò ía òpeíèíã:
-ÌÎÒÈÂÀÖÈß ÊÀÊ ÈÍÑÒÐÓÌÅÍÒ ÓÏÐÀÂËÅÍÈß ÏÅÐÑÎÍÀËÎÌ
-19 èþíÿ 2003 ã.
-Òpeíèíã ïpeäíaçía÷eí äëÿ âûcøeão è cpeäíeão óïpaâëeí÷ecêoão ïepcoíaëa.

-

Òpeíep: Áopìoòoâ Ïaâeë. Ï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.

-Öeëè òpeíèíãa:
-1. Îcâoèòü ïpèeìû óïpaâëeíèÿ ìoòèâaöèeé;
-2. Ïoëó÷èòü ïpaêòè÷ecêèe íaâûêè ìoòèâaöèè ïepcoíaëa ê paáoòe;
-3. Îcâoèòü ocíoâíûe íaâûêè êoìaíäooápaçoâaíèÿ;
-4. Îâëaäeòü ïpaêòè÷ecêèìè ìeòoäaìè coçäaíèÿ è ócèëeíèÿ paáo÷eé ìoòèâaöèè, êoìaíäooápaçoâaíèÿ.

-Çaäa÷è òpeíèíãa:
- - Îcâoèòü ìeòoäû ïoáóæäeíèÿ äpóãèõ ëþäeé ê âûïoëíeíèþ oïpeäeëeííoé äeÿòeëüíocòè;
- - Íaó÷èòücÿ íaïpaâëÿòü ïoáóæäeíèÿ coòpóäíèêoâ â cooòâeòcòâèe c çaäa÷aìè opãaíèçaöèè.

-Ñoäepæaíèe ïpoãpaììû:
-I. Ìaòepèaëüíûe è íeìaòepèaëüíûe ôopìû ìoòèâaöèè:
-1. Ìecòo è poëü ìoòèâaöèè â óïpaâëeíèè ïepcoíaëoì;
-2. Ïpaêòèêa óïpaâëeíèÿ opãaíèçaöèÿìè.
-II. Ïpaêòè÷ecêoe ïpèìeíeíèe ìoòèâaöèè â óïpaâëeíèè ïepcoíaëoì:
-1. Àíòèìoòèâèpóþùèe pacïopÿæeíèÿ;
-2. Ìoòèâaöèÿ è oöeíêa äeÿòeëüíocòè (poëü aòòecòaöèè coòpóäíèêoâ);
-3. Ìoòèâaöèÿ è ïpaêòèêa íaêaçaíèé.

-Â çaâepøeíèè ïpoãpaììû ó÷acòíèêè cìoãóò:
-1. Îpèeíòèpoâaòü coòpóäíèêoâ ía äocòèæeíèe oïpeäeëeííoão peçóëüòaòa;
-2. Îâëaäeòü íeoáõoäèìûìè íaâûêaìè óïpaâëeíèÿ ìoòèâaöèeé ïepcoíaëa;
-3. Ïpèìeíÿòü ïoëó÷eííûe çíaíèÿ â ïpaêòèêe óïpaâëeíèÿ ïepcoíaëoì;
-4. Îïpeäeëÿòü èíäèâèäóaëüíûe ocoáeííocòè (ïpeäïo÷òeíèÿ) ìoòèâaöèè coòpóäíèêoâ â opãaíèçaöèè.
- õ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ò.

-

Ïpoäoëæèòeëüíocòü: 1 äeíü, 8 ÷acoâ (äâa ïepepûâa, oáeä)
-Ñòoèìocòü ó÷acòèÿ: 4 700 póáëeé áeç ÍÄÑ.
-921-5862, 928-4156, 928-4200, 928-5321

- Åcëè èíôopìaöèÿ ïoäoáíoão poäa Âac íe èíòepecóeò è ïo äpóãèì âoïpocaì - ïèøèòe: seminar -
3ZkRPb60QBbiHef1IRVl - - - - 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: -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 ; 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 ; 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" -MIME-Version: 1.0 -X-Mailer: Internet Mail Service (5.5.2653.19) -To: "'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 - - - - - - - - -
Hello,

ist this kind of Messa= -ges, that=20 -causes rt to crash.

Mit freundlichen Gr=FC=DFen
Gregor=20 -Stever      ^^causes Error!!
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/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 '300'/, "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. -¨auts_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. -¬es_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 -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You 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 <> 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 <> 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 <> 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 <> 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 <> 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 <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 <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 <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 <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 <> 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 <> 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 <> 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 <> 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 <> 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 <> 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 <> 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 <> 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 <> 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 -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You 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 = <; -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 = ; - 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 = '\' __id__/TITLE:#\', -\'__Subject__/TITLE:Subject\', -\'__Status__\', -\'__QueueName__\', -\'__OwnerName__\', -\'__Priority__\', -\'__NEWLINE__\', -\'\', -\'__Requestors__\', -\'__CreatedRelative__\', -\'__ToldRelative__\', -\'__LastUpdatedRelative__\', -\'__TimeLeft__\''; - -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 = <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 =~ /.*?\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 -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You 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 to RT server. -# - user RT username. -# - passwd RT user's password. -# - query Default RT Query for list action -# - orderby Default RT order for list action -# -# 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/extract_pod_tests b/rt/sbin/extract_pod_tests deleted file mode 100644 index 897564daf..000000000 --- a/rt/sbin/extract_pod_tests +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/perl -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -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 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: $!"; -} -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); - -# XXX Hack to put the filename into the #line directive -$p->{file} = $infile || ''; - -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; -} - - -print $outfh < - -=head1 SEE ALSO - -L - -=cut - -1; diff --git a/rt/sbin/regression_harness b/rt/sbin/regression_harness deleted file mode 100644 index 7460135f2..000000000 --- a/rt/sbin/regression_harness +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/perl -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -open (FH,"make regression|"); - -my $skip_frontmatter = 1; -while () { - next if /^ok/; - $skip_frontmatter = 0 if (/autogen/); - print $_ unless ($skip_frontmatter); -} diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in index 4ed48d7a3..a51076fee 100644 --- a/rt/sbin/rt-setup-database.in +++ b/rt/sbin/rt-setup-database.in @@ -1,9 +1,9 @@ -#!@PERL@ -w +#!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -47,41 +47,56 @@ # # END BPS TAGGED BLOCK }}} use strict; -use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item); -use vars - qw(@Groups @Users @ACL @Queues @ScripActions @ScripConditions @Templates @CustomFields @Scrips @Attributes); +use warnings; + +use vars qw($Nobody $SystemUser $item); -use lib "@LOCAL_LIB_PATH@"; -use lib "@RT_LIB_PATH@"; +# fix lib paths, some may be relative +BEGIN { + require File::Spec; + my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); + my $bin_path; + + for my $lib (@libs) { + unless ( File::Spec->file_name_is_absolute($lib) ) { + unless ($bin_path) { + if ( File::Spec->file_name_is_absolute(__FILE__) ) { + $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; + } + else { + require FindBin; + no warnings "once"; + $bin_path = $FindBin::Bin; + } + } + $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); + } + unshift @INC, $lib; + } + +} #This drags in RT's config.pm # We do it in a begin block because RT::Handle needs to know the type to do its # inheritance -use RT; -use Carp; -use RT::User; -use RT::CurrentUser; -use RT::Template; -use RT::ScripAction; -use RT::ACE; -use RT::Group; -use RT::User; -use RT::Queue; -use RT::ScripCondition; -use RT::CustomField; -use RT::Scrip; - -RT::LoadConfig(); +BEGIN { + use RT; + RT::LoadConfig(); + RT::InitClasses(); +} + use Term::ReadKey; use Getopt::Long; -my %args; +$| = 1; # unbuffer all output. +my %args; GetOptions( \%args, - 'prompt-for-dba-password', 'force', 'debug', - 'action=s', 'dba=s', 'dba-password=s', 'datafile=s', - 'datadir=s' + 'action=s', + 'force', 'debug', + 'dba=s', 'dba-password=s', 'prompt-for-dba-password', + 'datafile=s', 'datadir=s' ); unless ( $args{'action'} ) { @@ -89,586 +104,321 @@ unless ( $args{'action'} ) { exit(-1); } -$| = 1; #unbuffer that output. - -require RT::Handle; -my $Handle = RT::Handle->new($RT::DatabaseType); -$Handle->BuildDSN; -my $dbh; - -if ( $args{'prompt-for-dba-password'} ) { - $args{'dba-password'} = get_dba_password(); - chomp( $args{'dba-password'} ); -} - -if ( $args{'action'} eq 'init' ) { - $dbh = DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) - || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; - print "Now creating a database for RT.\n"; - if ( $RT::DatabaseType ne 'Oracle' || $args{'dba'} ne $RT::DatabaseUser ) { - create_db(); - } else { - print "...skipped as ".$args{'dba'} ." is not " . $RT::DatabaseUser . " or we're working with Oracle.\n"; - } - - if ( $RT::DatabaseType eq "mysql" ) { - # Check which version we're running - my ($version) = $dbh->selectrow_hashref("show variables like 'version'")->{Value} =~ /^(\d\.\d+)/; - print "*** Warning: RT is unsupported on MySQL versions before 4.0.x\n" if $version < 4; - - # MySQL must have InnoDB support - my $innodb = $dbh->selectrow_hashref("show variables like 'have_innodb'")->{Value}; - if ( $innodb eq "NO" ) { - die "RT requires that MySQL be compiled with InnoDB table support.\n". - "See http://dev.mysql.com/doc/mysql/en/InnoDB.html\n"; - } elsif ( $innodb eq "DISABLED" ) { - die "RT requires that MySQL InnoDB table support be enabled.\n". - ($version < 4 - ? "Add 'innodb_data_file_path=ibdata1:10M:autoextend' to the [mysqld] section of my.cnf\n" - : "Remove the 'skip-innodb' line from your my.cnf file, restart MySQL, and try again.\n"); - } - } - - # SQLite can't deal with the disconnect/reconnect - unless ( $RT::DatabaseType eq 'SQLite' ) { - - $dbh->disconnect; - - if ( $RT::DatabaseType eq "Oracle" ) { - $RT::DatabasePassword = $RT::DatabasePassword; #Warning avidance - $dbh = DBI->connect( $Handle->DSN, ${RT::DatabaseUser}, ${RT::DatabasePassword} ) || die $DBI::errstr; - } else { - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) || die $DBI::errstr; - } - } - print "Now populating database schema.\n"; - insert_schema(); - print "Now inserting database ACLs\n"; - insert_acl() unless $RT::DatabaseType eq 'Oracle'; - print "Now inserting RT core system objects\n"; - insert_initial_data(); - print "Now inserting RT data\n"; - insert_data( $RT::EtcPath . "/initialdata" ); -} -elsif ( $args{'action'} eq 'drop' ) { - unless ( $dbh = - DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) ) - { - warn $DBI::errstr; - warn "Database doesn't appear to exist. Aborting database drop."; - exit; - } - drop_db(); -} -elsif ( $args{'action'} eq 'insert_initial' ) { - insert_initial_data(); -} -elsif ( $args{'action'} eq 'insert' ) { - insert_data( $args{'datafile'} || ($args{'datadir'}."/content") ); -} -elsif ( $args{'action'} eq 'acl' ) { - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) - || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; - insert_acl($args{'datadir'}); -} -elsif ( $args{'action'} eq 'schema' ) { - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) - || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; - insert_schema($args{'datadir'}); -} -else { - print STDERR "$0 called with an invalid --action parameter\n"; +# check and setup @actions +my @actions = grep $_, split /,/, $args{'action'}; +if ( @actions > 1 && $args{'datafile'} ) { + print STDERR "You can not use --datafile option with multiple actions.\n"; exit(-1); } - -# {{{ sub insert_schema -sub insert_schema { - my $base_path = (shift || $RT::EtcPath); - my (@schema); - print "Creating database schema.\n"; - - my $schema_file = $base_path . "/schema." . $RT::DatabaseType; - if ( -f $schema_file ) { - open( SCHEMA, "<$schema_file" ) or die "Can't open $schema_file: $!"; - my @lines = ; - - my $local_schema_file = $RT::LocalEtcPath . "/schema." . $RT::DatabaseType; - if (-f $local_schema_file) { - open( SCHEMA_LOCAL, "<$local_schema_file" ) - or die "Can't open $local_schema_file: $!"; - push @lines, ';;', ; - } - - my $statement = ""; - foreach my $line (@lines) { - $line =~ s/\#.*//g; - $line =~ s/--.*//g; - $statement .= $line; - if ( $line =~ /;(\s*)$/ ) { - $statement =~ s/;(\s*)$//g; - push @schema, $statement; - $statement = ""; - } - } - - local $SIG{__WARN__} = sub {}; - my $is_local = 0; # local/etc/schema needs to be nonfatal. - $dbh->begin_work or die $dbh->errstr; - foreach my $statement (@schema) { - if ( $statement =~ /^\s*;$/ ) { $is_local = 1; next; } - - print STDERR "SQL: $statement\n" if defined $args{'debug'}; - my $sth = $dbh->prepare($statement) or die $dbh->errstr; - unless ( $sth->execute or $is_local ) { - die "Problem with statement:\n $statement\n" . $sth->errstr; - } - } - $dbh->commit or die $dbh->errstr; +foreach ( @actions ) { + unless ( /^(?:init|create|drop|schema|acl|coredata|insert|upgrade)$/ ) { + print STDERR "$0 called with an invalid --action parameter.\n"; + exit(-1); } - else { - die "Couldn't find schema file for " . $RT::DatabaseType . "\n"; + if ( /^(?:init|drop|upgrade)$/ && @actions > 1 ) { + print STDERR "You can not mix init, drop or upgrade action with any action.\n"; + exit(-1); } - print "Done setting up database schema.\n"; } -# }}} - -# {{{ sub drop_db -sub drop_db { - if ( $RT::DatabaseType eq 'Oracle' ) { - print <Config->Set( "Database$key", $ENV{ 'RT_DB_'. uc $key }); +} -About to drop $RT::DatabaseType database $RT::DatabaseName on $RT::DatabaseHost. -WARNING: This will erase all data in $RT::DatabaseName. +my $db_type = RT->Config->Get('DatabaseType') || ''; +my $db_host = RT->Config->Get('DatabaseHost') || ''; +my $db_name = RT->Config->Get('DatabaseName') || ''; +my $db_user = RT->Config->Get('DatabaseUser') || ''; +my $db_pass = RT->Config->Get('DatabasePassword') || ''; -END - exit unless _yesno(); +# load it here to get error immidiatly if DB type is not supported +require RT::Handle; - } +if ( $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name) ) { + $db_name = File::Spec->catfile($RT::VarPath, $db_name); + RT->Config->Set( DatabaseName => $db_name ); +} - print "Dropping $RT::DatabaseType database $RT::DatabaseName.\n"; +my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || $db_user || ''; +my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'}; - if ( $RT::DatabaseType eq 'SQLite' ) { - unlink $RT::DatabaseName or warn $!; - return; - } - $dbh->do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr; +if ( !$args{force} && ( !defined $dba_pass || $args{'prompt-for-dba-password'} ) ) { + $dba_pass = get_dba_password(); + chomp $dba_pass if defined($dba_pass); } -# }}} +print "Working with:\n" + ."Type:\t$db_type\nHost:\t$db_host\nName:\t$db_name\n" + ."User:\t$db_user\nDBA:\t$dba_user\n"; -# {{{ sub create_db -sub create_db { - print "Creating $RT::DatabaseType database $RT::DatabaseName.\n"; - if ( $RT::DatabaseType eq 'SQLite' ) { - return; - } - elsif ( $RT::DatabaseType eq 'Pg' ) { - $dbh->do("CREATE DATABASE $RT::DatabaseName WITH ENCODING='UNICODE'"); - if ( $DBI::errstr ) { - $dbh->do("CREATE DATABASE $RT::DatabaseName") || die $DBI::errstr; - } - } - elsif ( $RT::DatabaseType eq 'Oracle' ) { - insert_acl(); - } - elsif ( $RT::DatabaseType eq 'Informix' ) { - $ENV{DB_LOCALE} = 'en_us.utf8'; - $dbh->do("CREATE DATABASE $RT::DatabaseName WITH BUFFERED LOG"); - } - else { - $dbh->do("CREATE DATABASE $RT::DatabaseName") or die $DBI::errstr; - } +foreach my $action ( @actions ) { + no strict 'refs'; + my ($status, $msg) = *{ 'action_'. $action }{'CODE'}->( %args ); + error($action, $msg) unless $status; + print $msg ."\n" if $msg; + print "Done.\n"; } -# }}} +sub action_create { + my %args = @_; + my $dbh = get_system_dbh(); + my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' ); + return ($status, $msg) unless $status; -sub get_dba_password { - print "In order to create or update your RT database,"; - print "this script needs to connect to your " - . $RT::DatabaseType - . " instance on " - . $RT::DatabaseHost . " as " - . $args{'dba'} . ".\n"; - print "Please specify that user's database password below. If the user has no database\n"; - print "password, just press return.\n\n"; - print "Password: "; - ReadMode('noecho'); - my $password = ReadLine(0); - ReadMode('normal'); - print "\n"; - return ($password); + print "Now creating a $db_type database $db_name for RT.\n"; + return RT::Handle->CreateDatabase( $dbh ); } -# {{{ sub _yesno -sub _yesno { - print "Proceed [y/N]:"; - my $x = scalar(); - $x =~ /^y/i; -} +sub action_drop { + my %args = @_; -# }}} + print "Dropping $db_type database $db_name.\n"; + unless ( $args{'force'} ) { + print <prepare($statement) or die $dbh->errstr; - unless ( $sth->execute ) { - die "Problem with statement:\n $statement\n" . $sth->errstr; - } - } - print "Done setting up database ACLs.\n"; + my $dbh = get_system_dbh(); + return RT::Handle->DropDatabase( $dbh ); } -# }}} - -=head2 get_system_dsn - -Returns a dsn suitable for database creates and drops -and user creates and drops - -=cut - -sub get_system_dsn { +sub action_schema { + my %args = @_; + my $dbh = get_admin_dbh(); + my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' ); + return ($status, $msg) unless $status; - my $dsn = $Handle->DSN; + print "Now populating database schema.\n"; + return RT::Handle->InsertSchema( $dbh, $args{'datafile'} || $args{'datadir'} ); +} - #with mysql, you want to connect sans database to funge things - if ( $RT::DatabaseType eq 'mysql' ) { - $dsn =~ s/dbname=$RT::DatabaseName//; +sub action_acl { + my %args = @_; + my $dbh = get_admin_dbh(); + my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'pre' ); + return ($status, $msg) unless $status; - # with postgres, you want to connect to database1 - } - elsif ( $RT::DatabaseType eq 'Pg' ) { - $dsn =~ s/dbname=$RT::DatabaseName/dbname=template1/; - } - elsif ( $RT::DatabaseType eq 'Informix' ) { - # with Informix, you want to connect sans database: - $dsn =~ s/Informix:$RT::DatabaseName/Informix:/; - } - return $dsn; + print "Now inserting database ACLs\n"; + return RT::Handle->InsertACL( $dbh, $args{'datafile'} || $args{'datadir'} ); } -sub insert_initial_data { - +sub action_coredata { + my %args = @_; + $RT::Handle = new RT::Handle; + $RT::Handle->dbh( undef ); + RT::ConnectToDatabase(); RT::InitLogging(); + my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'pre' ); + return ($status, $msg) unless $status; - #connect to the db, for actual RT work - require RT::Handle; - $RT::Handle = RT::Handle->new(); - $RT::Handle->Connect(); - - #Put together a current user object so we can create a User object - my $CurrentUser = new RT::CurrentUser(); - - print "Checking for existing system user..."; - my $test_user = RT::User->new($CurrentUser); - $test_user->Load('RT_System'); - if ( $test_user->id ) { - print "found!\n\nYou appear to have a functional RT database.\n" - . "Exiting, so as not to clobber your existing data.\n"; - exit(-1); - - } - else { - print "not found. This appears to be a new installation.\n"; - } - - print "Creating system user..."; - my $RT_System = new RT::User($CurrentUser); - - my ( $val, $msg ) = $RT_System->_BootstrapCreate( - Name => 'RT_System', - RealName => 'The RT System itself', - Comments => -'Do not delete or modify this user. It is integral to RT\'s internal database structures', - Creator => '1', - LastUpdatedBy => '1', - ); - - unless ( $val ) { - print "$msg\n"; - exit(-1); - } - print "done.\n"; - $RT::Handle->Disconnect() unless $RT::DatabaseType eq 'SQLite'; + print "Now inserting RT core system objects\n"; + return $RT::Handle->InsertInitialData; +} +sub action_insert { + my %args = @_; + $RT::Handle = new RT::Handle; + RT::Init(); + my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'pre' ); + return ($status, $msg) unless $status; + + print "Now inserting data\n"; + my $file = $args{'datafile'}; + $file = $RT::EtcPath . "/initialdata" if $init && !$file; + $file ||= $args{'datadir'}."/content"; + return $RT::Handle->InsertData( $file ); } -# load some sort of data into the database +sub action_upgrade { + my %args = @_; + my $base_dir = $args{'datadir'} || "./etc/upgrade"; + return (0, "Couldn't read dir '$base_dir' with upgrade data") + unless -d $base_dir || -r _; + + my $upgrading_from = undef; + do { + if ( defined $upgrading_from ) { + print "Doesn't match #.#.#: "; + } else { + print "Enter RT version you're upgrading from: "; + } + $upgrading_from = scalar ; + chomp $upgrading_from; + $upgrading_from =~ s/\s+//g; + } while $upgrading_from !~ /^\d+\.\d+\.\d+$/; -sub insert_data { - my $datafile = shift; + 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; - #Connect to the database and get RT::SystemUser and RT::Nobody loaded - RT::Init; + 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 $CurrentUser = RT::CurrentUser->new(); - $CurrentUser->LoadByName('RT_System'); + my @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to); - if ( $datafile eq $RT::EtcPath . "/initialdata" ) { + return (1, "No DB changes between $upgrading_from and $upgrading_to") + unless @versions; - print "Creating Superuser ACL..."; + print "\nGoing to apply following upgrades:\n"; + print map "* $_\n", @versions; - my $superuser_ace = RT::ACE->new($CurrentUser); - $superuser_ace->_BootstrapCreate( - PrincipalId => ACLEquivGroupId( $CurrentUser->Id ), - PrincipalType => 'Group', - RightName => 'SuperUser', - ObjectType => 'RT::System', - ObjectId => '1' ); + { + 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 ; + 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); - print "done.\n"; - } + return (1, "No DB changes between $upgrading_from and $upgrading_to") + unless @versions; - # Slurp in stuff to insert from the datafile. Possible things to go in here:- - # @groups, @users, @acl, @queues, @ScripActions, @ScripConditions, @templates + print "\nGoing to apply following upgrades:\n"; + print map "* $_\n", @versions; + } + } - require $datafile - || die "Couldn't find initial data for import\n" . $@; + print "\nIT'S VERY IMPORTANT TO BACK UP BEFORE THIS STEP\n\n"; + _yesno() or exit(-2) unless $args{'force'}; - if ( @Groups ) { - print "Creating groups..."; - foreach $item (@Groups) { - my $new_entry = RT::Group->new($CurrentUser); - my ( $return, $msg ) = $new_entry->_Create(%$item); - print "(Error: $msg)" unless $return; - print $return. "."; + foreach my $v ( @versions ) { + print "Processing $v\n"; + my %tmp = (%args, datadir => "$base_dir/$v", datafile => undef); + if ( -e "$base_dir/$v/schema.$db_type" ) { + action_schema( %tmp ); } - print "done.\n"; - } - if ( @Users ) { - print "Creating users..."; - foreach $item (@Users) { - my $new_entry = new RT::User($CurrentUser); - my ( $return, $msg ) = $new_entry->Create(%$item); - print "(Error: $msg)" unless $return; - print $return. "."; + if ( -e "$base_dir/$v/acl.$db_type" ) { + action_acl( %tmp ); } - print "done.\n"; - } - if ( @Queues ) { - print "Creating queues..."; - for $item (@Queues) { - my $new_entry = new RT::Queue($CurrentUser); - my ( $return, $msg ) = $new_entry->Create(%$item); - print "(Error: $msg)" unless $return; - print $return. "."; + if ( -e "$base_dir/$v/content" ) { + action_insert( %tmp ); } - print "done.\n"; } - if ( @ACL ) { - print "Creating ACL..."; - for my $item (@ACL) { - - my ($princ, $object); - - # Global rights or Queue rights? - if ( $item->{'Queue'} ) { - $object = RT::Queue->new($CurrentUser); - $object->Load( $item->{'Queue'} ); - } else { - $object = $RT::System; - } - - # Group rights or user rights? - if ( $item->{'GroupDomain'} ) { - $princ = RT::Group->new($CurrentUser); - if ( $item->{'GroupDomain'} eq 'UserDefined' ) { - $princ->LoadUserDefinedGroup( $item->{'GroupId'} ); - } elsif ( $item->{'GroupDomain'} eq 'SystemInternal' ) { - $princ->LoadSystemInternalGroup( $item->{'GroupType'} ); - } elsif ( $item->{'GroupDomain'} eq 'RT::System-Role' ) { - $princ->LoadSystemRoleGroup( $item->{'GroupType'} ); - } elsif ( $item->{'GroupDomain'} eq 'RT::Queue-Role' && - $item->{'Queue'} ) - { - $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'}, - Queue => $object->id); - } else { - $princ->Load( $item->{'GroupId'} ); - } - } else { - $princ = RT::User->new($CurrentUser); - $princ->Load( $item->{'UserId'} ); - } + return 1; +} - # Grant it - my ( $return, $msg ) = $princ->PrincipalObj->GrantRight( - Right => $item->{'Right'}, - Object => $object ); +sub get_versions_from_to { + my ($base_dir, $from, $to) = @_; - if ( $return ) { - print $return. "."; - } - else { - print $msg . "."; + opendir my $dh, $base_dir or die "couldn't open dir: $!"; + my @versions = grep -d "$base_dir/$_" && /\d+\.\d+\.\d+/, readdir $dh; + closedir $dh; - } + return + grep RT::Handle::cmp_version($_, $to) <= 0, + grep RT::Handle::cmp_version($_, $from) > 0, + sort RT::Handle::cmp_version @versions; +} - } - print "done.\n"; - } - if ( @CustomFields ) { - print "Creating custom fields..."; - for $item (@CustomFields) { - my $new_entry = new RT::CustomField($CurrentUser); - my $values = $item->{'Values'}; - delete $item->{'Values'}; - my ( $return, $msg ) = $new_entry->Create(%$item); - unless( $return ) { - print "(Error: $msg)\n"; - next; - } +sub error { + my ($action, $msg) = @_; + print STDERR "Couldn't finish '$action' step.\n\n"; + print STDERR "ERROR: $msg\n\n"; + exit(-1); +} - foreach my $value ( @{$values} ) { - my ( $eval, $emsg ) = $new_entry->AddValue(%$value); - print "(Error: $emsg)\n" unless $eval; - } +sub get_dba_password { + print "In order to create or update your RT database," + . " this script needs to connect to your " + . " $db_type instance on $db_host as $dba_user\n"; + print "Please specify that user's database password below. If the user has no database\n"; + print "password, just press return.\n\n"; + print "Password: "; + ReadMode('noecho'); + my $password = ReadLine(0); + ReadMode('normal'); + print "\n"; + return ($password); +} - if ( $item->{LookupType} && !exists $item->{'Queue'} ) { # enable by default - my $ocf = RT::ObjectCustomField->new($CurrentUser); - $ocf->Create( CustomField => $new_entry->Id ); - } +=head2 get_system_dbh - print "(Error: $msg)\n" unless $return; - print $return. "."; - } +Returns L database handle connected to B with DBA credentials. - print "done.\n"; - } +See also L. - if ( @ScripActions ) { - print "Creating ScripActions..."; +=cut - for $item (@ScripActions) { - my $new_entry = RT::ScripAction->new($CurrentUser); - my ($return,$msg) = $new_entry->Create(%$item); - unless ($return) { - print "(Error: $msg)\n"; - next; - } - print $return. "."; - } +sub get_system_dbh { + return _get_dbh( RT::Handle->SystemDSN, $dba_user, $dba_pass ); +} - print "done.\n"; - } +sub get_admin_dbh { + return _get_dbh( RT::Handle->DSN, $dba_user, $dba_pass ); +} - if ( @ScripConditions ) { - print "Creating ScripConditions..."; +=head2 get_rt_dbh [USER, PASSWORD] - for $item (@ScripConditions) { - my $new_entry = RT::ScripCondition->new($CurrentUser); - my ($return,$msg) = $new_entry->Create(%$item); - unless ($return) { - print "(Error: $msg)\n"; - next; - } - print $return. "."; - } +Returns L database handle connected to RT database, +you may specify credentials(USER and PASSWORD) to connect +with. By default connects with credentials from RT config. - print "done.\n"; - } +=cut - if ( @Templates ) { - print "Creating templates..."; +sub get_rt_dbh { + return _get_dbh( RT::Handle->DSN, $db_user, $db_pass ); +} - for $item (@Templates) { - my $new_entry = new RT::Template($CurrentUser); - my $return = $new_entry->Create(%$item); - print $return. "."; - } - print "done.\n"; - } - if ( @Scrips ) { - print "Creating scrips..."; - - for $item (@Scrips) { - my $new_entry = new RT::Scrip($CurrentUser); - my ( $return, $msg ) = $new_entry->Create(%$item); - if ( $return ) { - print $return. "."; - } - else { - print "(Error: $msg)\n"; - } - } - print "done.\n"; - } - if ( @Attributes ) { - print "Creating predefined searches..."; - my $sys = RT::System->new($CurrentUser); - - for $item (@Attributes) { - my $obj = delete $item->{Object}; # XXX: make this something loadable - $obj ||= $sys; - my ( $return, $msg ) = $obj->AddAttribute (%$item); - if ( $return ) { - print $return. "."; - } - else { - print "(Error: $msg)\n"; - } +sub _get_dbh { + my ($dsn, $user, $pass) = @_; + my $dbh = DBI->connect( + $dsn, $user, $pass, + { RaiseError => 0, PrintError => 0 }, + ); + unless ( $dbh ) { + my $msg = "Failed to connect to $dsn as user '$user': ". $DBI::errstr; + if ( $args{'debug'} ) { + require Carp; Carp::confess( $msg ); + } else { + print STDERR $msg; exit -1; } - print "done.\n"; } - $RT::Handle->Disconnect() unless $RT::DatabaseType eq 'SQLite'; - print "Done setting up database content.\n"; + return $dbh; } -=head2 ACLEquivGroupId - -Given a userid, return that user's acl equivalence group - -=cut - -sub ACLEquivGroupId { - my $username = shift; - my $user = RT::User->new($RT::SystemUser); - $user->Load($username); - my $equiv_group = RT::Group->new($RT::SystemUser); - $equiv_group->LoadACLEquivalenceGroup($user); - return ( $equiv_group->Id ); +sub _yesno { + print "Proceed [y/N]:"; + my $x = scalar(); + $x =~ /^y/i; } sub help { @@ -677,27 +427,39 @@ sub help { $0: Set up RT's database ---action init Initialize the database - drop Drop the database. - This will ERASE ALL YOUR DATA - insert_initial - Insert RT's core system objects - insert Insert data into RT's database. - By default, will use RT's installation data. - To use a local or supplementary datafile, specify it - using the '--datafile' option below. +--action init Initialize the database. This is combination of + multiple actions listed below. Create DB, schema, + setup acl, insert core data and initial data. + + upgrade Apply all needed schema/acl/content updates (will ask + for version to upgrade from) + + create Create the database. + + drop Drop the database. + This will ERASE ALL YOUR DATA + + schema Initialize only the database schema + To use a local or supplementary datafile, specify it + using the '--datadir' option below. + + acl Initialize only the database ACLs + To use a local or supplementary datafile, specify it + using the '--datadir' option below. + + coredata Insert data into RT's database. This data is required + for normal functioning of any RT instance. - acl Initialize only the database ACLs - To use a local or supplementary datafile, specify it - using the '--datadir' option below. + insert Insert data into RT's database. + By default, will use RT's installation data. + To use a local or supplementary datafile, specify it + using the '--datafile' option below. - schema Initialize only the database schema - To use a local or supplementary datafile, specify it - using the '--datadir' option below. +Several actions can be combined using comma separated list. --datafile /path/to/datafile --datadir /path/to/ Used to specify a path to find the local - database schema and acls to be installed. + database schema and acls to be installed. --dba dba's username -- 2.11.0